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

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

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

            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;
                }

                if (receivedContent.MessageId != null && !room.IsMessageBelongToUser(args.ConnectionId, receivedContent.MessageId.Value))
                {
                    ServerModel.API.SendSystemMessage(args.ConnectionId, "Вы не можете редактировать это сообщение.");
                    return;
                }

                Message message = null;
                if (receivedContent.MessageId == null)
                {
                    message = room.AddMessage(args.ConnectionId, receivedContent.Message);
                }
                else
                {
                    message      = room.GetMessage(receivedContent.MessageId.Value);
                    message.Text = receivedContent.Message;
                }

                var sendingContent = new ClientOutRoomMessageCommand.MessageContent
                {
                    Message   = message.Text,
                    RoomName  = receivedContent.RoomName,
                    Sender    = args.ConnectionId,
                    MessageId = message.Id
                };

                foreach (string user in room.Users.Where(u => u != null))
                {
                    ServerModel.Server.SendMessage(user, ClientOutRoomMessageCommand.Id, sendingContent);
                }
            }
        }
Example #2
0
        protected override void OnRun(MessageContent content, ServerCommandArgs args)
        {
            if (string.IsNullOrEmpty(content.Message))
            {
                throw new ArgumentException("Message");
            }

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

            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;
                }

                if (content.MessageId != null && !room.IsMessageBelongToUser(args.ConnectionId, content.MessageId.Value))
                {
                    ServerModel.Api.SendSystemMessage(args.ConnectionId, MessageId.MessageEditAccessDenied);
                    return;
                }

                Message message = null;
                if (content.MessageId == null)
                {
                    message = room.AddMessage(args.ConnectionId, content.Message);
                }
                else
                {
                    message      = room.GetMessage(content.MessageId.Value);
                    message.Text = content.Message;
                }

                var sendingContent = new ClientOutRoomMessageCommand.MessageContent
                {
                    Message   = message.Text,
                    RoomName  = content.RoomName,
                    Sender    = args.ConnectionId,
                    MessageId = message.Id
                };

                foreach (string user in room.Users.Where(u => u != null))
                {
                    ServerModel.Server.SendMessage(user, ClientOutRoomMessageCommand.CommandId, sendingContent);
                }
            }
        }
        protected override void OnRun(MessageContent content, CommandArgs args)
        {
            if (string.IsNullOrEmpty(content.Text))
            {
                throw new ArgumentException("content.Text");
            }

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

            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;
                }

                if (content.MessageId != null && !room.IsMessageBelongToUser(args.ConnectionId, content.MessageId.Value))
                {
                    ServerModel.Api.Perform(new ServerSendSystemMessageAction(args.ConnectionId, SystemMessageId.MessageEditAccessDenied));
                    return;
                }

                Message message = null;
                if (content.MessageId == null)
                {
                    message = room.AddMessage(args.ConnectionId, content.Text);
                }
                else
                {
                    message      = room.GetMessage(content.MessageId.Value);
                    message.Text = content.Text;
                }

                var sendingContent = new ClientOutRoomMessageCommand.MessageContent
                {
                    Message  = message.ToDto(),
                    RoomName = content.RoomName,
                };

                foreach (var user in room.Users)
                {
                    ServerModel.Server.SendMessage(user, ClientOutRoomMessageCommand.CommandId, sendingContent);
                }
            }
        }