public void Execute() { // Clean up connections for (int i = 0; i < Connections.Length; i++) { if (!Connections[i].IsCreated) { Connections.RemoveAtSwapBack(i); --i; } } // Accept new connections NetworkConnection c; while ((c = Driver.Accept()) != default(NetworkConnection)) { Connections.Add(c); var d = new RawNetworkMessage() { Length = 0, Type = (uint)MLAPINetworkEvent.Connect, Id = c.InternalId }; PacketData.Enqueue(d); Debug.Log("Accepted a connection"); } }
public unsafe void Execute(int index) { DataStreamReader streamReader; Assert.IsTrue(Connections[index].IsCreated); NetworkEvent.Type command; while ((command = Driver.PopEventForConnection(Connections[index], out streamReader)) != NetworkEvent.Type.Empty) { if (command == NetworkEvent.Type.Data) { QueueMessage(ref streamReader, index); } else if (command == NetworkEvent.Type.Connect) { var d = new RawNetworkMessage() { Length = 0, Type = (uint)MLAPINetworkEvent.Connect, Id = index }; PacketData.Enqueue(d); } else if (command == NetworkEvent.Type.Disconnect) { var d = new RawNetworkMessage() { Length = 0, Type = (uint)MLAPINetworkEvent.Disconnect, Id = index }; PacketData.Enqueue(d); Connections[index] = default; } } }
unsafe public void Execute() { if (!Connection[0].IsCreated) { return; } DataStreamReader streamReader; NetworkEvent.Type cmd; while ((cmd = Connection[0].PopEvent(Driver, out streamReader)) != NetworkEvent.Type.Empty) { if (cmd == NetworkEvent.Type.Connect) { var d = new RawNetworkMessage() { Length = 0, Type = (uint)MLAPINetworkEvent.Connect, Id = Connection[0].InternalId }; PacketData.Enqueue(d); } else if (cmd == NetworkEvent.Type.Data) { byte channelId = streamReader.ReadByte(); int messageSize = streamReader.ReadInt(); var temp = new NativeArray <byte>(messageSize, Allocator.Temp); streamReader.ReadBytes(temp); var d = new RawNetworkMessage() { Length = messageSize, Type = (uint)MLAPINetworkEvent.Data, Id = Connection[0].InternalId, ChannelId = channelId }; UnsafeUtility.MemCpy(d.Data, temp.GetUnsafePtr(), d.Length); PacketData.Enqueue(d); } else if (cmd == NetworkEvent.Type.Disconnect) { Connection[0] = default; } } }
private unsafe void QueueMessage(ref DataStreamReader streamReader, int index) { byte channelId = streamReader.ReadByte(); int messageSize = streamReader.ReadInt(); var temp = new NativeArray <byte>(messageSize, Allocator.Temp); streamReader.ReadBytes(temp); // Debug.Log($"Server: Got a message {channelId} {messageSize} "); var d = new RawNetworkMessage() { Length = messageSize, Type = (uint)MLAPINetworkEvent.Data, Id = index, ChannelId = channelId }; UnsafeUtility.MemCpy(d.Data, temp.GetUnsafePtr(), d.Length); PacketData.Enqueue(d); }