/// <summary> /// Callback for the read opertaion. /// </summary> private void OnDataRead(IAsyncResult asyncResult) { var client = asyncResult.AsyncState as Client; try { if (client == null) { return; } NetworkStream networkStream = client.NetworkStream; var newClientEp = (IPEndPoint)client.TcpClient.Client.RemoteEndPoint; // Check if IP is banned if (!IsIpBanned(newClientEp.Address.ToString())) { // Check for server maintainance if (!Config.IsMaintainance) { int read = networkStream.EndRead(asyncResult); if (read == 0) { lock (_clients) { _clients.Remove(client); return; } } switch (read) { case 56: string[] credentials = Packet.GetParsedCredentials(client.Buffer, read, Encoding); if (!PreparedPlayers.IsPrepared(credentials[0])) { if (_db.IsValidUser(credentials[0], credentials[1])) { if (!_db.IsBanned(credentials[0])) { PreparedPlayers.PreparePlayer(credentials[0], newClientEp.Address); Write(client.TcpClient, Packet.CreateWelcomeMessage()); } else { Write(client.TcpClient, Packet.CreateMessage("Account is banned. Contact gamemaster!")); } } else { Write(client.TcpClient, Packet.CreateMessage("Invalid user ID/password!")); } } else { Write(client.TcpClient, Packet.CreateMessage("Account already logged in!")); } break; case 11: Write(client.TcpClient, Packet.CreateServerDetails()); break; default: MyLogger.WriteLog("Seems like I got something new here : " + Encoding.Default.GetString(client.Buffer)); Write(client.TcpClient, Packet.CreateMessage("Invalid user ID/password!")); break; } } else { Write(client.TcpClient, Packet.CreateMessage(Config.MaintenanceMsg)); } } else { Write(client.TcpClient, Packet.CreateMessage("Your IP is banned.Contact admin")); } networkStream.BeginRead(client.Buffer, 0, client.Buffer.Length, OnDataRead, client); } catch (Exception e) { MyLogger.WriteLog("OnDataRead error : " + e.Message); } }