/// <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); }