Exemplo n.º 1
0
        private void ExecuteRoomCommand(int roomId, UserRoomCommand command)
        {
            var request =
                new RestRequest(
                    string.Format("roominfo/?roomId={0}&userRoomCommand={1}", roomId,
                                  command),
                    Method.POST);

            request.AddHeader("login-token", LoginToken);
            IRestResponse result = Client.Execute(request);
            //Assert.AreEqual(HttpStatusCode.OK, result.StatusCode);
        }
Exemplo n.º 2
0
        //adds a user to a room
        public void Post(HttpRequestMessage request, int roomId, UserRoomCommand userRoomCommand)
        {
            long userId;

            if (!_authenticationManager.TryAuthenticateForWriteOperation(request.GetToken(), out userId))
            {
                if (Log.IsDebugEnabled)
                {
                    Log.Debug("room entry failed due to authentication");
                }

                throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.Forbidden));
            }

            if (Log.IsDebugEnabled)
            {
                Log.DebugFormat("user ({0}) room ({1}) command ({2})", userId, roomId, userRoomCommand);
            }

            var room = _roomRepository.GetRoom(roomId);

            if (room == null)
            {
                throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.BadRequest)
                {
                    ReasonPhrase = "No Room found"
                });
            }

            var account = _accounts.Get(userId);

            if (account == null)
            {
                throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.BadRequest)
                {
                    ReasonPhrase = "No Account Found"
                });
            }

            if (room.Users.Contains(account) && userRoomCommand == UserRoomCommand.Join)
            {
                throw new HttpResponseException(new HttpResponseMessage(HttpStatusCode.BadRequest)
                {
                    ReasonPhrase = "Already in room"
                });
            }

            //remove from all current rooms...
            if (UserRoomCommand.Join == userRoomCommand)
            {
                IEnumerable <Room> currentRooms = _roomRepository.GetRooms(account.Id);
                foreach (var currentRoom in currentRooms)
                {
                    currentRoom.Remove(account);
                    _roomRepository.Add(currentRoom);
                }
            }

            lock (room)
            {
                switch (userRoomCommand)
                {
                case (UserRoomCommand.Join):
                    room.Add(account);
                    break;

                case (UserRoomCommand.Leave):
                    room.Remove(account);
                    break;

                default:
                    throw new InvalidEnumArgumentException("userRoomCommand", (int)userRoomCommand,
                                                           typeof(UserRoomCommand));
                }
            }

            if (Log.IsDebugEnabled)
            {
                Log.Debug("adding to room");
            }

            //todo: dont do this if the user collection is unchanged.
            _roomRepository.Add(room);
        }