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);
        }
Exemple #2
0
        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)));
        }
Exemple #3
0
        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());
        }