//public async Task DoStandartSomethingWithOutErrorResponse(Func<Task> action, HttpResponse response, ILogger logger) //{ //} public virtual async Task DoStandartSomething(Func <Task> action, HttpResponse response, ILogger logger) { try { await action(); return; } catch (SomeCustomException e) { ErrorFromCustomException(e); } catch (StopException) { } catch (NotAuthException) { var error = _errorContainer.TryGetError(ErrorConsts.NotAuthorized); if (error != null) { _errorService.AddError(error); } await WriteResponseAsync(response, new ErrorObjectReturnFactory().GetObjectReturn(_errorService.GetErrorsObject()), 401);//TODO 401 return; } catch (Exception e) { _errorService.AddError(_errorContainer.TryGetError(ErrorConsts.SomeError)); logger?.LogError(e, ErrorConsts.SomeError); } await WriteResponseAsync(response, new ErrorObjectReturnFactory().GetObjectReturn(_errorService.GetErrorsObject())); }
// ReSharper disable once UnusedMember.Global public async Task EnterInRoom(string roomName, string password, string username) { roomName = NormalizeRoomName(roomName); username = ValidateString(username); var httpContext = Context.GetHttpContext(); await _apiHealper.DoStandartSomething(async() => { if (string.IsNullOrWhiteSpace(password)) { password = null; } else { password = _hasher.GetHash(password); } if (string.IsNullOrEmpty(roomName)) { _errorService.AddError(_errorContainer.TryGetError(Consts.PlanitPokerErrorConsts.RoomNameIsEmpty)); await _apiHealper.NotifyFromErrorService(); await Clients.Caller.SendAsync(Consts.PlanitPokerHubEndpoints.ConnectedToRoomError); } var room = await _planitPokerService.TryGetRoom(roomName, password); if (room == null) { throw new SomeCustomException(Consts.PlanitPokerErrorConsts.RoomNotFound); } UserInfo userInfo = null; var expired = false; try { (expired, userInfo) = _apiHealper.GetUserInfoWithExpired(Context.GetHttpContext().Request, _jwtService, false); } catch { } if (expired && userInfo != null) { //не прерываем процесс подключения, но сообщаем о том что нужен рефреш await Clients.Caller.SendAsync(Consts.PlanitPokerHubEndpoints.NeedRefreshTokens); } var user = new PlanitUser() { MainAppUserId = userInfo?.UserId, PlaningAppUserId = GenerateUniqueUserId(), UserConnectionId = GetConnectionId(), Name = username, Role = GetDefaultRoles(), }; _ = await EnterInRoom(room, user); }, httpContext.Response, _logger); }