private void ProcessServerPackets() { IgnoranceIncomingPacket incomingPacket; IgnoranceConnectionEvent connectionEvent; int adjustedConnectionId; Packet payload; // Incoming connection events. while (Server.ConnectionEvents.TryDequeue(out connectionEvent)) { adjustedConnectionId = (int)connectionEvent.NativePeerId + 1; // TODO: Investigate ArgumentException: An item with the same key has already been added. Key: <id> ConnectionLookupDict.Add(adjustedConnectionId, new PeerConnectionData { NativePeerId = connectionEvent.NativePeerId, IP = connectionEvent.IP, Port = connectionEvent.Port }); OnServerConnected?.Invoke(adjustedConnectionId); } // Handle incoming data packets. // Console.WriteLine($"Server Incoming Queue is {Server.Incoming.Count}"); while (Server.Incoming.TryDequeue(out incomingPacket)) { adjustedConnectionId = (int)incomingPacket.NativePeerId + 1; payload = incomingPacket.Payload; int length = payload.Length; ArraySegment <byte> dataSegment; // Copy to working buffer and dispose of it. if (length > InternalPacketBuffer.Length) { byte[] oneFreshNTastyGcAlloc = new byte[length]; payload.CopyTo(oneFreshNTastyGcAlloc); dataSegment = new ArraySegment <byte>(oneFreshNTastyGcAlloc, 0, length); } else { payload.CopyTo(InternalPacketBuffer); dataSegment = new ArraySegment <byte>(InternalPacketBuffer, 0, length); } payload.Dispose(); OnServerDataReceived?.Invoke(adjustedConnectionId, dataSegment, incomingPacket.Channel); } // Disconnection events. while (Server.DisconnectionEvents.TryDequeue(out IgnoranceConnectionEvent disconnectionEvent)) { adjustedConnectionId = (int)disconnectionEvent.NativePeerId + 1; ConnectionLookupDict.Remove(adjustedConnectionId); // Invoke Mirror handler. OnServerDisconnected?.Invoke(adjustedConnectionId); } }
private void ProcessServerPackets() { IgnoranceIncomingPacket incomingPacket; IgnoranceConnectionEvent connectionEvent; int adjustedConnectionId; Packet payload; // Incoming connection events. while (Server.ConnectionEvents.TryDequeue(out connectionEvent)) { adjustedConnectionId = (int)connectionEvent.NativePeerId + 1; if (LogType == IgnoranceLogType.Verbose) { Debug.Log($"Processing a server connection event from ENet native peer {connectionEvent.NativePeerId}."); } // Nah mate, just a regular connection. if (LogType == IgnoranceLogType.Verbose) { Debug.Log($"ProcessServerPackets fired; handling connection event from native peer {connectionEvent.NativePeerId}. This peer would be Mirror ConnID {adjustedConnectionId}."); } ConnectionLookupDict.Add(adjustedConnectionId, new PeerConnectionData { NativePeerId = connectionEvent.NativePeerId, IP = connectionEvent.IP, Port = connectionEvent.Port }); OnServerConnected?.Invoke(adjustedConnectionId); } // Handle incoming data packets. // Console.WriteLine($"Server Incoming Queue is {Server.Incoming.Count}"); while (Server.Incoming.TryDequeue(out incomingPacket)) { adjustedConnectionId = (int)incomingPacket.NativePeerId + 1; payload = incomingPacket.Payload; int length = payload.Length; ArraySegment <byte> dataSegment; // Copy to working buffer and dispose of it. if (length > InternalPacketBuffer.Length) { byte[] oneFreshNTastyGcAlloc = new byte[length]; payload.CopyTo(oneFreshNTastyGcAlloc); dataSegment = new ArraySegment <byte>(oneFreshNTastyGcAlloc, 0, length); } else { payload.CopyTo(InternalPacketBuffer); dataSegment = new ArraySegment <byte>(InternalPacketBuffer, 0, length); } payload.Dispose(); OnServerDataReceived?.Invoke(adjustedConnectionId, dataSegment, incomingPacket.Channel); // Some messages can disable the transport // If the transport was disabled by any of the messages, we have to break out of the loop and wait until we've been re-enabled. if (!enabled) { break; } } // Disconnection events. while (Server.DisconnectionEvents.TryDequeue(out IgnoranceConnectionEvent disconnectionEvent)) { adjustedConnectionId = (int)disconnectionEvent.NativePeerId + 1; if (LogType == IgnoranceLogType.Verbose) { Debug.Log($"ProcessServerPackets fired; handling disconnection event from native peer {disconnectionEvent.NativePeerId}."); } ConnectionLookupDict.Remove(adjustedConnectionId); // Invoke Mirror handler. OnServerDisconnected?.Invoke(adjustedConnectionId); } }