예제 #1
0
        private async Task SendText(IRomePackageManager packageManager, string deviceName, string text)
        {
            ViewModel.ProgressPercentIndicatorVisibility = Visibility.Collapsed;
            TextSender ts = new TextSender(packageManager, deviceName);

            ts.TextSendProgress += (ee) =>
            {
                ViewModel.ProgressIsIndeterminate = false;
                ViewModel.ProgressMaximum         = ee.TotalParts;
                ViewModel.ProgressValue           = ee.SentParts;
            };

            ViewModel.SendStatus = "Sending...";

            bool sendResult = await ts.Send(text, ContentType.ClipboardContent);

            if (sendResult)
            {
                await SendFinishService(packageManager);

                ViewModel.SendStatus = "Done.";
            }
            else
            {
                ViewModel.SendStatus = "Failed :(";
            }

            ViewModel.ProgressIsIndeterminate = false;
            ViewModel.ProgressValue           = ViewModel.ProgressMaximum;
        }
예제 #2
0
        public Handshaker(IWebServerGenerator webServerGenerator, IRomePackageManager packageManager, IEnumerable <string> myIPs)
        {
            this.myIPs = myIPs;

            ipFinder = new ServerIPFinder(webServerGenerator, packageManager);
            ipFinder.IPDetectionCompleted += IpFinder_IPDetectionCompleted;
        }
예제 #3
0
 private static async Task SendFinishService(IRomePackageManager packageManager)
 {
     Dictionary <string, object> vs = new Dictionary <string, object>
     {
         { "Receiver", "System" },
         { "FinishService", "FinishService" }
     };
     await packageManager.Send(vs);
 }
예제 #4
0
        public FileSender2(object remoteSystem, IWebServerGenerator webServerGenerator, IRomePackageManager packageManager, IEnumerable <string> myIPs, string deviceName)
        {
            this.remoteSystem       = remoteSystem;
            this.webServerGenerator = webServerGenerator;
            this.packageManager     = packageManager;

            this.handshaker = new Handshaker(this.webServerGenerator, this.packageManager, myIPs);

            this.deviceName = deviceName;
        }
예제 #5
0
        public FileSender(object _remoteSystem, IWebServerGenerator _webServerGenerator, IRomePackageManager _packageManager, IEnumerable <string> _myIPs, string _deviceName)
        {
            remoteSystem       = _remoteSystem;
            webServerGenerator = _webServerGenerator;
            packageManager     = _packageManager;

            ipFinder = new ServerIPFinder(webServerGenerator, packageManager);

            myIPs = new List <string>(_myIPs);

            deviceName = _deviceName;
        }
예제 #6
0
        private async Task <FileTransferResult> SendFile(object rs, IRomePackageManager packageManager, string deviceName, bool preserveFolderStructure)
        {
            string sendingText = ((SendDataTemporaryStorage.Files.Count == 1) && (SendDataTemporaryStorage.Files[0] is StorageFile)) ? "Sending file..." : "Sending files...";

            string             message = "";
            FileTransferResult result  = FileTransferResult.Successful;

            if (await DownloadNecessaryFiles() == false)
            {
                return(FileTransferResult.Cancelled);
            }

            sendingFile = true;

            ViewModel.SendStatus = "Preparing...";
            using (FileSender2 fs = new FileSender2(rs,
                                                    new QuickShare.UWP.WebServerGenerator(),
                                                    packageManager,
                                                    FindMyIPAddresses(),
                                                    deviceName))
            {
                ViewModel.ProgressMaximum = 1;

                fs.FileTransferProgress += async(ss, ee) =>
                {
                    if (ee.State == FileTransferState.Error)
                    {
                        result  = FileTransferResult.FailedOnSend;
                        message = result.ToString(); // TODO
                    }
                    else if (ee.State == FileTransferState.Reconnecting)
                    {
                        ViewModel.SendStatus = "Reconnecting...";
                        ViewModel.ProgressIsIndeterminate = true;
                    }
                    else if (ee.State == FileTransferState.Reconnected)
                    {
                        ViewModel.SendStatus = "Waiting for response...";
                    }
                    else
                    {
                        await DispatcherEx.RunOnCoreDispatcherIfPossible(() =>
                        {
                            ViewModel.SendStatus              = sendingText;
                            ViewModel.ProgressMaximum         = 1.0;
                            ViewModel.ProgressValue           = ee.Progress;
                            ViewModel.ProgressIsIndeterminate = false;

                            if (ee.TotalTransferredBytes > 0)
                            {
                                ViewModel.ProgressCaption = StringFunctions.GetSizeString(ee.TotalTransferredBytes);
                            }
                        }, false);
                    }
                };

                if (SendDataTemporaryStorage.Files.Count == 0)
                {
                    ViewModel.SendStatus = "No files.";
                    ViewModel.ProgressIsIndeterminate = false;
                    return(FileTransferResult.NoFiles);
                }

                await Task.Run(async() =>
                {
                    result = await fs.Send(preserveFolderStructure ? await GetFiles(SendDataTemporaryStorage.Files) : await GetFilesWithoutFolderStructure(SendDataTemporaryStorage.Files),
                                           sendFileCancellationTokenSource.Token);
                });

                ViewModel.ProgressValue = ViewModel.ProgressMaximum;
            }

            sendingFile = false;

            if (result != FileTransferResult.Successful)
            {
                HideEverything();

                if (result != FileTransferResult.Cancelled)
                {
                    string title = "Send failed.";
                    string text  = message;
                    if (result == FileTransferResult.FailedOnHandshake)
                    {
                        title = "Couldn't reach remote device.";
                        text  = "Make sure both devices are connected to the same Wi-Fi or LAN network.";
                    }

                    Frame.Navigate(typeof(MainSendFailed), JsonConvert.SerializeObject(new SendFailedViewModel
                    {
                        ErrorTitle       = title,
                        ErrorDescription = text,
                    }));
                }
            }
            else
            {
                await SendFinishService(packageManager);

                ViewModel.SendStatus = "Done.";
            }

            return(result);
        }
