public WaitingQueueItem(int heartBeatInterval, int maxMissedHeartBeats, ClientHandshakePacket initPacket, TcpClient client) { HeartBeatInterval = heartBeatInterval; MaxMissedHeartBeats = maxMissedHeartBeats; StartQueueTime = LastHeartBeat = DateTime.Now; Client = client; Identifier = Client.Client.RemoteEndPoint.ToString(); Logger.DefaultLogger("Client " + Identifier + " added to the Waiting Queue."); SerializerSingleton.Serializer.TryWritePacket(Client.GetStream(), initPacket); }
private void AddToWaitQueue(TcpClient[] clients) { if (clients.Length == 0) { return; } ClientHandshakePacket chp = new ClientHandshakePacket { CurrentInstances = InstanceManager.InstanceCount, HeartBeat = Settings.HeartBeatInterval, MaxInstances = Settings.GameServerPortRange.Range, WaitingQueue = WaitingQueue.Count }; WaitingQueue.AddRange(clients.Select(x => new WaitingQueueItem(Settings.HeartBeatInterval, Settings.MaxAllowedMissedHeartBeats, chp, x))); }
private static ServerHandshakePacket BeginConnection(ConnectionEvents events, string ip, int port) { events.OnStatusUpdate?.Invoke("Connecting To Master Server..."); TcpClient c = null; try { c = new TcpClient(ip, port); events.OnStatusUpdate?.Invoke("Connected to Server..."); } catch (Exception connEX) { events.OnError?.Invoke(MatchMakingErrorCode.SocketException, connEX); events.OnStatusUpdate?.Invoke("Connection Failed... Exception: \n" + connEX.Message); return(new ServerHandshakePacket() { ErrorCode = MatchMakingErrorCode.SocketException, ErrorException = connEX }); } object obj = null; try { events.OnStatusUpdate?.Invoke("Waiting for Handshake..."); if (!SerializerSingleton.Serializer.TryReadPacket(c.GetStream(), out obj)) { throw new Exception(); } } catch (Exception e) { events.OnStatusUpdate?.Invoke("Handshake Failed... Exception: \n" + e.Message); events.OnError?.Invoke(MatchMakingErrorCode.PacketDeserializationException, e); return(new ServerHandshakePacket() { ErrorCode = MatchMakingErrorCode.PacketDeserializationException, ErrorException = e }); } if (obj == null) { events.OnStatusUpdate?.Invoke("Handshake Failed... Deserialized object was null"); events.OnError?.Invoke(MatchMakingErrorCode.PacketDeserializationException, null); return(new ServerHandshakePacket() { ErrorCode = MatchMakingErrorCode.PacketDeserializationException }); } if (obj is ClientHandshakePacket) { events.OnStatusUpdate?.Invoke("Handshake Received.."); ClientHandshakePacket packet = (ClientHandshakePacket)obj; ServerHandshakePacket sp = new ServerHandshakePacket { Client = c, HeartBeat = packet.HeartBeat, CurrentInstances = packet.CurrentInstances, MaxInstances = packet.MaxInstances, WaitingQueue = packet.WaitingQueue }; return(sp); } events.OnStatusUpdate?.Invoke("Handshake Failed... Wrong Packet Received"); events.OnError?.Invoke(MatchMakingErrorCode.WrongPacketReceived, null); return(new ServerHandshakePacket() { ErrorCode = MatchMakingErrorCode.WrongPacketReceived }); //throw new Exception("Expected Packet of Type ClientHandshakePacket. Got: " + obj.GetType()); }