예제 #1
0
        public void SendFile(string path)
        {
            using (var fileStream = File.Open(path, FileMode.Open, FileAccess.Read))
            {
                var fileName = Path.GetFileName(path);
                var fileSize = fileStream.Length;

                while (fileStream.Position != fileStream.Length)
                {
                    var firstRead = fileStream.Position == 0;
                    var chunk     = ArrayPool <byte> .Shared.Rent(MsgFile.MAX_CHUNK_SIZE);

                    var readBytes = fileStream.Read(chunk, 0, chunk.Length);
                    var msgFile   = MsgFile.Create(fileName, fileSize, readBytes, chunk, firstRead);
                    Send(msgFile);
                    ArrayPool <byte> .Shared.Return(chunk);
                }
            }
        }
예제 #2
0
        public async ValueTask SendFile(string path, int tokenId)
        {
            var token = Tokens[tokenId];

            using (var fileStream = File.Open(path, FileMode.Open, FileAccess.Read))
            {
                var fileSize = fileStream.Length;
                var chunk    = new byte[MsgFile.MAX_CHUNK_SIZE];

                while (fileStream.Position != fileStream.Length)
                {
                    var firstRead = fileStream.Position == 0;
                    var readBytes = await fileStream.ReadAsync(chunk, 0, MsgFile.MAX_CHUNK_SIZE);

                    var msgFile = MsgFile.Create(token, fileSize, readBytes, chunk, firstRead);
                    Send(msgFile);
                }
            }

            Tokens.TryRemove(tokenId, out _);
        }