Exemplo n.º 1
0
        public void Run(ServerCommandArgs args)
        {
            var receivedContent = Serializer.Deserialize <MessageContent>(args.Message);

            if (string.IsNullOrEmpty(receivedContent.RoomName))
            {
                throw new ArgumentException("RoomName");
            }

            if (receivedContent.Users == null)
            {
                throw new ArgumentNullException("Users");
            }

            if (string.Equals(receivedContent.RoomName, ServerModel.MainRoomName))
            {
                ServerModel.API.SendSystemMessage(args.ConnectionId, "Невозможно удалить пользователей из основной комнаты.");
                return;
            }

            if (!RoomExists(receivedContent.RoomName, args.ConnectionId))
            {
                return;
            }

            using (var server = ServerModel.Get())
            {
                Room room = server.Rooms[receivedContent.RoomName];

                if (!room.Admin.Equals(args.ConnectionId))
                {
                    ServerModel.API.SendSystemMessage(args.ConnectionId, "Вы не являетесь администратором комнаты. Операция отменена.");
                    return;
                }

                var sendingContent = new ClientRoomClosedCommand.MessageContent {
                    Room = room
                };

                foreach (var user in receivedContent.Users)
                {
                    if (!room.Users.Contains(user.Nick))
                    {
                        continue;
                    }

                    if (user.Equals(room.Admin))
                    {
                        ServerModel.API.SendSystemMessage(args.ConnectionId, "Невозможно удалить из комнаты администратора.");
                        continue;
                    }

                    room.RemoveUser(user.Nick);

                    ServerModel.Server.SendMessage(user.Nick, ClientRoomClosedCommand.Id, sendingContent);
                }

                RefreshRoom(server, room);
            }
        }
Exemplo n.º 2
0
        protected override void OnRun(MessageContent content, ServerCommandArgs args)
        {
            if (string.IsNullOrEmpty(content.RoomName))
            {
                throw new ArgumentException("RoomName");
            }

            if (content.Users == null)
            {
                throw new ArgumentNullException("Users");
            }

            if (string.Equals(content.RoomName, ServerModel.MainRoomName))
            {
                ServerModel.Api.SendSystemMessage(args.ConnectionId, MessageId.RoomAccessDenied);
                return;
            }

            if (!RoomExists(content.RoomName, args.ConnectionId))
            {
                return;
            }

            using (var server = ServerModel.Get())
            {
                var room = server.Rooms[content.RoomName];

                if (!room.Admin.Equals(args.ConnectionId))
                {
                    ServerModel.Api.SendSystemMessage(args.ConnectionId, MessageId.RoomAccessDenied);
                    return;
                }

                var sendingContent = new ClientRoomClosedCommand.MessageContent {
                    Room = room
                };

                foreach (var user in content.Users)
                {
                    if (!room.ContainsUser(user.Nick))
                    {
                        continue;
                    }

                    if (user.Equals(room.Admin))
                    {
                        ServerModel.Api.SendSystemMessage(args.ConnectionId, MessageId.RoomAccessDenied);
                        continue;
                    }

                    room.RemoveUser(user.Nick);

                    ServerModel.Server.SendMessage(user.Nick, ClientRoomClosedCommand.CommandId, sendingContent);
                }

                RefreshRoom(server, room);
            }
        }
Exemplo n.º 3
0
        protected override void OnRun(MessageContent content, CommandArgs args)
        {
            if (string.IsNullOrEmpty(content.RoomName))
            {
                throw new ArgumentException("content.RoomName");
            }

            if (content.Users == null)
            {
                throw new ArgumentNullException("content.Users");
            }

            if (content.RoomName == ServerChat.MainRoomName)
            {
                ServerModel.Api.Perform(new ServerSendSystemMessageAction(args.ConnectionId, SystemMessageId.RoomAccessDenied));
                return;
            }

            using (var server = ServerModel.Get())
            {
                Room room;
                if (!TryGetRoom(server.Chat, content.RoomName, args.ConnectionId, out room))
                {
                    return;
                }

                if (room.Admin != args.ConnectionId)
                {
                    ServerModel.Api.Perform(new ServerSendSystemMessageAction(args.ConnectionId, SystemMessageId.RoomAccessDenied));
                    return;
                }

                var sendingContent = new ClientRoomClosedCommand.MessageContent {
                    RoomName = room.Name
                };

                foreach (var userNick in content.Users)
                {
                    if (!room.IsUserExist(userNick))
                    {
                        continue;
                    }

                    if (userNick == room.Admin)
                    {
                        ServerModel.Api.Perform(new ServerSendSystemMessageAction(args.ConnectionId, SystemMessageId.RoomAccessDenied));
                        continue;
                    }

                    room.RemoveUser(userNick);
                    ServerModel.Server.SendMessage(userNick, ClientRoomClosedCommand.CommandId, sendingContent);
                }

                RefreshRoom(server.Chat, room);
            }
        }
