예제 #1
0
        private void Sock_OnPacketsReceived(IPacketSend arg1, Queue <BasePacket> listOfPackets)
        {
            // all of these boolean checks should be replaced by a Strategy
            if (isBoundToGateway == true)
            {
                if (isLoggedIn == true)
                {
                    HandleNormalPackets(listOfPackets);
                }
                else
                {
                    foreach (var packet in listOfPackets)
                    {
                        Console.WriteLine("normal packet received {0} .. isLoggedIn = false", packet.PacketType);
                        LoginCredentialValid lcr = packet as LoginCredentialValid;
                        if (lcr != null)
                        {
                            LoginClientReady temp = (LoginClientReady)IntrepidSerialize.TakeFromPool(PacketType.LoginClientReady);
                            Send(temp);

                            ClientGameInfoResponse cgir = (ClientGameInfoResponse)IntrepidSerialize.TakeFromPool(PacketType.ClientGameInfoResponse);
                            cgir.GameId = (int)applicationId;
                            Send(cgir);

                            isLoggedIn = lcr.isValid;
                        }

                        /*    if (localPlayer.entityId == 0)// until we are assigned an entity id, we can't do much
                         *  {
                         *      EntityPacket ep = packet as EntityPacket;
                         *      if (ep != null)
                         *      {
                         *          localPlayer.entityId = ep.entityId;
                         *      }
                         *  }*/

                        numPacketsReceived++;
                    }
                }
            }
            else
            {
                foreach (var packet in listOfPackets)
                {
                    numPacketsReceived++;
                    if (packet is ServerIdPacket)
                    {
                        ServerIdPacket id = packet as ServerIdPacket;
                        if (id != null && id.Type == ServerIdPacket.ServerType.Gateway)
                        {
                            isBoundToGateway = true;
                            break;
                        }
                    }
                }
            }
        }
예제 #2
0
        private void NotifyEndpoint_ServerId(ConnectionState connection)
        {
            ServerIdPacket packet = (ServerIdPacket)IntrepidSerialize.TakeFromPool(PacketType.ServerIdPacket);

            packet.Type  = ServerIdPacket.ServerType.Gateway;
            packet.MapId = 0;
            packet.Id    = 0;
            connection.Send(packet);
        }
예제 #3
0
        public void ConnectMock()
        {
            ServerIdPacket serverId = (ServerIdPacket)IntrepidSerialize.TakeFromPool(PacketType.ServerIdPacket);

            serverId.Type  = ServerIdPacket.ServerType.Game;
            serverId.Id    = (int)1234;
            serverId.MapId = 1;
            deserializedPackets.Add(serverId);
            //controller.Send(serverId);
        }
예제 #4
0
        private void Sock_OnConnect(IPacketSend sender)
        {
            if (gatewaySocket != sender)
            {
                return;
            }

            ServerIdPacket serverId = (ServerIdPacket)IntrepidSerialize.TakeFromPool(PacketType.ServerIdPacket);

            serverId.Type  = ServerIdPacket.ServerType.Game;
            serverId.Id    = applicationId;
            serverId.MapId = 1;
            sender.Send(serverId);
        }
예제 #5
0
 public override void HandlePackets(Queue <BasePacket> listOfPackets)
 {
     server.numPacketsReceived += listOfPackets.Count;
     foreach (var packet in listOfPackets)
     {
         if (packet is ServerIdPacket)
         {
             ServerIdPacket id = packet as ServerIdPacket;
             if (id != null && id.Type == ServerIdPacket.ServerType.Gateway)
             {
                 server.hasConnectedToGateway = true;
                 server.CurrentPacketHandling = server.BoundPacketHandler;
                 break;
             }
         }
     }
 }
