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); } } }
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); } }
private void FileChunkReceivedHandler(object sender, ToxEventArgs.FileChunkEventArgs e) { if (IsPlaceholder || !IsThisTransfer(e)) { return; } PutNextChunk(e); if (IsFinished) { _fileTransferResumer.RemoveTransfer(_friendNumber, _fileNumber); State = FileTransferState.Finished; } }
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); } }
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; }
private void FileChunkReceivedHandler(object sender, ToxEventArgs.FileChunkEventArgs e) { FileChunkReceived?.Invoke(this, e); }
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"); }