/// <summary> /// Method is called on each update to check for new messages /// </summary> private void ReadNetwork() { NetIncomingMessage msg; while ((msg = Client.ReadMessage()) != null) { switch (msg.MessageType) { case NetIncomingMessageType.DiscoveryResponse: Client.Connect(msg.SenderEndPoint); Maps map = (Maps)msg.ReadByte(); LoadMap(map); break; case NetIncomingMessageType.StatusChanged: //register action for when we have loaded all entities NetConnectionStatus status = (NetConnectionStatus)msg.ReadByte(); Console.WriteLine(status); Console.WriteLine(msg.ReadString()); //on successful connect, we add the loadfinish method, which should immediately fire as //everything probably has loaded yet if (status == NetConnectionStatus.Connected) { Console.WriteLine("connection successful"); Scene.OnEmptyEntitiesToAdd += LoadFinish; } break; case NetIncomingMessageType.VerboseDebugMessage: case NetIncomingMessageType.DebugMessage: case NetIncomingMessageType.WarningMessage: case NetIncomingMessageType.ErrorMessage: Console.WriteLine(msg.ReadString()); break; case NetIncomingMessageType.Data: //the first four bytes in each message contain the type. NetworkMessageType info = (NetworkMessageType)msg.ReadByte(); //notify everyone who wanted to be notified upon message arrival OnClientData?.Invoke(Client, new NetworkEventArgs(msg, info)); break; default: Console.WriteLine("Unhandled type: " + msg.MessageType); break; } Client.Recycle(msg); } }
private void AcceptCallback(IAsyncResult ar) { CancellationToken cancellationToken = (CancellationToken)ar.AsyncState; _waiterConnection.Release(); Socket handler = _listenerSocket.EndAccept(ar); _logger.LogDebug($"Client connected - Handle: " + handler.Handle); var connection = _container.Resolve <TCPConnection>(new TypedParameter(typeof(Socket), handler)); _connections.TryAdd(handler.Handle, connection); connection.OnReceivePacket += (s, e) => OnClientData?.Invoke(this, new Message((IConnection)s, e)); connection.OnDisconnect += (s, e) => OnClientDisconnect?.Invoke(this, (IConnection)s); OnClientConnect?.Invoke(this, connection); connection.StartListenData(cancellationToken, _options.Source, true); }