Exemplo n.º 1
0
        private void Tox_OnFileChunkReceived(object sender, ToxEventArgs.FileChunkEventArgs e)
        {
            if (e.FileNumber != ViewModel.ID)
            {
                return;
            }

            if (FileStream.Position != e.Position)
            {
                FileStream.Seek(e.Position, SeekOrigin.Begin);
            }

            FileStream.Write(e.Data, 0, e.Data.Length);
            FileStream.Flush();

            ViewModel.WrittenBytes += e.Data.Length;
            ViewModel.Progress      = ViewModel.WrittenBytes / ViewModel.TotalBytes;

            if (ViewModel.WrittenBytes == ViewModel.TotalBytes)
            {
                if (OnComplete != null)
                {
                    OnComplete(ViewModel);
                }
            }
        }
Exemplo n.º 2
0
            public void PutNextChunk(ToxEventArgs.FileChunkEventArgs e)
            {
                lock (_stream)
                {
                    if (_stream.Position != e.Position)
                    {
                        _stream.Seek(e.Position, SeekOrigin.Begin);
                    }

                    _stream.Write(e.Data, 0, e.Data.Length);
                }
            }
Exemplo n.º 3
0
        private void FileChunkReceivedHandler(object sender, ToxEventArgs.FileChunkEventArgs e)
        {
            if (IsPlaceholder || !IsThisTransfer(e))
            {
                return;
            }

            PutNextChunk(e);

            if (IsFinished)
            {
                _fileTransferResumer.RemoveTransfer(_friendNumber, _fileNumber);
                State = FileTransferState.Finished;
            }
        }
Exemplo n.º 4
0
        private void FileChunkReceivedHandler(object sender, ToxEventArgs.FileChunkEventArgs e)
        {
            var transferId = new TransferId(e.FriendNumber, e.FileNumber);

            if (IsTransferFinished(transferId))
            {
                return;
            }

            var currentTransfer = _transfers[transferId];

            currentTransfer.PutNextChunk(e);

            if (currentTransfer.IsFinished())
            {
                HandleFinishedDownload(transferId);
            }
        }
Exemplo n.º 5
0
        private void Tox_OnFileChunkReceived(object sender, ToxEventArgs.FileChunkEventArgs e)
        {
            var    transfer = FindTransfer(e.FriendNumber, e.FileNumber);
            Stream stream   = null;

            if (transfer == null || !_transfers.TryGetValue(transfer, out stream))
            {
                Debugging.Write("Got a chunk for a transfer we don't know about, ignoring");
                return;
            }

            //TODO: remember the total file size in case the client isn't nice enough to send an empty chunk
            if (e.Data == null || e.Data.Length == 0)
            {
                //looks like we're done!
                RemoveTransfer(transfer, false);

                if (transfer.Kind == ToxFileKind.Avatar)
                {
                    ProfileManager.Instance.AvatarManager.Rehash(e.FriendNumber);
                }

                Debugging.Write("File transfer finished");
                return;
            }

            if (stream.Position != e.Position)
            {
                Debugging.Write("Position doesn't equal ours, rewinding");
                stream.Seek(e.Position, SeekOrigin.Begin);
                transfer.TransferredBytes += e.Position;
            }

            stream.Write(e.Data, 0, e.Data.Length);
            transfer.TransferredBytes += e.Data.Length;
        }
Exemplo n.º 6
0
 private void FileChunkReceivedHandler(object sender, ToxEventArgs.FileChunkEventArgs e)
 {
     FileChunkReceived?.Invoke(this, e);
 }
Exemplo n.º 7
0
 private void OnToxFileChunkReceived(object sender, ToxEventArgs.FileChunkEventArgs e)
 {
     this.Tox.FileControl(e.FriendNumber, e.FileNumber, ToxFileControl.Cancel);
     Logger.Log(LogLevel.Warning, "ToxFileChunkReceived not supported, canceled");
 }