public async Task <ChallengeResponseResult> RespondChallengeRequest(ActiveUser activeUser, bool response, string sender) { if (!_sessionRepo.IsUserActive(sender)) { return(ChallengeResponseResult.Offline); } var senderActiveUser = _sessionRepo.GetActiveUser(sender); if (senderActiveUser.ChallengeRequestTarget != activeUser.Id) { //can be null or he sent to another user after return(ChallengeResponseResult.Canceled); } if (!response) { await _masterHub.SendOrderedAsync(_sessionRepo.GetActiveUser(sender), "RespondChallenge", false); //otherwise start the room CancelChallengeRequest(senderActiveUser); return(ChallengeResponseResult.Success); } //user domains are changed when prepare is called senderActiveUser.ChallengeRequestTarget = null; var room = _sessionRepo.MakeRoom(0, 0); var roomUser = CreateRoomUser(activeUser, room); var senderRoomUser = CreateRoomUser(senderActiveUser, room); room.RoomUsers.Add(senderRoomUser); room.RoomActors.Add(senderRoomUser); room.RoomUsers.Add(roomUser); room.RoomActors.Add(roomUser); await PrepareRoom(room); return(ChallengeResponseResult.Success); }