private async Task _handleLoginDataRequestAsync(ClientLoginDataRequest req) { var account = await _accountManager.GetAccountAsync(req.AccountID, false, false); if (account == null || (!account.IsOnline && !account.IsLoginPending)) { // If the account isn't loaded yet, then it's definitely not logged in or logging in. // Refresh account account = await _accountManager.GetAccountAsync(req.AccountID, true, true); _connectionManager.AddPendingLogin(req.ClientAddress, account); account.IVKey = new IVKey(req.Key, req.IV); var msg = new NetworkMessageContainer(); msg.MessageData = new MessageRedisLoginDataResponse( ConnectionManager.ExternalIP.Address.GetAddressBytes(), ConnectionManager.ExternalIP.Port, account.Id, LoginResult.Success ); msg.MessageType = MessageTypes.Redis_LoginDataResponse; _redisServer.PublishObject(ChannelTypes.WebLogin, req.ProcessingWebServerId, msg); } else if (account.IsOnline) //Check if the account is already logged in { var msg = new NetworkMessageContainer(); msg.MessageData = new MessageRedisLoginDataResponse(null, -1, req.AccountID, LoginResult.AlreadyLoggedOn); _redisServer.PublishObject(ChannelTypes.WebLogin, req.ProcessingWebServerId, msg); } else if (account.IsLoginPending) //Check if the login is already pending { var msg = new NetworkMessageContainer(); msg.MessageData = new MessageRedisLoginDataResponse(null, -1, req.AccountID, LoginResult.AlreadyPending); _redisServer.PublishObject(ChannelTypes.WebLogin, req.ProcessingWebServerId, msg); } }