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; }
public Handshaker(IWebServerGenerator webServerGenerator, IRomePackageManager packageManager, IEnumerable <string> myIPs) { this.myIPs = myIPs; ipFinder = new ServerIPFinder(webServerGenerator, packageManager); ipFinder.IPDetectionCompleted += IpFinder_IPDetectionCompleted; }
private static async Task SendFinishService(IRomePackageManager packageManager) { Dictionary <string, object> vs = new Dictionary <string, object> { { "Receiver", "System" }, { "FinishService", "FinishService" } }; await packageManager.Send(vs); }
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; }
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; }
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); }
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); }
public ServerIPFinder(IWebServerGenerator _webServerGenerator, IRomePackageManager _packageManager) { webServerGenerator = _webServerGenerator; packageManager = _packageManager; }
public TextSender(IRomePackageManager _packageManager, string _deviceName) { packageManager = _packageManager; deviceName = _deviceName; }