示例#1
0
        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);
        }