Example #1
0
        /// <summary>
        /// </summary>
        /// <param name="sender">
        /// </param>
        /// <param name="message">
        /// </param>
        public void Handle(object sender, Message message)
        {
            var client = (Client)sender;
            var selectCharacterMessage = (SelectCharacterMessage)message.Body;

            var checkLogin = new CheckLogin();

            if (checkLogin.IsCharacterOnAccount(client, selectCharacterMessage.CharacterId) == false)
            {
                Colouring.Push(ConsoleColor.Green);
                Console.WriteLine(
                    "Client '" + client.AccountName + "' tried to log in as CharID "
                    + selectCharacterMessage.CharacterId + " but it is not on their account!");
                Colouring.Pop();

                // NV: Is this really what we want to send? Should find out sometime...
                client.Send(0x00001F83, new LoginErrorMessage {
                    Error = LoginError.InvalidUserNamePassword
                });
                client.Server.DisconnectClient(client);
                return;
            }

            if (OnlineDao.IsOnline(selectCharacterMessage.CharacterId).Online == 1)
            {
                Console.WriteLine(
                    "Client '" + client.AccountName
                    + "' is trying to login, but the requested character is already logged in.");
                client.Send(0x00001F83, new LoginErrorMessage {
                    Error = LoginError.AlreadyLoggedIn
                });
                client.Server.DisconnectClient(client);
                return;
            }

            OnlineDao.SetOnline(selectCharacterMessage.CharacterId);

            IPAddress zoneIpAdress;

            if (IPAddress.TryParse(ConfigReadWrite.Instance.CurrentConfig.ZoneIP, out zoneIpAdress) == false)
            {
                IPHostEntry zoneHost = Dns.GetHostEntry(ConfigReadWrite.Instance.CurrentConfig.ZoneIP);
                zoneIpAdress = zoneHost.AddressList.FirstOrDefault(ip => ip.AddressFamily == AddressFamily.InterNetwork);
            }

            var zoneRedirectionMessage = new ZoneInfoMessage
            {
                CharacterId     = selectCharacterMessage.CharacterId,
                ServerIpAddress = zoneIpAdress,
                ServerPort      =
                    (ushort)
                    ConfigReadWrite.Instance.CurrentConfig.ZonePort
            };

            client.Send(0x0000615B, zoneRedirectionMessage);
        }
        public void ZoneRedirectionMessageTest()
        {
            var expected = new ZoneInfoMessage
            {
                CharacterId     = 1234567890,
                ServerIpAddress = IPAddress.Loopback,
                ServerPort      = 45678
            };

            var actual = (ZoneInfoMessage)this.SerializeDeserialize(expected);

            this.AssertSystemMessage(expected, actual);
            Assert.AreEqual(expected.CharacterId, actual.CharacterId);
            Assert.AreEqual(expected.ServerIpAddress, actual.ServerIpAddress);
            Assert.AreEqual(expected.ServerPort, actual.ServerPort);
        }