Improve Lua Networking
This commit is contained in:
@@ -736,6 +736,8 @@ namespace Barotrauma.Networking
|
||||
MultiPlayerCampaign campaign = GameMain.NetLobbyScreen.SelectedMode == GameMain.GameSession?.GameMode.Preset ?
|
||||
GameMain.GameSession?.GameMode as MultiPlayerCampaign : null;
|
||||
|
||||
GameMain.Lua.networking.NetMessageReceived(inc, header);
|
||||
|
||||
switch (header)
|
||||
{
|
||||
case ServerPacketHeader.PING_REQUEST:
|
||||
@@ -972,9 +974,6 @@ namespace Barotrauma.Networking
|
||||
case ServerPacketHeader.EVENTACTION:
|
||||
GameMain.GameSession?.EventManager.ClientRead(inc);
|
||||
break;
|
||||
case ServerPacketHeader.LUA_NET_MESSAGE:
|
||||
GameMain.Lua.networking.NetMessageReceived(inc);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -710,6 +710,9 @@ namespace Barotrauma.Networking
|
||||
var connectedClient = connectedClients.Find(c => c.Connection == sender);
|
||||
|
||||
ClientPacketHeader header = (ClientPacketHeader)inc.ReadByte();
|
||||
|
||||
GameMain.Lua.networking.NetMessageReceived(inc, header, connectedClient);
|
||||
|
||||
switch (header)
|
||||
{
|
||||
case ClientPacketHeader.PING_RESPONSE:
|
||||
@@ -848,9 +851,6 @@ namespace Barotrauma.Networking
|
||||
case ClientPacketHeader.ERROR:
|
||||
HandleClientError(inc, connectedClient);
|
||||
break;
|
||||
case ClientPacketHeader.LUA_NET_MESSAGE:
|
||||
GameMain.Lua.networking.NetMessageReceived(inc, connectedClient);
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -4,7 +4,6 @@ using System.Text;
|
||||
using MoonSharp.Interpreter;
|
||||
using Microsoft.Xna.Framework;
|
||||
using Barotrauma.Networking;
|
||||
using System.Threading.Tasks;
|
||||
using Barotrauma.Items.Components;
|
||||
using System.IO;
|
||||
using System.Net;
|
||||
@@ -15,9 +14,6 @@ using System.Reflection;
|
||||
using HarmonyLib;
|
||||
using MoonSharp.Interpreter.Interop;
|
||||
using System.Diagnostics;
|
||||
using System.Reflection.Emit;
|
||||
using Barotrauma.Extensions;
|
||||
using System.Threading;
|
||||
|
||||
namespace Barotrauma
|
||||
{
|
||||
@@ -702,22 +698,46 @@ namespace Barotrauma
|
||||
env = e;
|
||||
}
|
||||
|
||||
public Dictionary<string, object> NetReceives = new Dictionary<string, object>();
|
||||
|
||||
public Dictionary<string, object> LuaNetReceives = new Dictionary<string, object>();
|
||||
|
||||
#if SERVER
|
||||
[MoonSharpHidden]
|
||||
public void NetMessageReceived(IReadMessage netMessage, Client client = null)
|
||||
public void NetMessageReceived(IReadMessage netMessage, ClientPacketHeader header, Client client = null)
|
||||
{
|
||||
string netMessageName = netMessage.ReadString();
|
||||
if (NetReceives[netMessageName] is Closure)
|
||||
env.lua.Call(NetReceives[netMessageName], new object[] { netMessage, client });
|
||||
if (header == ClientPacketHeader.LUA_NET_MESSAGE)
|
||||
{
|
||||
string netMessageName = netMessage.ReadString();
|
||||
if (LuaNetReceives[netMessageName] is Closure)
|
||||
env.lua.Call(LuaNetReceives[netMessageName], new object[] { netMessage, client });
|
||||
}
|
||||
else
|
||||
{
|
||||
env.hook.Call("netMessageReceived", netMessage, header, client);
|
||||
}
|
||||
}
|
||||
|
||||
#else
|
||||
[MoonSharpHidden]
|
||||
public void NetMessageReceived(IReadMessage netMessage, ServerPacketHeader header, Client client = null)
|
||||
{
|
||||
if (header == ServerPacketHeader.LUA_NET_MESSAGE)
|
||||
{
|
||||
string netMessageName = netMessage.ReadString();
|
||||
if (LuaNetReceives[netMessageName] is Closure)
|
||||
env.lua.Call(LuaNetReceives[netMessageName], new object[] { netMessage, client });
|
||||
}
|
||||
else
|
||||
{
|
||||
env.hook.Call("netMessageReceived", netMessage, header, client);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
public void Receive(string netMessageName, object callback)
|
||||
{
|
||||
NetReceives[netMessageName] = callback;
|
||||
LuaNetReceives[netMessageName] = callback;
|
||||
}
|
||||
|
||||
|
||||
public IWriteMessage Start(string netMessageName)
|
||||
{
|
||||
var message = new WriteOnlyMessage();
|
||||
@@ -819,7 +839,7 @@ namespace Barotrauma
|
||||
GameMain.NetworkMember.CreateEntityEvent(entity, extraData);
|
||||
}
|
||||
|
||||
#if SERVER
|
||||
#if SERVER
|
||||
public void UpdateClientPermissions(Client client)
|
||||
{
|
||||
GameMain.Server.UpdateClientPermissions(client);
|
||||
|
||||
@@ -65,11 +65,10 @@ namespace Barotrauma
|
||||
return new Pair<JobPrefab, int>((JobPrefab)v.Table.Get(1).ToObject(), (int)v.Table.Get(2).CastToNumber());
|
||||
});
|
||||
|
||||
Script.GlobalOptions.CustomConverters.SetClrToScriptCustomConversion<UInt64>(
|
||||
(Script script, UInt64 v) =>
|
||||
{
|
||||
return DynValue.NewString(v.ToString());
|
||||
});
|
||||
Script.GlobalOptions.CustomConverters.SetClrToScriptCustomConversion<UInt64>((Script script, UInt64 v) =>
|
||||
{
|
||||
return DynValue.NewString(v.ToString());
|
||||
});
|
||||
}
|
||||
|
||||
public static void RegisterAction<T>()
|
||||
|
||||
60
Barotrauma/BarotraumaShared/SharedSource/Lua/LuaProxy.cs
Normal file
60
Barotrauma/BarotraumaShared/SharedSource/Lua/LuaProxy.cs
Normal file
@@ -0,0 +1,60 @@
|
||||
using System;
|
||||
using MoonSharp.Interpreter;
|
||||
using Barotrauma.Networking;
|
||||
|
||||
namespace Barotrauma
|
||||
{
|
||||
|
||||
partial class LuaSetup
|
||||
{
|
||||
public class LuaWriteOnlyMessage
|
||||
{
|
||||
private WriteOnlyMessage target;
|
||||
|
||||
[MoonSharpHidden]
|
||||
public LuaWriteOnlyMessage(WriteOnlyMessage p)
|
||||
{
|
||||
target = p;
|
||||
}
|
||||
|
||||
public void WriteByte(byte v) => target.Write(v);
|
||||
public void WriteUShort(ushort v) => target.Write(v);
|
||||
|
||||
public void Write(bool val) => target.Write(val);
|
||||
public void WritePadBits() => target.WritePadBits();
|
||||
public void Write(byte val) => target.Write(val);
|
||||
public void Write(Int16 val) => target.Write(val);
|
||||
public void Write(UInt16 val) => target.Write(val);
|
||||
public void Write(Int32 val) => target.Write(val);
|
||||
public void Write(UInt32 val) => target.Write(val);
|
||||
public void Write(Int64 val) => target.Write(val);
|
||||
public void Write(UInt64 val) => target.Write(val);
|
||||
public void Write(Single val) => target.Write(val);
|
||||
public void Write(Double val) => target.Write(val);
|
||||
public void WriteColorR8G8B8(Microsoft.Xna.Framework.Color val) => target.WriteColorR8G8B8(val);
|
||||
public void WriteColorR8G8B8A8(Microsoft.Xna.Framework.Color val) => target.WriteColorR8G8B8A8(val);
|
||||
public void WriteVariableUInt32(UInt32 val) => target.WriteVariableUInt32(val);
|
||||
public void Write(string val) => target.Write(val);
|
||||
public void WriteRangedInteger(int val, int min, int max) => target.WriteRangedInteger(val, min, max);
|
||||
public void WriteRangedSingle(Single val, Single min, Single max, int bitCount) => target.WriteRangedSingle(val, min, max, bitCount);
|
||||
public void Write(byte[] val, int startIndex, int length) => target.Write(val, startIndex, length);
|
||||
|
||||
public void PrepareForSending(ref byte[] outBuf, out bool isCompressed, out int outLength) => target.PrepareForSending(ref outBuf, out isCompressed, out outLength);
|
||||
|
||||
public int BitPosition
|
||||
{
|
||||
get { return target.BitPosition; }
|
||||
set { target.BitPosition = value; }
|
||||
}
|
||||
public int BytePosition => target.BytePosition;
|
||||
public byte[] Buffer => target.Buffer;
|
||||
public int LengthBits
|
||||
{
|
||||
get { return target.LengthBits; }
|
||||
set { target.LengthBits = value; }
|
||||
}
|
||||
public int LengthBytes => target.LengthBytes;
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
@@ -5,22 +5,10 @@ using System.IO;
|
||||
using Barotrauma.Networking;
|
||||
using MoonSharp.Interpreter;
|
||||
using Microsoft.Xna.Framework;
|
||||
using System.Threading.Tasks;
|
||||
using Barotrauma.Items.Components;
|
||||
using System.Diagnostics;
|
||||
using System.Linq;
|
||||
using MoonSharp.Interpreter.Interop;
|
||||
using System.Reflection;
|
||||
using FarseerPhysics.Dynamics;
|
||||
using System.IO.Compression;
|
||||
using HarmonyLib;
|
||||
|
||||
#if CLIENT
|
||||
using Microsoft.Xna.Framework.Graphics;
|
||||
using EventInput;
|
||||
using Microsoft.Xna.Framework.Input;
|
||||
#endif
|
||||
|
||||
namespace Barotrauma
|
||||
{
|
||||
partial class LuaSetup
|
||||
@@ -355,8 +343,8 @@ namespace Barotrauma
|
||||
UserData.RegisterType<LuaNetworking>();
|
||||
UserData.RegisterType<LuaUserData>();
|
||||
UserData.RegisterType<IUserDataDescriptor>();
|
||||
|
||||
|
||||
UserData.RegisterProxyType<LuaWriteOnlyMessage, WriteOnlyMessage>(r => new LuaWriteOnlyMessage(r));
|
||||
|
||||
#if SERVER
|
||||
|
||||
@@ -384,7 +372,7 @@ namespace Barotrauma
|
||||
lua.Globals["Timer"] = new LuaTimer(this);
|
||||
lua.Globals["File"] = UserData.CreateStatic<LuaFile>();
|
||||
lua.Globals["Networking"] = networking;
|
||||
|
||||
|
||||
#if SERVER
|
||||
|
||||
#elif CLIENT
|
||||
|
||||
Reference in New Issue
Block a user