Improve Lua Networking
This commit is contained in:
@@ -736,6 +736,8 @@ namespace Barotrauma.Networking
|
|||||||
MultiPlayerCampaign campaign = GameMain.NetLobbyScreen.SelectedMode == GameMain.GameSession?.GameMode.Preset ?
|
MultiPlayerCampaign campaign = GameMain.NetLobbyScreen.SelectedMode == GameMain.GameSession?.GameMode.Preset ?
|
||||||
GameMain.GameSession?.GameMode as MultiPlayerCampaign : null;
|
GameMain.GameSession?.GameMode as MultiPlayerCampaign : null;
|
||||||
|
|
||||||
|
GameMain.Lua.networking.NetMessageReceived(inc, header);
|
||||||
|
|
||||||
switch (header)
|
switch (header)
|
||||||
{
|
{
|
||||||
case ServerPacketHeader.PING_REQUEST:
|
case ServerPacketHeader.PING_REQUEST:
|
||||||
@@ -972,9 +974,6 @@ namespace Barotrauma.Networking
|
|||||||
case ServerPacketHeader.EVENTACTION:
|
case ServerPacketHeader.EVENTACTION:
|
||||||
GameMain.GameSession?.EventManager.ClientRead(inc);
|
GameMain.GameSession?.EventManager.ClientRead(inc);
|
||||||
break;
|
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);
|
var connectedClient = connectedClients.Find(c => c.Connection == sender);
|
||||||
|
|
||||||
ClientPacketHeader header = (ClientPacketHeader)inc.ReadByte();
|
ClientPacketHeader header = (ClientPacketHeader)inc.ReadByte();
|
||||||
|
|
||||||
|
GameMain.Lua.networking.NetMessageReceived(inc, header, connectedClient);
|
||||||
|
|
||||||
switch (header)
|
switch (header)
|
||||||
{
|
{
|
||||||
case ClientPacketHeader.PING_RESPONSE:
|
case ClientPacketHeader.PING_RESPONSE:
|
||||||
@@ -848,9 +851,6 @@ namespace Barotrauma.Networking
|
|||||||
case ClientPacketHeader.ERROR:
|
case ClientPacketHeader.ERROR:
|
||||||
HandleClientError(inc, connectedClient);
|
HandleClientError(inc, connectedClient);
|
||||||
break;
|
break;
|
||||||
case ClientPacketHeader.LUA_NET_MESSAGE:
|
|
||||||
GameMain.Lua.networking.NetMessageReceived(inc, connectedClient);
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -4,7 +4,6 @@ using System.Text;
|
|||||||
using MoonSharp.Interpreter;
|
using MoonSharp.Interpreter;
|
||||||
using Microsoft.Xna.Framework;
|
using Microsoft.Xna.Framework;
|
||||||
using Barotrauma.Networking;
|
using Barotrauma.Networking;
|
||||||
using System.Threading.Tasks;
|
|
||||||
using Barotrauma.Items.Components;
|
using Barotrauma.Items.Components;
|
||||||
using System.IO;
|
using System.IO;
|
||||||
using System.Net;
|
using System.Net;
|
||||||
@@ -15,9 +14,6 @@ using System.Reflection;
|
|||||||
using HarmonyLib;
|
using HarmonyLib;
|
||||||
using MoonSharp.Interpreter.Interop;
|
using MoonSharp.Interpreter.Interop;
|
||||||
using System.Diagnostics;
|
using System.Diagnostics;
|
||||||
using System.Reflection.Emit;
|
|
||||||
using Barotrauma.Extensions;
|
|
||||||
using System.Threading;
|
|
||||||
|
|
||||||
namespace Barotrauma
|
namespace Barotrauma
|
||||||
{
|
{
|
||||||
@@ -702,22 +698,46 @@ namespace Barotrauma
|
|||||||
env = e;
|
env = e;
|
||||||
}
|
}
|
||||||
|
|
||||||
public Dictionary<string, object> NetReceives = new Dictionary<string, object>();
|
public Dictionary<string, object> LuaNetReceives = new Dictionary<string, object>();
|
||||||
|
|
||||||
|
#if SERVER
|
||||||
[MoonSharpHidden]
|
[MoonSharpHidden]
|
||||||
public void NetMessageReceived(IReadMessage netMessage, Client client = null)
|
public void NetMessageReceived(IReadMessage netMessage, ClientPacketHeader header, Client client = null)
|
||||||
{
|
{
|
||||||
string netMessageName = netMessage.ReadString();
|
if (header == ClientPacketHeader.LUA_NET_MESSAGE)
|
||||||
if (NetReceives[netMessageName] is Closure)
|
{
|
||||||
env.lua.Call(NetReceives[netMessageName], new object[] { netMessage, client });
|
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)
|
public void Receive(string netMessageName, object callback)
|
||||||
{
|
{
|
||||||
NetReceives[netMessageName] = callback;
|
LuaNetReceives[netMessageName] = callback;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public IWriteMessage Start(string netMessageName)
|
public IWriteMessage Start(string netMessageName)
|
||||||
{
|
{
|
||||||
var message = new WriteOnlyMessage();
|
var message = new WriteOnlyMessage();
|
||||||
@@ -819,7 +839,7 @@ namespace Barotrauma
|
|||||||
GameMain.NetworkMember.CreateEntityEvent(entity, extraData);
|
GameMain.NetworkMember.CreateEntityEvent(entity, extraData);
|
||||||
}
|
}
|
||||||
|
|
||||||
#if SERVER
|
#if SERVER
|
||||||
public void UpdateClientPermissions(Client client)
|
public void UpdateClientPermissions(Client client)
|
||||||
{
|
{
|
||||||
GameMain.Server.UpdateClientPermissions(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());
|
return new Pair<JobPrefab, int>((JobPrefab)v.Table.Get(1).ToObject(), (int)v.Table.Get(2).CastToNumber());
|
||||||
});
|
});
|
||||||
|
|
||||||
Script.GlobalOptions.CustomConverters.SetClrToScriptCustomConversion<UInt64>(
|
Script.GlobalOptions.CustomConverters.SetClrToScriptCustomConversion<UInt64>((Script script, UInt64 v) =>
|
||||||
(Script script, UInt64 v) =>
|
{
|
||||||
{
|
return DynValue.NewString(v.ToString());
|
||||||
return DynValue.NewString(v.ToString());
|
});
|
||||||
});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void RegisterAction<T>()
|
public static void RegisterAction<T>()
|
||||||
|
|||||||
@@ -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 Barotrauma.Networking;
|
||||||
using MoonSharp.Interpreter;
|
using MoonSharp.Interpreter;
|
||||||
using Microsoft.Xna.Framework;
|
using Microsoft.Xna.Framework;
|
||||||
using System.Threading.Tasks;
|
|
||||||
using Barotrauma.Items.Components;
|
|
||||||
using System.Diagnostics;
|
|
||||||
using System.Linq;
|
|
||||||
using MoonSharp.Interpreter.Interop;
|
using MoonSharp.Interpreter.Interop;
|
||||||
using System.Reflection;
|
|
||||||
using FarseerPhysics.Dynamics;
|
|
||||||
using System.IO.Compression;
|
using System.IO.Compression;
|
||||||
using HarmonyLib;
|
using HarmonyLib;
|
||||||
|
|
||||||
#if CLIENT
|
|
||||||
using Microsoft.Xna.Framework.Graphics;
|
|
||||||
using EventInput;
|
|
||||||
using Microsoft.Xna.Framework.Input;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
namespace Barotrauma
|
namespace Barotrauma
|
||||||
{
|
{
|
||||||
partial class LuaSetup
|
partial class LuaSetup
|
||||||
@@ -355,8 +343,8 @@ namespace Barotrauma
|
|||||||
UserData.RegisterType<LuaNetworking>();
|
UserData.RegisterType<LuaNetworking>();
|
||||||
UserData.RegisterType<LuaUserData>();
|
UserData.RegisterType<LuaUserData>();
|
||||||
UserData.RegisterType<IUserDataDescriptor>();
|
UserData.RegisterType<IUserDataDescriptor>();
|
||||||
|
|
||||||
|
|
||||||
|
UserData.RegisterProxyType<LuaWriteOnlyMessage, WriteOnlyMessage>(r => new LuaWriteOnlyMessage(r));
|
||||||
|
|
||||||
#if SERVER
|
#if SERVER
|
||||||
|
|
||||||
@@ -384,7 +372,7 @@ namespace Barotrauma
|
|||||||
lua.Globals["Timer"] = new LuaTimer(this);
|
lua.Globals["Timer"] = new LuaTimer(this);
|
||||||
lua.Globals["File"] = UserData.CreateStatic<LuaFile>();
|
lua.Globals["File"] = UserData.CreateStatic<LuaFile>();
|
||||||
lua.Globals["Networking"] = networking;
|
lua.Globals["Networking"] = networking;
|
||||||
|
|
||||||
#if SERVER
|
#if SERVER
|
||||||
|
|
||||||
#elif CLIENT
|
#elif CLIENT
|
||||||
|
|||||||
Reference in New Issue
Block a user