Exemplo n.º 4
0
        protected override void OnRun(MessageContent content, CommandArgs args)
        {
            if (string.IsNullOrEmpty(content.RoomName))
            {
                throw new ArgumentException("content.RoomName");
            }

            if (content.RoomName == ServerChat.MainRoomName)
            {
                ServerModel.Api.Perform(new ServerSendSystemMessageAction(args.ConnectionId, SystemMessageId.RoomCantLeaveMainRoom));
                return;
            }

            using (var server = ServerModel.Get())
            {
                Room room;
                if (!TryGetRoom(server.Chat, content.RoomName, args.ConnectionId, out room))
                {
                    return;
                }

                if (!room.IsUserExist(args.ConnectionId))
                {
                    ServerModel.Api.Perform(new ServerSendSystemMessageAction(args.ConnectionId, SystemMessageId.RoomAccessDenied));
                    return;
                }

                var closeRoomContent = new ClientRoomClosedCommand.MessageContent {
                    RoomName = room.Name
                };
                ServerModel.Server.SendMessage(args.ConnectionId, ClientRoomClosedCommand.CommandId, closeRoomContent);

                room.RemoveUser(args.ConnectionId);
                if (room.IsEmpty)
                {
                    server.Chat.RemoveRoom(room.Name);
                }
                else
                {
                    if (room.Admin == args.ConnectionId)
                    {
                        room.Admin = room.Users.FirstOrDefault();
                        if (room.Admin != null)
                        {
                            ServerModel.Api.Perform(new ServerSendSystemMessageAction(room.Admin, SystemMessageId.RoomAdminChanged, room.Name));
                        }
                    }

                    RefreshRoom(server.Chat, room);
                }
            }
        }
Exemplo n.º 5
0
        public void Run(ServerCommandArgs args)
        {
            var receivedContent = Serializer.Deserialize <MessageContent>(args.Message);

            if (string.IsNullOrEmpty(receivedContent.RoomName))
            {
                throw new ArgumentException("RoomName");
            }

            if (string.Equals(receivedContent.RoomName, ServerModel.MainRoomName))
            {
                ServerModel.API.SendSystemMessage(args.ConnectionId, "Невозможно выйти из основной комнаты.");
                return;
            }

            if (!RoomExists(receivedContent.RoomName, args.ConnectionId))
            {
                return;
            }

            using (var server = ServerModel.Get())
            {
                var room = server.Rooms[receivedContent.RoomName];

                if (!room.Users.Contains(args.ConnectionId))
                {
                    ServerModel.API.SendSystemMessage(args.ConnectionId, "Вы и так не входите в состав этой комнаты.");
                    return;
                }

                room.RemoveUser(args.ConnectionId);
                var closeRoomContent = new ClientRoomClosedCommand.MessageContent {
                    Room = room
                };
                ServerModel.Server.SendMessage(args.ConnectionId, ClientRoomClosedCommand.Id, closeRoomContent);

                if (string.Equals(room.Admin, args.ConnectionId))
                {
                    room.Admin = room.Users.FirstOrDefault();

                    if (room.Admin != null)
                    {
                        string message = string.Format("Вы назначены администратором комнаты \"{0}\".", room.Name);
                        ServerModel.API.SendSystemMessage(room.Admin, message);
                    }
                }

                RefreshRoom(server, room);
            }
        }
Exemplo n.º 6
0
        protected static bool RoomExists(string roomName, string connectionId)
        {
            bool result;
              using(var context = ServerModel.Get())
            result = context.Rooms.ContainsKey(roomName);

              if (!result)
              {
            var closeRoomContent = new ClientRoomClosedCommand.MessageContent { Room = new Room(null, roomName) };
            ServerModel.Server.SendMessage(connectionId, ClientRoomClosedCommand.CommandId, closeRoomContent);
            ServerModel.API.SendSystemMessage(connectionId, "На свервере нет комнаты с таким именем.");
              }

              return result;
        }
Exemplo n.º 7
0
        protected override void OnRun(MessageContent content, ServerCommandArgs args)
        {
            if (string.IsNullOrEmpty(content.RoomName))
            {
                throw new ArgumentException("RoomName");
            }

            if (string.Equals(content.RoomName, ServerModel.MainRoomName))
            {
                ServerModel.Api.SendSystemMessage(args.ConnectionId, MessageId.RoomCantLeaveMainRoom);
                return;
            }

            if (!RoomExists(content.RoomName, args.ConnectionId))
            {
                return;
            }

            using (var server = ServerModel.Get())
            {
                var room = server.Rooms[content.RoomName];

                if (!room.Users.Contains(args.ConnectionId))
                {
                    ServerModel.Api.SendSystemMessage(args.ConnectionId, MessageId.RoomAccessDenied);
                    return;
                }

                room.RemoveUser(args.ConnectionId);
                var closeRoomContent = new ClientRoomClosedCommand.MessageContent {
                    Room = room
                };
                ServerModel.Server.SendMessage(args.ConnectionId, ClientRoomClosedCommand.CommandId, closeRoomContent);

                if (string.Equals(room.Admin, args.ConnectionId))
                {
                    room.Admin = room.Users.FirstOrDefault();
                    if (room.Admin != null)
                    {
                        ServerModel.Api.SendSystemMessage(room.Admin, MessageId.RoomAdminChanged, room.Name);
                    }
                }

                RefreshRoom(server, room);
            }
        }
