protected async UniTaskVoid HandleRequestValidateAccessToken( RequestHandlerData requestHandler, RequestValidateAccessTokenMessage request, RequestProceedResultDelegate <ResponseValidateAccessTokenMessage> result) { long connectionId = requestHandler.ConnectionId; ResponseValidateAccessTokenMessage.Error error = ResponseValidateAccessTokenMessage.Error.None; string userId = request.userId; string accessToken = request.accessToken; ValidateAccessTokenResp validateAccessTokenResp = await DbServiceClient.ValidateAccessTokenAsync(new ValidateAccessTokenReq() { UserId = userId, AccessToken = accessToken }); if (!validateAccessTokenResp.IsPass) { error = ResponseValidateAccessTokenMessage.Error.InvalidAccessToken; userId = string.Empty; accessToken = string.Empty; } else { CentralUserPeerInfo userPeerInfo; if (userPeersByUserId.TryGetValue(userId, out userPeerInfo)) { userPeersByUserId.Remove(userPeerInfo.userId); userPeers.Remove(userPeerInfo.connectionId); } 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; await DbServiceClient.UpdateAccessTokenAsync(new UpdateAccessTokenReq() { UserId = userPeerInfo.userId, AccessToken = accessToken }); } // Response result.Invoke( error == ResponseValidateAccessTokenMessage.Error.None ? AckResponseCode.Success : AckResponseCode.Error, new ResponseValidateAccessTokenMessage() { error = error, userId = userId, accessToken = accessToken, }); }
private async UniTaskVoid HandleRequestValidateAccessTokenRoutine(LiteNetLibMessageHandler messageHandler) { long connectionId = messageHandler.connectionId; RequestValidateAccessTokenMessage message = messageHandler.ReadMessage <RequestValidateAccessTokenMessage>(); ResponseValidateAccessTokenMessage.Error error = ResponseValidateAccessTokenMessage.Error.None; string userId = message.userId; string accessToken = message.accessToken; ValidateAccessTokenResp validateAccessTokenResp = await DbServiceClient.ValidateAccessTokenAsync(new ValidateAccessTokenReq() { UserId = userId, AccessToken = accessToken }); if (!validateAccessTokenResp.IsPass) { error = ResponseValidateAccessTokenMessage.Error.InvalidAccessToken; userId = string.Empty; accessToken = string.Empty; } else { CentralUserPeerInfo userPeerInfo; if (userPeersByUserId.TryGetValue(userId, out userPeerInfo)) { userPeersByUserId.Remove(userPeerInfo.userId); userPeers.Remove(userPeerInfo.connectionId); } userPeerInfo = new CentralUserPeerInfo(); userPeerInfo.connectionId = connectionId; userPeerInfo.userId = userId; userPeerInfo.accessToken = accessToken = Regex.Replace(Convert.ToBase64String(Guid.NewGuid().ToByteArray()), "[/+=]", ""); userPeersByUserId[userId] = userPeerInfo; userPeers[connectionId] = userPeerInfo; await DbServiceClient.UpdateAccessTokenAsync(new UpdateAccessTokenReq() { UserId = userPeerInfo.userId, AccessToken = accessToken }); } ResponseValidateAccessTokenMessage responseMessage = new ResponseValidateAccessTokenMessage(); responseMessage.ackId = message.ackId; responseMessage.responseCode = error == ResponseValidateAccessTokenMessage.Error.None ? AckResponseCode.Success : AckResponseCode.Error; responseMessage.error = error; responseMessage.userId = userId; responseMessage.accessToken = accessToken; ServerSendResponse(connectionId, MMOMessageTypes.ResponseValidateAccessToken, responseMessage); }
private IEnumerator HandleRequestValidateAccessTokenRoutine(LiteNetLibMessageHandler messageHandler) { long connectionId = messageHandler.connectionId; RequestValidateAccessTokenMessage message = messageHandler.ReadMessage <RequestValidateAccessTokenMessage>(); ResponseValidateAccessTokenMessage.Error error = ResponseValidateAccessTokenMessage.Error.None; string userId = message.userId; string accessToken = message.accessToken; ValidateAccessTokenJob validateAccessTokenJob = new ValidateAccessTokenJob(Database, userId, accessToken); validateAccessTokenJob.Start(); yield return(StartCoroutine(validateAccessTokenJob.WaitFor())); if (!validateAccessTokenJob.result) { error = ResponseValidateAccessTokenMessage.Error.InvalidAccessToken; userId = string.Empty; accessToken = string.Empty; } else { CentralUserPeerInfo userPeerInfo; if (userPeersByUserId.TryGetValue(userId, out userPeerInfo)) { userPeersByUserId.Remove(userPeerInfo.userId); userPeers.Remove(userPeerInfo.connectionId); } userPeerInfo = new CentralUserPeerInfo(); userPeerInfo.connectionId = connectionId; userPeerInfo.userId = userId; userPeerInfo.accessToken = accessToken = Regex.Replace(Convert.ToBase64String(Guid.NewGuid().ToByteArray()), "[/+=]", ""); userPeersByUserId[userId] = userPeerInfo; userPeers[connectionId] = userPeerInfo; UpdateAccessTokenJob updateAccessTokenJob = new UpdateAccessTokenJob(Database, userId, accessToken); updateAccessTokenJob.Start(); yield return(StartCoroutine(updateAccessTokenJob.WaitFor())); } ResponseValidateAccessTokenMessage responseMessage = new ResponseValidateAccessTokenMessage(); responseMessage.ackId = message.ackId; responseMessage.responseCode = error == ResponseValidateAccessTokenMessage.Error.None ? AckResponseCode.Success : AckResponseCode.Error; responseMessage.error = error; responseMessage.userId = userId; responseMessage.accessToken = accessToken; ServerSendPacket(connectionId, DeliveryMethod.ReliableOrdered, MMOMessageTypes.ResponseValidateAccessToken, responseMessage); }