private void Disconnected(DataReceiver sender)
 {
     mf.Invoke((MethodInvoker) delegate
     {
         sender.Close();
         _clients.Remove(ClientWithID(sender.ID));
         Console.WriteLine(String.Format("Client({0}) disconnected, current amount of clients:{1}", sender.ID, _clients.Count));
     });
 }
        private void Listener_SocketAccepted(System.Net.Sockets.Socket e)
        {
            mf.Invoke((MethodInvoker) delegate
            {
                DataReceiver dataReceiver  = new DataReceiver(e);
                dataReceiver.Received     += new DataReceiver.ClientReceiveHandler(DataReceived);
                dataReceiver.Disconnected += new DataReceiver.ClientDisconnectedHandler(Disconnected);

                Client client       = new Client(e, dataReceiver.ID);
                client.ClientStatus = ClientStatus.Unverified;
                _clients.Add(client);

                Console.WriteLine(String.Format("Client({0}) connected, current amount of clients:{1}", client.ID, _clients.Count));
            });
        }
 private void DataReceived(DataReceiver sender, byte[] data)
 {
     mf.Invoke((MethodInvoker) delegate
     {
         object dataObject   = Deserialize(data);
         Client senderClient = ClientWithID(sender.ID);
         if (dataObject is LoginPacket)
         {
             VerifyLogin(senderClient, dataObject as LoginPacket);
         }
         if (dataObject is CreateChatRoomRequestPacket)
         {
             CreateChatRoom(dataObject as CreateChatRoomRequestPacket);
         }
         if (dataObject is ChatMessagePacket)
         {
             ChatMessageReceived(dataObject as ChatMessagePacket);
         }
         if (dataObject is GameLobbyUpdatePacket)
         {
             GameLobbyUpdate(dataObject as GameLobbyUpdatePacket);
         }
     });
 }