Exemplo n.º 8
0
        /// <summary>
        /// Проверяет существует ли комната. Если нет отправляет вызвавщему команду соединению сообщение об ошибке.
        /// А также команду закрытия комнаты.
        /// </summary>
        /// <param name="RoomName">Название комнаты.</param>
        /// <param name="connectionId">Id соединения.</param>
        /// <returns>Возвращает ложь если комнаты не существует.</returns>
        protected static bool RoomExists(string roomName, string connectionId)
        {
            bool result;

            using (var context = ServerModel.Get())
                result = context.Rooms.ContainsKey(roomName);

            if (!result)
            {
                var closeRoomContent = new ClientRoomClosedCommand.MessageContent {
                    Room = new Room(null, roomName)
                };
                ServerModel.Server.SendMessage(connectionId, ClientRoomClosedCommand.Id, closeRoomContent);
                ServerModel.API.SendSystemMessage(connectionId, "На свервере нет комнаты с таким именем.");
            }

            return(result);
        }
Exemplo n.º 9
0
        public void Run(ServerCommandArgs args)
        {
            var receivedContent = Serializer.Deserialize <MessageContent>(args.Message);

            if (string.IsNullOrEmpty(receivedContent.RoomName))
            {
                throw new ArgumentException("RoomName");
            }

            if (string.Equals(receivedContent.RoomName, ServerModel.MainRoomName))
            {
                ServerModel.API.SendSystemMessage(args.ConnectionId, "Вы не можете удалить основную комнату.");
                return;
            }

            if (!RoomExists(receivedContent.RoomName, args.ConnectionId))
            {
                return;
            }

            using (var context = ServerModel.Get())
            {
                var deletingRoom = context.Rooms[receivedContent.RoomName];
                if (!deletingRoom.Admin.Equals(args.ConnectionId))
                {
                    ServerModel.API.SendSystemMessage(args.ConnectionId, "Вы не являетесь администратором комнаты. Операция отменена.");
                    return;
                }

                context.Rooms.Remove(deletingRoom.Name);

                var sendingContent = new ClientRoomClosedCommand.MessageContent {
                    Room = deletingRoom
                };
                foreach (string user in deletingRoom.Users)
                {
                    ServerModel.Server.SendMessage(user, ClientRoomClosedCommand.Id, sendingContent);
                }
            }
        }
Exemplo n.º 10
0
        protected override void OnRun(MessageContent content, ServerCommandArgs args)
        {
            if (string.IsNullOrEmpty(content.RoomName))
            {
                throw new ArgumentException("RoomName");
            }

            if (string.Equals(content.RoomName, ServerModel.MainRoomName))
            {
                ServerModel.Api.SendSystemMessage(args.ConnectionId, MessageId.RoomAccessDenied);
                return;
            }

            if (!RoomExists(content.RoomName, args.ConnectionId))
            {
                return;
            }

            using (var context = ServerModel.Get())
            {
                var deletingRoom = context.Rooms[content.RoomName];
                if (!deletingRoom.Admin.Equals(args.ConnectionId))
                {
                    ServerModel.Api.SendSystemMessage(args.ConnectionId, MessageId.RoomAccessDenied);
                    return;
                }

                context.Rooms.Remove(deletingRoom.Name);

                var sendingContent = new ClientRoomClosedCommand.MessageContent {
                    Room = deletingRoom
                };
                foreach (string user in deletingRoom.Users)
                {
                    ServerModel.Server.SendMessage(user, ClientRoomClosedCommand.CommandId, sendingContent);
                }
            }
        }
Exemplo n.º 11
0
        protected override void OnRun(MessageContent content, CommandArgs args)
        {
            if (string.IsNullOrEmpty(content.RoomName))
            {
                throw new ArgumentException("content.RoomName");
            }

            if (content.RoomName == ServerChat.MainRoomName)
            {
                ServerModel.Api.Perform(new ServerSendSystemMessageAction(args.ConnectionId, SystemMessageId.RoomAccessDenied));
                return;
            }

            using (var server = ServerModel.Get())
            {
                Room deletingRoom;
                if (!TryGetRoom(server.Chat, content.RoomName, args.ConnectionId, out deletingRoom))
                {
                    return;
                }

                if (deletingRoom.Admin != args.ConnectionId)
                {
                    ServerModel.Api.Perform(new ServerSendSystemMessageAction(args.ConnectionId, SystemMessageId.RoomAccessDenied));
                    return;
                }

                server.Chat.RemoveRoom(content.RoomName);

                var sendingContent = new ClientRoomClosedCommand.MessageContent {
                    RoomName = deletingRoom.Name
                };
                foreach (var user in deletingRoom.Users)
                {
                    ServerModel.Server.SendMessage(user, ClientRoomClosedCommand.CommandId, sendingContent);
                }
            }
        }