Пример #1
0
        public void TestWalkMove()
        {
            // login, create character, start game
            FakeNetworkClient client = HandlerTestHelper.InitializeTestEnvironment();

            WalkPacket walkPacket = new WalkPacket()
            {
                Speed = 11, XCoordinate = 89, YCoordinate = 126
            };

            // send walkpacket to client
            client.ReceivePacket(walkPacket);

            string     mvPacket   = HandlerTestHelper.WaitForPacket(client, "mv");
            MovePacket movePacket = PacketFactory.Deserialize <MovePacket>(mvPacket);

            Assert.AreEqual(walkPacket.XCoordinate, movePacket.MapX);
            Assert.AreEqual(walkPacket.YCoordinate, movePacket.MapY);
            Assert.AreEqual(walkPacket.Speed, movePacket.Speed);

            HandlerTestHelper.ShutdownTestingEnvironment();
            Assert.Pass();
        }
Пример #2
0
        public void TestSerializeToEndCantBeNull()
        {
            var serializedPacket = PacketFactory.Deserialize("/ ");

            Assert.AreEqual(serializedPacket, null);
        }
Пример #3
0
        public void DeserializeOptionalListPacket()
        {
            var packet = (MShopPacket)PacketFactory.Deserialize("m_shop 1", typeof(MShopPacket));

            Assert.IsTrue(packet.Type == CreateShopPacketType.Close);
        }
Пример #4
0
        public void DeserializeSpecial()
        {
            var packet = (UseItemPacket)PacketFactory.Deserialize("u_i 2 3 4 5 6", typeof(UseItemPacket));

            Assert.IsTrue(packet.Mode == 6);
        }
Пример #5
0
        public void PacketEndingWithNullableMakeItOptional()
        {
            var packet = PacketFactory.Deserialize("$CreateItem 1012 1", typeof(CreateItemPacket));

            Assert.IsNotNull(packet);
        }
        public void InvalidSlot_Does_Not_Create_Character()
        {
            const string name = "TestCharacter";

            Assert.IsNull(PacketFactory.Deserialize($"Char_NEW {name} 4 0 0 0", typeof(CharNewPacket)));
        }
Пример #7
0
        public void VerifyLogin(string packet)
        {
            User user = PacketFactory.Deserialize <User>(packet);
            //fermé
            bool flag = true;

            if (flag)
            {
                //TODO: implement check for maintenances
                bool maintenanceCheck = true;
                if (maintenanceCheck)
                {
                    AccountDTO loadedAccount = DAOFactory.AccountDAO.LoadByName(user.Name);

                    if (loadedAccount != null && loadedAccount.Password.Equals(user.PasswordDecrypted))
                    {
                        DAOFactory.AccountDAO.WriteConnectionLog(loadedAccount.AccountId, _session.Client.RemoteEndPoint.ToString(), null, "Connection", "LoginServer");

                        if (!ServiceFactory.Instance.CommunicationService.AccountIsConnected(loadedAccount.Name))
                        {
                            //0 banned 1 register 2 user 3 GM
                            AuthorityType type = loadedAccount.AuthorityEnum;

                            switch (type)
                            {
                            case AuthorityType.Banned:
                            {
                                _session.Client.SendPacket(String.Format("fail {O}", Language.Instance.GetMessageFromKey("BANNED").ToString()));
                            }
                            break;

                            default:
                            {
                                int newSessionId = SessionFactory.Instance.GenerateSessionId();

                                DAOFactory.AccountDAO.UpdateLastSessionAndIp(user.Name, (int)newSessionId, _session.Client.RemoteEndPoint.ToString());
                                Logger.Log.DebugFormat(Language.Instance.GetMessageFromKey("CONNECTION"), user.Name, newSessionId);

                                //inform communication service about new player from login server
                                try
                                {
                                    ServiceFactory.Instance.CommunicationService.RegisterAccountLogin(user.Name, newSessionId);
                                }
                                catch (Exception ex)
                                {
                                    Logger.Log.Error(ex.Message);
                                }


                                _session.Client.SendPacket(BuildServersPacket((int)newSessionId));
                            }
                            break;
                            }
                        }
                        else
                        {
                            _session.Client.SendPacket(String.Format("fail {0}", Language.Instance.GetMessageFromKey("ALREADY_CONNECTED").ToString()));
                        }
                    }
                    else
                    {
                        _session.Client.SendPacket(String.Format("fail {0}", Language.Instance.GetMessageFromKey("IDERROR").ToString()));
                    }
                }
                else
                {
                    _session.Client.SendPacket(String.Format("fail {O}", Language.Instance.GetMessageFromKey("CLOSE").ToString()));
                }
            }
            else
            {
                _session.Client.SendPacket(String.Format("fail {O}", Language.Instance.GetMessageFromKey("WAITING").ToString()));
            }
        }