예제 #6
0
        private void Socket_OnPacketsReceived(IPacketSend socket, Queue <BasePacket> receivedPackets)
        {
            numPacketsReceived += receivedPackets.Count;

            // Look for a server id packet if we've only just connected
            if (!isBoundToGateway)
            {
                var packet = receivedPackets.Dequeue();
                if (packet is ServerIdPacket)
                {
                    ServerIdPacket id = packet as ServerIdPacket;
                    if (id != null && id.Type == ServerIdPacket.ServerType.Gateway)
                    {
                        isBoundToGateway = true;
                        OnConnect?.Invoke();
                    }
                }
                else
                {
                    socket.Disconnect();
                    Console.Error.WriteLine("Unexpected packet type, disconnecting: {0}", packet.PacketType);
                    return;
                }
            }
            // Look for a login credentials valid packet if we've tried to log in
            else if (!IsLoggedIn && hasSentCredentials)
            {
                var packet = receivedPackets.Dequeue();
                if (packet is LoginCredentialValid)
                {
                    HandleLoginCredentialsValidPacket(packet as LoginCredentialValid);
                }
                else
                {
                    socket.Disconnect();
                    Console.Error.WriteLine("Unexpected packet type, disconnecting: {0}", packet.PacketType);
                    return;
                }
            }
            lock (unprocessedPackets)
            {
                // Store the other packets for retrieval later
                unprocessedPackets.AddRange(receivedPackets);
            }
        }
예제 #7
0
        public bool ProcessIdPackets()// TODO: only process id packets
        {
            List <BasePacket> packets = RetrieveData();

            if (packets.Count == 0)
            {
                // We're still waiting for their packet
                return(true);
            }
            else if (packets.Count == 1)
            {
                BasePacket     packet = packets[0];
                ServerIdPacket id     = packet as ServerIdPacket;
                if (id != null)
                {
                    gameId     = id.Id;
                    serverType = id.Type;
                    int mapId = id.MapId;
                    versionAndHandshakeComplete = true;
                    IntrepidSerialize.ReturnToPool(packet);
                    return(true);
                }

                /*     if (packet is ServerPingHopperPacket)
                 *   {
                 *       HandleServerHopping(packet as ServerPingHopperPacket);
                 *       return true;
                 *   }*/
                IntrepidSerialize.ReturnToPool(packet);
            }

            // If we're here, it means we either received more than one packet
            // or it wasn't a ServerIdPacket, which means the server isn't behaving
            // properly
            return(false);
        }
예제 #8
0
        private void Sock_OnPacketsReceived(IPacketSend arg1, Queue <BasePacket> listOfPackets)
        {
            // all of these boolean checks should be replaced by a Strategy
            if (isBoundToGateway == true)
            {
                foreach (var packet in listOfPackets)
                {
                    numPacketsReceived++;
                    // normal processing

                    KeepAlive ka = packet as KeepAlive;
                    if (ka != null)
                    {
                        KeepAliveResponse kar = (KeepAliveResponse)IntrepidSerialize.TakeFromPool(PacketType.KeepAliveResponse);
                        socket.Send(kar);
                        continue;
                    }
                    WorldEntityPacket wep = packet as WorldEntityPacket;
                    if (wep != null)
                    {
                        foreach (var playerId in playerIds)
                        {
                            if (playerId.entityId == wep.entityId)
                            {
                                playerId.position = wep.position.Get();
                                playerId.rotation = wep.rotation.Get();

                                SendAllEntityPositions();
                            }
                        }
                        continue;
                    }

                    ServerConnectionHeader sch = packet as ServerConnectionHeader;
                    if (sch != null)
                    {
                        nextConnectionId = sch.connectionId;
                        continue;
                    }
                    PlayerSaveStatePacket pss = packet as PlayerSaveStatePacket;
                    if (pss != null)
                    {
                        HandlePlayerSaveState(pss);
                        continue;
                    }
                    if (packet is ServerPingHopperPacket)
                    {
                        HandleServerHopping(packet as ServerPingHopperPacket);
                        continue;
                    }
                }
            }
            else
            {
                foreach (var packet in listOfPackets)
                {
                    numPacketsReceived++;
                    if (packet is ServerIdPacket)
                    {
                        ServerIdPacket id = packet as ServerIdPacket;
                        if (id != null && id.Type == ServerIdPacket.ServerType.Gateway)
                        {
                            isBoundToGateway = true;
                            break;
                        }
                    }
                }
            }
        }