private void TCPClientMethod(int index) { Packet receivedPacket; //loop to allow continuous communication while ((receivedPacket = _clients[index].TCPRead()) != null) { try { switch (receivedPacket.EPacketType) { case PacketType.EMPTY: EmptyPacket emptyPacket = (EmptyPacket)receivedPacket; break; case PacketType.LOGIN: LoginPacket loginPacket = (LoginPacket)receivedPacket; _clients[index].clientData.posX = loginPacket.SpriteX; _clients[index].clientData.posY = loginPacket.SpriteY; _clients[index].clientData.playerIndex = (_clients.Count - 1); //confirm connection to joining player JoinConfirmationPacket joinConfirmationPacket = new JoinConfirmationPacket((_clients.Count - 1), GetAllPlayerXValues(), GetAllPlayerYValues()); _clients[index].TCPSend(joinConfirmationPacket); PlayerJoinPacket playerJoinPacket = new PlayerJoinPacket(_clients.Count - 1, loginPacket.SpriteX, loginPacket.SpriteY); Console.WriteLine(_clients.Count); TCPSendPacketToAll(playerJoinPacket); Console.WriteLine("PACKETS SENT"); break; case PacketType.DISCONNECT: DisconnectPacket disconnectRequestPacket = (DisconnectPacket)receivedPacket; break; } } catch (Exception e) { Console.WriteLine("[Error] " + e.Message + e.StackTrace); break; } } try { _clients[index].Close(); //Take client out of client ConcurrentBag _clients.TryRemove(index, out Client c); } catch (Exception e) { Console.WriteLine("[Error] " + e.Message + e.StackTrace); } }
private void TCPProcessServerResponse() { Packet receivedPacket; while ((receivedPacket = TCPRead()) != null) { try { switch (receivedPacket.EPacketType) { case PacketType.EMPTY: EmptyPacket emptyPacket = (EmptyPacket)receivedPacket; break; case PacketType.PLAYERJOIN: PlayerJoinPacket playerJoinPacket = (PlayerJoinPacket)receivedPacket; if (_game.localServerIndex != playerJoinPacket.ExistingPlayers) { _game.InitialiseNewPlayer(playerJoinPacket.X, playerJoinPacket.Y); } break; case PacketType.JOINCONFIRMATION: JoinConfirmationPacket joinConfirmationPacket = (JoinConfirmationPacket)receivedPacket; _game.localServerIndex = joinConfirmationPacket.ServerIndex; if (joinConfirmationPacket.ServerIndex > 0) { _game.LoadExistingPlayers(joinConfirmationPacket.ServerIndex, joinConfirmationPacket.XValues, joinConfirmationPacket.YValues); } _game.InitialiseNewPlayer(0.0f, 0.0f); break; case PacketType.PLAYERPOSITION: PlayerPositionPacket playerPositionPacket = (PlayerPositionPacket)receivedPacket; _game.ChangePlayerPosition(playerPositionPacket.PlayerIndex, playerPositionPacket.X, playerPositionPacket.Y); break; } } catch (SocketException e) { Debug.WriteLine("[Error] " + e.Message + e.StackTrace); break; } } }