public static void RecieveGameserverReady(GameserverInstance gameserverReady, Client _client) { Console.WriteLine($"Gameserver {gameserverReady.GameserverID} ready recieved"); GameserverInstance instance = null; // Find a server that is now ready lock (ConfiguringGameserverInstances) { foreach (GameserverInstance server in ConfiguringGameserverInstances.Keys) { if (server.GameserverID == gameserverReady.GameserverID) { instance = server; instance.GameState = gameserverReady.GameState; instance.Client = _client; lock (LiveGameInstances) { LiveGameInstances.Add(instance); Console.WriteLine("Added!"); } break; } } } if (instance != null) { SendServerToClient(instance); } }
public static void ReceiveRegisterRequest(GameserverInstance gameserverToRegister, Client client) { Console.WriteLine($"Started server on {gameserverToRegister.IP + ":" + gameserverToRegister.Port}"); Console.WriteLine($"Gameserver remote endpoint: {((client.TcpClient.Client.RemoteEndPoint) as IPEndPoint).Address.ToString() + ":" + ((client.TcpClient.Client.RemoteEndPoint) as IPEndPoint).Port.ToString()}"); Console.WriteLine($"Gameserver local endpoint: {((client.TcpClient.Client.LocalEndPoint) as IPEndPoint).Address.ToString() + ":" + ((client.TcpClient.Client.LocalEndPoint) as IPEndPoint).Port.ToString()}"); GameserverInstance instance = null; // Find a server that is now ready lock (ConfiguringGameserverInstances) { foreach (GameserverInstance server in ConfiguringGameserverInstances.Keys) { if (server.GameState == GameState.Starting) { instance = server; break; } } } // We found a starting server // Merge with information of started server if (instance != null) { instance.GameserverID = gameserverToRegister.GameserverID; instance.Port = gameserverToRegister.Port; instance.IP = gameserverToRegister.IP; instance.GameState = GameState.Configuring; SendServerConfiguration(instance, client); } }
/// <summary> /// Creates a game server instance /// </summary> public static void CreateGameServer(GameserverInstance gameServerInstance, Client client) { Console.WriteLine("Creating server instance"); gameServerInstance.GameState = GameState.Starting; lock (ConfiguringGameserverInstances) { ConfiguringGameserverInstances.Add(gameServerInstance, client); } StartGameserverOnCluster(); }
private static void SendServerConfiguration(GameserverInstance instanceToConfigure, Client client) { Console.WriteLine($"Sending server configuration to {instanceToConfigure.GameserverID}"); string JSON = JsonConvert.SerializeObject(instanceToConfigure); Packet packet = new Packet((int)MessageType.Configure); packet.Write(JSON); packet.WriteLength(); client.TcpClient.GetStream().BeginWrite(packet.ToArray(), 0, packet.Length(), null, null); }
private static void SendServerToClient(GameserverInstance instance) { string JSON = JsonConvert.SerializeObject(instance); Packet packet = new Packet((int)MessageType.Ready); packet.Write(JSON); packet.WriteLength(); lock (ConfiguringGameserverInstances) { Console.WriteLine($"Sending gameserver {instance.GameserverID} information to player"); ConfiguringGameserverInstances[instance].TcpClient.GetStream().BeginWrite(packet.ToArray(), 0, packet.Length(), null, null); //instance.Client = ConfiguringGameserverInstances[instance]; ConfiguringGameserverInstances.Remove(instance); } }
private bool HandleIncomingData(byte[] data) { //Read the length of the next data packet int packetLength = 0; incomingPacket.SetBytes(data); //Check if there is 4 or more bytes in the packet (size of int is 4) if (incomingPacket.UnreadLength() >= 4) { //Read the length of the incoming packet packetLength = incomingPacket.ReadInt(); if (packetLength <= 0) { //If the length is 0, return return(true); } } //Keep reading until there is no more data left to read for this specific packet //We keep this in a while loop here because one packet might be made up of several packets while (packetLength > 0 && packetLength <= incomingPacket.UnreadLength()) { //Handle packet //Read the messagetype int messageTypeInt = incomingPacket.ReadInt(); MessageType messageType = (MessageType)messageTypeInt; string messageJSON = ""; switch (messageType) { case MessageType.Create: messageJSON = incomingPacket.ReadString(); GameserverInstance gameserverToCreate = JsonConvert.DeserializeObject <GameserverInstance>(messageJSON); ServerManager.CreateGameServer(gameserverToCreate, this); break; case MessageType.Register: messageJSON = incomingPacket.ReadString(); GameserverInstance gameserverToRegister = JsonConvert.DeserializeObject <GameserverInstance>(messageJSON); ServerManager.ReceiveRegisterRequest(gameserverToRegister, this); break; case MessageType.Ready: messageJSON = incomingPacket.ReadString(); GameserverInstance gameserverReady = JsonConvert.DeserializeObject <GameserverInstance>(messageJSON); ServerManager.RecieveGameserverReady(gameserverReady, this); break; case MessageType.LiveServers: ServerManager.SendAvailableServers(this); break; default: break; } packetLength = 0; //Check if there 4 or more bytes in the packet (size of int is 4) if (incomingPacket.UnreadLength() >= 4) { //Read the length of the incoming packet packetLength = incomingPacket.ReadInt(); if (packetLength <= 0) { //If the length is 0, return return(true); } } } if (packetLength <= 1) { return(true); } return(false); }