public static void WelcomeRecieved(int fromClient, Packet packet) { int clientIDCheck = packet.ReadInt(); string username = packet.ReadString(); Console.WriteLine($"{Server.clients[fromClient].tcp.socket.Client.RemoteEndPoint} connected successfully and is now player {fromClient}"); if (fromClient != clientIDCheck) { Console.WriteLine($"Player \"{username}\" (ID: {fromClient}) has assumed the wrong client ID ({clientIDCheck})!"); } //TODO send player into game Player clientPlayer = GameLogic.GetPlayer(username); if (clientPlayer != null) { foreach (Client client in Server.clients.Values) { if (client.Player == clientPlayer) { // Console.WriteLine($"Can't assign a Player to \"{username}\" (ID: {fromClient}) because there is already an active client with the username \"{username}\"!"); // Server.clients[fromClient].Disconnect(); Console.WriteLine("A Player has connected with a name which is already assigned to an active player. Assuming that this is due to a network change the server tries to sync the client with the lost packages!"); int receivedClientPackages = packet.ReadInt(); foreach (KeyValuePair <int, Client> kvp in Server.clients) { if (kvp.Value.Player == clientPlayer && kvp.Value != client) { int missingPackages = kvp.Value.tcp.sentPackages - receivedClientPackages; if (missingPackages > PacketBuffer.size) { Console.WriteLine("Number of lost packages were too high. Full Reconnect for client necessary!"); ServerSend.InitGameLogic(fromClient); } else { List <byte[]> lostPackages = PacketBuffer.GetLostPackets(missingPackages); Server.clients[fromClient].tcp.SendData(lostPackages); } Server.clients[fromClient].tcp.sentPackages = 0; // Server.clients[fromClient].tcp.sentPackages = kvp.Value.tcp.sentPackages; Server.clients[kvp.Key].Disconnect(); break; } } } } Server.clients[fromClient].Player = clientPlayer; } else { Server.clients[fromClient].Player = GameLogic.AddPlayer(username, null); } //Stop Timer Server.StopPingTest(fromClient); ServerSend.InitGameLogic(fromClient); }
private static void LoadGame() { Console.WriteLine("Loading Game..."); byte[] gamestate = File.ReadAllBytes("savegame.hex"); Packet packet = new Packet(gamestate); HexGrid hexGrid = packet.ReadHexGrid(); GameLogic.Init(hexGrid); int count = packet.ReadInt(); Console.WriteLine(count); for (int i = 0; i < count; i++) { string playerName = packet.ReadString(); int tribeId = packet.ReadByte(); HexCoordinates playerPos = packet.ReadHexCoordinates(); TroopInventory troopInventory = packet.ReadTroopInventory(); GameLogic.AddPlayer(playerName, tribeId, playerPos, troopInventory); } Console.WriteLine("Game Loaded!"); }