Beispiel #1
0
        public void DataReceived(IAsyncResult ar)
        {
            PlayerConnection connection = (PlayerConnection)ar.AsyncState;

            foreach (Packet packet in connection.GetPacketsFromRecievedData(ar))
            {
                try
                {
                    if (connection.Player == null)
                    {
                        packetHandler.ProcessUnauthenticated(packet, connection);
                    }
                    else
                    {
                        packetHandler.ProcessAuthenticated(packet, connection.Player);
                    }
                }
                catch (Exception ex)
                {
                    Log.Info("Exception while processing packet: " + packet + " " + ex);
                }
            }

            if (connection.Open)
            {
                connection.BeginReceive(new AsyncCallback(DataReceived));
            }
            else
            {
                PlayerDisconnected(connection);
            }
        }
Beispiel #2
0
        public void PlayerAuthenticated(Player player, PlayerConnection connection)
        {
            connection.Player = player;

            lock (connectionsByPlayer)
            {
                connectionsByPlayer[player] = connection;
            }
        }
Beispiel #3
0
        public void ClientAccepted(IAsyncResult ar)
        {
            Log.Info("New client connected");

            Socket socket = (Socket)ar.AsyncState;

            PlayerConnection connection = new PlayerConnection(socket.EndAccept(ar)); // TODO: Will this throw an error if timed correctly?

            connection.BeginReceive(new AsyncCallback(DataReceived));

            socket.BeginAccept(new AsyncCallback(ClientAccepted), socket);
        }
Beispiel #4
0
        private void PlayerDisconnected(PlayerConnection connection)
        {
            Player player = connection.Player;

            if (player != null)
            {
                lock (connectionsByPlayer)
                {
                    connectionsByPlayer.Remove(player);
                }

                Disconnect disconnectPacket = new Disconnect(player.Id);
                SendPacketToAllPlayers(disconnectPacket);
                Log.Info("Player disconnected: " + player.Id);
            }
        }