public override void Kill(bool finished) { if (_stream != null) { _stream.Dispose(); } if (finished) { //Tox.FileSendControl(FriendNumber, FileNumber, ToxFileControl., new byte[0]); Finished = true; if (Tag != null) { Tag.Dispatcher.BeginInvoke(((Action)(() => { Tag.AcceptButton.Visibility = Visibility.Collapsed; Tag.DeclineButton.Visibility = Visibility.Collapsed; Tag.PauseButton.Visibility = Visibility.Collapsed; Tag.FileOpenButton.Visibility = Visibility.Visible; Tag.FolderOpenButton.Visibility = Visibility.Visible; }))); } } else { Tox.FileControl(FriendNumber, FileNumber, ToxFileControl.Cancel); if (Tag != null) { Tag.HideAllButtons(); Tag.SetStatus(FileName + " - Transfer killed"); } } }
public IncomingFileTransfer(ToxEventArgs.FileSendRequestEventArgs e, Tox tox, string savepath) { Tox = tox; ViewModel.SavePath = savepath; ViewModel.ID = e.FileNumber; ViewModel.Sender = e.FriendNumber; ViewModel.TotalBytes = e.FileSize; try { FileStream = new FileStream(ViewModel.SavePath, FileMode.Create); } catch { Dispose(); } Tox.FileControl(ViewModel.Sender, ViewModel.ID, ToxFileControl.Resume); Tox.OnFileChunkReceived += Tox_OnFileChunkReceived; Tox.OnFileControlReceived += Tox_OnFileControlReceived; OnComplete += (v) => { Dispose(); }; }
public override void Kill(bool finished) { if (_stream != null) { _stream.Dispose(); } if (finished) { Finished = true; if (Tag != null) { Tag.HideAllButtons(); } } else { Tox.FileControl(FriendNumber, FileNumber, ToxFileControl.Cancel); if (Tag != null) { Tag.HideAllButtons(); Tag.SetStatus(FileName + " - Transfer killed"); } } }
public bool CancelTransfer(FileTransfer transfer) { if (!_transfers.ContainsKey(transfer)) { Debugging.Write("Could not cancel file transfer, we don't know about this file transfer"); return(false); } var error = ToxErrorFileControl.Ok; _tox.FileControl(transfer.FriendNumber, transfer.FileNumber, ToxFileControl.Cancel); RemoveTransfer(transfer, true); if (error != ToxErrorFileControl.Ok) { Debugging.Write("Could not cancel file transfer, error: " + error); return(false); } return(true); }
public void TestToxFileTransfer() { byte[] fileData = new byte[0xBEEEF]; byte[] receivedData = new byte[0xBEEEF]; new Random().NextBytes(fileData); string fileName = "testing.dat"; bool fileReceived = false; _tox2.OnFileSendRequestReceived += (sender, args) => { if (fileName != args.FileName) { Assert.Fail("Filenames do not match"); } if (args.FileSize != fileData.Length) { Assert.Fail("File lengths do not match"); } var error2 = ToxErrorFileControl.Ok; bool result = _tox2.FileControl(args.FriendNumber, args.FileNumber, ToxFileControl.Resume); if (!result || error2 != ToxErrorFileControl.Ok) { Assert.Fail("Failed to send file control, error: {0}, result: {1}", error2, result); } }; var error = ToxErrorFileSend.Ok; var fileInfo = _tox1.FileSend(0, ToxFileKind.Data, fileData.Length, fileName, out error); if (error != ToxErrorFileSend.Ok) { Assert.Fail("Failed to send a file send request, error: {0}", error); } _tox1.OnFileChunkRequested += (sender, args) => { byte[] data = new byte[args.Length]; Array.Copy(fileData, args.Position, data, 0, args.Length); var error2 = ToxErrorFileSendChunk.Ok; bool result = _tox1.FileSendChunk(args.FriendNumber, args.FileNumber, args.Position, data, out error2); if (!result || error2 != ToxErrorFileSendChunk.Ok) { Assert.Fail("Failed to send chunk, error: {0}, result: {1}", error2, result); } }; _tox2.OnFileChunkReceived += (sender, args) => { if (args.Position == fileData.Length) { fileReceived = true; } else { Array.Copy(args.Data, 0, receivedData, args.Position, args.Data.Length); } }; while (!fileReceived) { DoIterate(); } if (!fileData.SequenceEqual(receivedData)) { Assert.Fail("Original data is not equal to the data we received"); } }