コード例 #1
0
        public void RemoveFileFromRoom(string roomName, FileId fileId)
        {
            if (string.IsNullOrEmpty(roomName))
            {
                throw new ArgumentException("roomName");
            }

            using (var client = ClientModel.Get())
            {
                var postedFileIndex = client.PostedFiles.FindIndex(f => f.File.Id == fileId);
                if (postedFileIndex < 0)
                {
                    return;
                }

                var postedFile = client.PostedFiles[postedFileIndex];
                client.PostedFiles.RemoveAt(postedFileIndex);
                postedFile.Dispose();
            }

            var sendingContent = new ServerRemoveFileFromRoomCommand.MessageContent {
                RoomName = roomName, FileId = fileId
            };

            ClientModel.Client.SendMessage(ServerRemoveFileFromRoomCommand.CommandId, sendingContent);
        }
コード例 #2
0
ファイル: StandardClientAPI.cs プロジェクト: quangfox/TCPChat
        /// <summary>
        /// Удаляет файл с раздачи.
        /// </summary>
        /// <param name="roomName">Название комнаты из которой удаляется файл.</param>
        /// <param name="file">Описание удаляемого файла.</param>
        public void RemoveFileFromRoom(string roomName, FileDescription file)
        {
            if (string.IsNullOrEmpty(roomName))
            {
                throw new ArgumentException("roomName");
            }

            if (file == null)
            {
                throw new ArgumentNullException("file");
            }

            using (var client = ClientModel.Get())
            {
                PostedFile postedFile = client.PostedFiles.FirstOrDefault(current => current.File.Equals(file));

                if (postedFile == null)
                {
                    return;
                }

                client.PostedFiles.Remove(postedFile);
                postedFile.Dispose();
            }

            var sendingContent = new ServerRemoveFileFromRoomCommand.MessageContent {
                RoomName = roomName, File = file
            };

            ClientModel.Client.SendMessage(ServerRemoveFileFromRoomCommand.Id, sendingContent);
        }
コード例 #3
0
        protected override void OnRun(MessageContent content, ClientCommandArgs args)
        {
            if (content.File == null)
            {
                throw new ArgumentNullException("File");
            }

            if (content.Length <= 0)
            {
                throw new ArgumentException("Length <= 0");
            }

            if (content.StartPartPosition < 0)
            {
                throw new ArgumentException("StartPartPosition < 0");
            }

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

            using (var client = ClientModel.Get())
            {
                if (!client.PostedFiles.Exists(c => c.File.Equals(content.File)))
                {
                    var fileNotPostContent = new ServerRemoveFileFromRoomCommand.MessageContent
                    {
                        FileId   = content.File.Id,
                        RoomName = content.RoomName,
                    };

                    ClientModel.Client.SendMessage(ServerRemoveFileFromRoomCommand.CommandId, fileNotPostContent);
                    return;
                }
            }

            var sendingContent = new ClientWriteFilePartCommand.MessageContent
            {
                File = content.File,
                StartPartPosition = content.StartPartPosition,
                RoomName          = content.RoomName,
            };

            var partSize = content.File.Size < content.StartPartPosition + content.Length
        ? content.File.Size - content.StartPartPosition
        : content.Length;

            var part = new byte[partSize];

            using (var client = ClientModel.Get())
            {
                var sendingFileStream = client.PostedFiles.First(c => c.File.Equals(content.File)).ReadStream;
                sendingFileStream.Position = content.StartPartPosition;
                sendingFileStream.Read(part, 0, part.Length);
            }

            ClientModel.Peer.SendMessage(args.PeerConnectionId, ClientWriteFilePartCommand.CommandId, sendingContent, part);
        }
コード例 #4
0
        private static void SendFileNotPost(string roomName, FileId fileId)
        {
            var fileNotPostContent = new ServerRemoveFileFromRoomCommand.MessageContent
            {
                FileId   = fileId,
                RoomName = roomName,
            };

            ClientModel.Client.SendMessage(ServerRemoveFileFromRoomCommand.CommandId, fileNotPostContent);
        }
コード例 #5
0
        public void Perform()
        {
            using (var client = ClientModel.Get())
                client.Chat.RemovePostedFile(_roomName, _fileId);

            var sendingContent = new ServerRemoveFileFromRoomCommand.MessageContent {
                RoomName = _roomName, FileId = _fileId
            };

            ClientModel.Client.SendMessage(ServerRemoveFileFromRoomCommand.CommandId, sendingContent);
        }
コード例 #6
0
        public void RemoveFileFromRoom(string roomName, FileDescription file)
        {
            if (string.IsNullOrEmpty(roomName))
            throw new ArgumentException("roomName");

              if (file == null)
            throw new ArgumentNullException("file");

              using (var client = ClientModel.Get())
              {
            var postedFile = client.PostedFiles.FirstOrDefault(current => current.File.Equals(file));
            if (postedFile == null)
              return;

            client.PostedFiles.Remove(postedFile);
            postedFile.Dispose();
              }

              var sendingContent = new ServerRemoveFileFromRoomCommand.MessageContent { RoomName = roomName, File = file };
              ClientModel.Client.SendMessage(ServerRemoveFileFromRoomCommand.CommandId, sendingContent);
        }
コード例 #7
0
        public void Run(ClientCommandArgs args)
        {
            if (args.PeerConnectionId == null)
            {
                return;
            }

            var receivedContent = Serializer.Deserialize <MessageContent>(args.Message);

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

            if (receivedContent.Length <= 0)
            {
                throw new ArgumentException("Length <= 0");
            }

            if (receivedContent.StartPartPosition < 0)
            {
                throw new ArgumentException("StartPartPosition < 0");
            }

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

            using (var client = ClientModel.Get())
            {
                if (!client.PostedFiles.Exists((current) => current.File.Equals(receivedContent.File)))
                {
                    var fileNotPostContent = new ServerRemoveFileFromRoomCommand.MessageContent
                    {
                        File     = receivedContent.File,
                        RoomName = receivedContent.RoomName,
                    };

                    ClientModel.Client.SendMessage(ServerRemoveFileFromRoomCommand.Id, fileNotPostContent);
                    return;
                }
            }

            var sendingContent = new ClientWriteFilePartCommand.MessageContent
            {
                File = receivedContent.File,
                StartPartPosition = receivedContent.StartPartPosition,
                RoomName          = receivedContent.RoomName,
            };

            long partSize;

            if (receivedContent.File.Size < receivedContent.StartPartPosition + receivedContent.Length)
            {
                partSize = receivedContent.File.Size - receivedContent.StartPartPosition;
            }
            else
            {
                partSize = receivedContent.Length;
            }

            sendingContent.Part = new byte[partSize];

            using (var client = ClientModel.Get())
            {
                var sendingFileStream = client.PostedFiles.First(c => c.File.Equals(receivedContent.File)).ReadStream;
                sendingFileStream.Position = receivedContent.StartPartPosition;
                sendingFileStream.Read(sendingContent.Part, 0, sendingContent.Part.Length);
            }

            ClientModel.Peer.SendMessage(args.PeerConnectionId, ClientWriteFilePartCommand.Id, sendingContent);
        }