2 using System.Collections.Generic;
6 partial class LuaCsNetworking
8 private Dictionary<ushort, Queue<IReadMessage>> receiveQueue =
new Dictionary<ushort, Queue<IReadMessage>>();
14 WriteOnlyMessage message =
new WriteOnlyMessage();
16 message.WriteByte((
byte)LuaCsClientToServer.RequestAllIds);
28 LuaCsServerToClient luaCsHeader = (LuaCsServerToClient)netMessage.
ReadByte();
32 case LuaCsServerToClient.NetMessageString:
33 HandleNetMessageString(netMessage);
36 case LuaCsServerToClient.NetMessageId:
37 HandleNetMessageId(netMessage);
40 case LuaCsServerToClient.ReceiveIds:
48 var message =
new WriteOnlyMessage();
52 if (stringToId.ContainsKey(netMessageName))
54 message.WriteByte((
byte)LuaCsClientToServer.NetMessageId);
55 message.WriteUInt16(stringToId[netMessageName]);
59 message.WriteByte((
byte)LuaCsClientToServer.NetMessageString);
60 message.WriteString(netMessageName);
70 netReceives[netMessageName] = callback;
75 if (stringToId.ContainsKey(netMessageName)) {
return; }
79 WriteOnlyMessage message =
new WriteOnlyMessage();
81 message.WriteByte((
byte)LuaCsClientToServer.RequestSingleId);
83 message.WriteString(netMessageName);
85 Send(message, DeliveryMethod.Reliable);
88 public void Send(
IWriteMessage netMessage, DeliveryMethod deliveryMethod = DeliveryMethod.Reliable)
97 if (idToString.ContainsKey(
id))
99 string name = idToString[id];
101 HandleNetMessage(netMessage, name, client);
105 if (!receiveQueue.ContainsKey(
id)) { receiveQueue[id] =
new Queue<IReadMessage>(); }
106 receiveQueue[id].Enqueue(netMessage);
108 if (GameSettings.CurrentConfig.VerboseLogging)
110 LuaCsLogger.LogMessage($
"Received NetMessage with unknown id {id} from server, storing in queue in case we receive the id later.");
119 for (
int i = 0; i < size; i++)
124 idToString[id] = name;
125 stringToId[name] = id;
127 if (!receiveQueue.ContainsKey(
id))
132 while (receiveQueue[
id].TryDequeue(out var queueMessage))
134 if (netReceives.ContainsKey(name))
136 netReceives[name](queueMessage,
null);
object Call(string name, params object[] args)
void RequestId(string netMessageName)
void Send(IWriteMessage netMessage, DeliveryMethod deliveryMethod=DeliveryMethod.Reliable)
void NetMessageReceived(IReadMessage netMessage, ServerPacketHeader header, Client client=null)
IWriteMessage Start(string netMessageName)
void Receive(string netMessageName, LuaCsAction callback)
delegate void LuaCsAction(params object[] args)