예제 #1
0
        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");
                }
            }
        }
예제 #2
0
        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(); };
        }
예제 #3
0
        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");
                }
            }
        }
예제 #4
0
        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);
        }
예제 #5
0
        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");
            }
        }