private void ClientLoop(object _client) { var client = _client as TcpClient; NetworkStream stream = client.GetStream(); Player player = new Player(stream, database); // new Packet(Packet.TYPE.HELLO).AddU32((uint)OS.GetTicksMsec()).Send(stream); new Packet(Packet.TYPE.HELLO).AddU16(version).Send(stream); var bytes = new byte[256]; GD.Print("Player connected (" + playersOnline.Count + ")"); statsPlayers++; while (true) { try { int read = stream.Read(bytes, 0, bytes.Length); if (read == 0) { GD.Print("Connection closed"); player.LogOut(); client.Close(); return; } } catch (System.IO.IOException) { GD.Print("Connection error"); player.LogOut(); //tutaj np. dodanie do hanged connections i czekanie sobie, zamiast logout client.Close(); return; } Server.statsPacketsReceived++; Server.statsBytesReceived += bytes[0]; var unpacker = new Unpacker(bytes); // GD.Print("Received packet: " + unpacker.GetCommand().ToString()); unpacker.HandlePacket(database, player); } // client.Close(); }