Пример #8
0
        public static FakeNetworkClient InitializeTestEnvironment()
        {
            System.Globalization.CultureInfo.DefaultThreadCurrentUICulture = System.Globalization.CultureInfo.GetCultureInfo("en-US");

            // initialize Logger
            Logger.InitializeLogger(LogManager.GetLogger(typeof(BasicPacketHandlerTest)));

            // create server entities (this values would have been imported)
            CreateServerItems();
            CreateServerMaps();
            CreateServerSkills();

            // initialize servermanager
            ServerManager.Instance.Initialize();

            // initialize WCF
            ServiceFactory.Instance.Initialize();

            // register mappings for items
            DAOFactory.ItemInstanceDAO.RegisterMapping(typeof(SpecialistInstance));
            DAOFactory.ItemInstanceDAO.RegisterMapping(typeof(WearableInstance));
            DAOFactory.ItemInstanceDAO.RegisterMapping(typeof(UsableInstance));
            DAOFactory.ItemInstanceDAO.InitializeMapper(typeof(ItemInstance));

            // initialize PacketSerialization
            PacketFactory.Initialize <WalkPacket>();

            // initialize new manager
            _sessionManager = new NetworkManager <TestEncryption>("127.0.0.1", 1234, typeof(CharacterScreenPacketHandler), typeof(TestEncryption), true);
            FakeNetworkClient client = new FakeNetworkClient();

            _sessionManager.AddSession(client);

            AccountDTO account = new AccountDTO()
            {
                AccountId   = 1,
                Authority   = AuthorityType.Admin,
                LastSession = 12345,
                Name        = "test",
                Password    = "******"
            };

            DAOFactory.AccountDAO.InsertOrUpdate(ref account);

            // register for account login
            ServiceFactory.Instance.CommunicationService.RegisterAccountLogin("test", 12345);

            // OpenNosEntryPoint -> LoadCharacterList
            client.ReceivePacket("12345");
            client.ReceivePacket("test");
            client.ReceivePacket("test");

            string clistStart = WaitForPacket(client);

            string clistEnd = WaitForPacket(client);

            // creation of character
            client.ReceivePacket("Char_NEW Test 2 1 0 9");

            List <string> clistAfterCreate = WaitForPackets(client, 3);
            CListPacket   cListPacket      = PacketFactory.Deserialize <CListPacket>(clistAfterCreate[1]);

            // select character
            client.ReceivePacket($"select {cListPacket.Slot}");
            string okPacket = WaitForPacket(client);

            // start game
            client.ReceivePacket("game_start");
            List <string> gameStartPacketsFirstPart  = WaitForPackets(client, "p_clear");
            List <string> gameStartPacketsSecondPart = WaitForPackets(client, "p_clear");

            //wait 100 milliseconds to be sure initialization has been finished
            Task.Delay(100);

            return(client);
        }
Пример #9
0
        private void TriggerHandler(string packetHeader, string packet, bool force)
        {
            if (ServerManager.Instance.InShutdown)
            {
                return;
            }

            if (!IsDisposing)
            {
                if (!HandlerMethods.TryGetValue(packetHeader, out HandlerMethodReference methodReference))
                {
                    Logger.Log.WarnFormat(Language.Instance.GetMessageFromKey("HANDLER_NOT_FOUND"), packetHeader);
                    return;
                }

                if (methodReference.HandlerMethodAttribute != null && !force && methodReference.HandlerMethodAttribute.Amount > 1 && !_waitForPacketsAmount.HasValue)
                {
                    // we need to wait for more
                    _waitForPacketsAmount = methodReference.HandlerMethodAttribute.Amount;
                    _waitForPacketList.Add(packet != string.Empty ? packet : $"1 {packetHeader} ");
                    return;
                }

                try
                {
                    if (!HasSelectedCharacter && methodReference.ParentHandler.GetType().Name != "CharacterScreenPacketHandler" &&
                        methodReference.ParentHandler.GetType().Name != "LoginPacketHandler")
                    {
                        return;
                    }

                    // call actual handler method
                    if (methodReference.PacketDefinitionParameterType != null)
                    {
                        //check for the correct authority
                        if (IsAuthenticated && (byte)methodReference.Authority > (byte)Account.Authority)
                        {
                            return;
                        }

                        object deserializedPacket = PacketFactory.Deserialize(packet, methodReference.PacketDefinitionParameterType, IsAuthenticated);

                        if (deserializedPacket != null || methodReference.PassNonParseablePacket)
                        {
                            methodReference.HandlerMethod(methodReference.ParentHandler, deserializedPacket);
                        }
                        else
                        {
                            Logger.Log.WarnFormat(Language.Instance.GetMessageFromKey("CORRUPT_PACKET"), packetHeader, packet);
                        }
                    }
                    else
                    {
                        methodReference.HandlerMethod(methodReference.ParentHandler, packet);
                    }
                }
                catch (DivideByZeroException ex)
                {
                    // disconnect if something unexpected happens
                    Logger.Log.Error("Handler Error SessionId: " + SessionId, ex);
                    Disconnect();
                }
            }

            else
            {
                Logger.Log.WarnFormat(Language.Instance.GetMessageFromKey("CLIENTSESSION_DISPOSING"), packetHeader);
            }
        }
 public void Broadcast(ClientSession client, PacketBase packet, ReceiverType receiver = ReceiverType.All, string characterName = "", long characterId = -1, int delay = 0)
 {
     Broadcast(client, PacketFactory.Deserialize(packet), receiver, characterName, characterId, delay);
 }
 /// <summary>
 /// Send a packet to the Server as the Fake client receives it and triggers a Handler method.
 /// </summary>
 /// <param name="packet">Packet created thru PacketFactory.</param>
 public void ReceivePacket(PacketBase packet)
 {
     ReceivePacket(PacketFactory.Deserialize(packet));
 }