예제 #7
0
        private async Task <FileTransferResult> SendFile(object rs, IRomePackageManager packageManager, string deviceName)
        {
            string sendingText = ((SendDataTemporaryStorage.Files.Count == 1) && (SendDataTemporaryStorage.Files[0] is StorageFile)) ? "Sending file..." : "Sending files...";

            ViewModel.SendStatus = "Preparing...";

            string             message = "";
            FileTransferResult result  = FileTransferResult.Successful;

            sendingFile = true;

            using (FileSender fs = new FileSender(rs,
                                                  new QuickShare.UWP.WebServerGenerator(),
                                                  packageManager,
                                                  FindMyIPAddresses(),
                                                  deviceName))
            {
                ViewModel.ProgressMaximum = 1;
                fs.FileTransferProgress  += async(ss, ee) =>
                {
                    if (ee.State == FileTransferState.Error)
                    {
                        result  = FileTransferResult.FailedOnSend;
                        message = ee.Message;
                    }
                    else
                    {
                        await DispatcherEx.RunOnCoreDispatcherIfPossible(() =>
                        {
                            ViewModel.SendStatus              = sendingText;
                            ViewModel.ProgressMaximum         = (int)ee.Total + 1;
                            ViewModel.ProgressValue           = (int)ee.CurrentPart;
                            ViewModel.ProgressIsIndeterminate = false;
                        }, false);
                    }
                };

                if (SendDataTemporaryStorage.Files.Count == 0)
                {
                    ViewModel.SendStatus = "No files.";
                    ViewModel.ProgressIsIndeterminate = false;
                    return(FileTransferResult.NoFiles);
                }
                else if ((SendDataTemporaryStorage.Files.Count == 1) && (SendDataTemporaryStorage.Files[0] is StorageFile))
                {
                    await Task.Run(async() =>
                    {
                        result = await fs.SendFile(sendFileCancellationTokenSource.Token, new PCLStorage.WinRTFile(SendDataTemporaryStorage.Files[0] as StorageFile));
                    });
                }
                else if ((SendDataTemporaryStorage.Files.Count == 1) && (SendDataTemporaryStorage.Files[0] is StorageFolder))
                {
                    var folder = SendDataTemporaryStorage.Files[0] as StorageFolder;

                    await Task.Run(async() =>
                    {
                        result = await fs.SendQueue(sendFileCancellationTokenSource.Token, await GetFilesOfFolder(folder), folder.DisplayName);
                    });
                }
                else
                {
                    await Task.Run(async() =>
                    {
                        result = await fs.SendFiles(sendFileCancellationTokenSource.Token,
                                                    from x in SendDataTemporaryStorage.Files
                                                    where x is StorageFile
                                                    select new PCLStorage.WinRTFile(x as StorageFile), DateTime.Now.ToString("yyyy-MM-dd HH-mm-ss") + "\\");
                    });
                }

                ViewModel.ProgressValue = ViewModel.ProgressMaximum;
            }

            sendingFile = false;

            if (result != FileTransferResult.Successful)
            {
                HideEverything();

                if (result != FileTransferResult.Cancelled)
                {
                    string title = "Send failed.";
                    string text  = message;
                    if (result == FileTransferResult.FailedOnHandshake)
                    {
                        title = "Couldn't reach remote device.";
                        text  = "Make sure both devices are connected to the same Wi-Fi or LAN network.";
                    }

                    var dlg = new MessageDialog(text, title);
                    await dlg.ShowAsync();
                }
            }
            else
            {
                await SendFinishService(packageManager);

                ViewModel.SendStatus = "Finished.";
            }

            return(result);
        }
예제 #8
0
 public ServerIPFinder(IWebServerGenerator _webServerGenerator, IRomePackageManager _packageManager)
 {
     webServerGenerator = _webServerGenerator;
     packageManager     = _packageManager;
 }
예제 #9
0
 public TextSender(IRomePackageManager _packageManager, string _deviceName)
 {
     packageManager = _packageManager;
     deviceName     = _deviceName;
 }