protected async UniTaskVoid HandleRequestUserLogin( RequestHandlerData requestHandler, RequestUserLoginMessage request, RequestProceedResultDelegate <ResponseUserLoginMessage> result) { #if UNITY_STANDALONE && !CLIENT_BUILD if (disableDefaultLogin) { result.InvokeError(new ResponseUserLoginMessage() { message = UITextKeys.UI_ERROR_SERVICE_NOT_AVAILABLE, }); return; } long connectionId = requestHandler.ConnectionId; AsyncResponseData <ValidateUserLoginResp> validateUserLoginResp = await DbServiceClient.ValidateUserLoginAsync(new ValidateUserLoginReq() { Username = request.username, Password = request.password }); if (!validateUserLoginResp.IsSuccess) { result.InvokeError(new ResponseUserLoginMessage() { message = UITextKeys.UI_ERROR_INTERNAL_SERVER_ERROR, }); return; } string userId = validateUserLoginResp.Response.UserId; string accessToken = string.Empty; long unbanTime = 0; if (string.IsNullOrEmpty(userId)) { result.InvokeError(new ResponseUserLoginMessage() { message = UITextKeys.UI_ERROR_INVALID_USERNAME_OR_PASSWORD, }); return; } if (userPeersByUserId.ContainsKey(userId) || MapContainsUser(userId)) { result.InvokeError(new ResponseUserLoginMessage() { message = UITextKeys.UI_ERROR_ALREADY_LOGGED_IN, }); return; } bool emailVerified = true; if (requireEmailVerification) { AsyncResponseData <ValidateEmailVerificationResp> validateEmailVerificationResp = await DbServiceClient.ValidateEmailVerificationAsync(new ValidateEmailVerificationReq() { UserId = userId }); if (!validateEmailVerificationResp.IsSuccess) { result.InvokeError(new ResponseUserLoginMessage() { message = UITextKeys.UI_ERROR_INTERNAL_SERVER_ERROR, }); return; } emailVerified = validateEmailVerificationResp.Response.IsPass; } AsyncResponseData <GetUserUnbanTimeResp> unbanTimeResp = await DbServiceClient.GetUserUnbanTimeAsync(new GetUserUnbanTimeReq() { UserId = userId }); if (!unbanTimeResp.IsSuccess) { result.InvokeError(new ResponseUserLoginMessage() { message = UITextKeys.UI_ERROR_INTERNAL_SERVER_ERROR, }); return; } unbanTime = unbanTimeResp.Response.UnbanTime; if (unbanTime > System.DateTimeOffset.UtcNow.ToUnixTimeSeconds()) { result.InvokeError(new ResponseUserLoginMessage() { message = UITextKeys.UI_ERROR_USER_BANNED, }); return; } if (!emailVerified) { result.InvokeError(new ResponseUserLoginMessage() { message = UITextKeys.UI_ERROR_EMAIL_NOT_VERIFIED, }); return; } CentralUserPeerInfo userPeerInfo = new CentralUserPeerInfo(); userPeerInfo.connectionId = connectionId; userPeerInfo.userId = userId; userPeerInfo.accessToken = accessToken = Regex.Replace(System.Convert.ToBase64String(System.Guid.NewGuid().ToByteArray()), "[/+=]", ""); userPeersByUserId[userId] = userPeerInfo; userPeers[connectionId] = userPeerInfo; AsyncResponseData <EmptyMessage> updateAccessTokenResp = await DbServiceClient.UpdateAccessTokenAsync(new UpdateAccessTokenReq() { UserId = userId, AccessToken = accessToken }); if (!updateAccessTokenResp.IsSuccess) { result.InvokeError(new ResponseUserLoginMessage() { message = UITextKeys.UI_ERROR_INTERNAL_SERVER_ERROR, }); return; } // Response result.InvokeSuccess(new ResponseUserLoginMessage() { userId = userId, accessToken = accessToken, unbanTime = unbanTime, }); #endif }