private void StartTransferButton_Click(object sender, EventArgs e) { FileTransferContainer.Clear(); StatusBar.Visible = true; StopButton.Enabled = true; StartTransferButton.Enabled = false; ProgressBar.Value = 0; ProcessedFilesContainer.Text = "0"; int profileCount = 0; // Count how many directories are found. try { foreach (string target in DeviceList.Items) { string[] directories = Directory.GetDirectories(target + Properties.Settings.Default.SourceDirectory); foreach (string path in directories) { profileCount++; ProfileCountContainer.Text = profileCount.ToString(); } } DirectoryTools DirectoryTools = new DirectoryTools(TotalSizeContainer, FileTransferContainer, ProcessedFilesContainer); ProfileLabel.Visible = true; ProfileCountContainer.Visible = true; TotalSizeLabel.Visible = true; TotalSizeContainer.Visible = true; ProcessedFilesContainer.Visible = true; ProcessedFilesLabel.Visible = true; ElapsedTimeContainer.Visible = true; ElapsedTimeLabel.Visible = true; Timer = new System.Windows.Forms.Timer(); Timer.Interval = 500; Timer.Tick += Ticker; Timer.Start(); StopWatch = new Stopwatch(); StopWatch.Start(); DirectorySizeCalculator = new Thread(() => InitiateTransfer(RetrieveDeviceList())); DirectorySizeCalculator.Start(); } catch { StatusBar.Text = "Transfer failed. Ensure target device is accessible."; StartTransferButton.Enabled = true; StopButton.Enabled = false; } }
private void saveReportToolStripMenuItem1_Click(object sender, EventArgs e) { SaveFileDialog saveSession = new SaveFileDialog(); saveSession.DefaultExt = "*.txt"; saveSession.Filter = "txt|*.txt"; saveSession.FileName = Environment.UserName + "-Profile Backup Session"; if (saveSession.ShowDialog() == DialogResult.OK) { FileTransferContainer.SaveFile(saveSession.FileName, RichTextBoxStreamType.UnicodePlainText); } }
private void ProcessClient(ConnectedPeerDataContainer client) { int _messageType = 0; PrimaryCommands _primaryCommand; string _clientSocketRemoteEndPointString = client.socket.RemoteEndPoint.ToString(); string _ip = _clientSocketRemoteEndPointString.Remove(_clientSocketRemoteEndPointString.LastIndexOf(':')); string _nick = client.nick; Socket _peerSocket = client.socket; Dispatcher.Invoke(DispatcherPriority.Normal, (Action)(() => { AddNewTab(client.nick, _clientSocketRemoteEndPointString.Remove(_clientSocketRemoteEndPointString.LastIndexOf(':'))); })); WriteToLogbox("Connected to- " + _ip); try { string _message; int _size; while (_peerSocket.Connected) { if (!Network.NetworkCommunicationManagers.ReceiveDecodedIntOverSocket(_peerSocket, client.key, out _messageType)) { break; } _primaryCommand = (PrimaryCommands)_messageType; switch (_primaryCommand) { case PrimaryCommands.TextMessage: if (!Network.NetworkCommunicationManagers.ReceiveDecodedIntOverSocket(_peerSocket, client.key, out _size)) { break; } if (!Network.NetworkCommunicationManagers.ReceiveDecodedStringOverSocket(_peerSocket, client.key, out _message, _size)) { break; } Dispatcher.Invoke(DispatcherPriority.Normal, (Action)(() => { WriteToTab(_ip, _message, _nick, 1); })); WriteToLogbox("Message Received- " + _nick + " (" + _clientSocketRemoteEndPointString + ") : " + _message); break; case PrimaryCommands.FileTransfer: int _port1; Network.NetworkCommunicationManagers.ReceiveIntOverSocket(_peerSocket, out _port1); FileTransferContainer fileTransferContainer = new FileTransferContainer() { status = FileTransferStatus.Running, fileName = "(Fetching....)", ID = _nick + " (" + _ip + ")", progress = 0, size = "(Fetching....)", transferType = FileTransferType.Download, pausedBy = PausedBy.None, }; Dispatcher.Invoke(DispatcherPriority.Normal, (Action)(() => { lock (RunningTransfers) { RunningTransfers.Add(fileTransferContainer); } })); Thread _thread = new Thread(() => { if (!(new Network.FileTransfer(fileTransferContainer)).AcceptFileTransfer(_peerSocket, _port1, this)) { WriteToLogbox("File Transfer from " + _nick + " (" + _clientSocketRemoteEndPointString + ") failed"); lock (fileTransferContainer) { if (fileTransferContainer.status != FileTransferStatus.Cancelled) { fileTransferContainer.status = FileTransferStatus.Error; } } } else { WriteToLogbox("File Transfer from " + _nick + " (" + _clientSocketRemoteEndPointString + ") done"); lock (fileTransferContainer) { fileTransferContainer.status = FileTransferStatus.Finished; } } }); _thread.Name = "File Transfer from " + _clientSocketRemoteEndPointString; _thread.IsBackground = true; _thread.Start(); break; default: _message = "Invalid MessageCode Received. The other client is most probably running a newer version of the application with a new Feature.. !!"; Dispatcher.Invoke(DispatcherPriority.Normal, (Action)(() => { WriteToTab(_ip, _message, _nick, 0); })); WriteToLogbox("Unsupported MessageCode from- " + _nick + " (" + _clientSocketRemoteEndPointString + ") received"); Network.NetworkCommunicationManagers.Disconnect(_peerSocket); new Thread(() => ConnectToPeerByIP(_ip)) { Name = _ip + " handler", IsBackground = true }.Start(); try { connectedPeersList.Remove(client); } catch (Exception) { } Dispatcher.Invoke(DispatcherPriority.Normal, (Action)(() => { WriteToTab(_ip, "Attempting to reconnect", _nick, 0); })); WriteToLogbox("Attempting to reconnect- " + _ip); Dispatcher.Invoke(DispatcherPriority.Normal, (Action)(() => { WriteToTab(_ip, "Disconnected", _nick, 0); })); WriteToLogbox("Disconnected- " + _ip); return; } } connectedPeersList.Remove(client); } catch (Exception) { try { connectedPeersList.Remove(client); } catch (Exception) { } } Dispatcher.Invoke(DispatcherPriority.Normal, (Action)(() => { WriteToTab(_ip, "Disconnected", _nick, 0); })); WriteToLogbox("Disconnected- " + _ip); }
private void SendFileButtonClicked(object sender, RoutedEventArgs e) { Button _btn = ((Button)sender); string _buttonTag = (string)_btn.Tag; string _ip = _buttonTag.Remove(0, _buttonTag.IndexOf(':') + 1); string _nick = _buttonTag.Remove(_buttonTag.IndexOf(':')); ConnectedPeerDataContainer _peer = new ConnectedPeerDataContainer(); _peer.nick = ""; _peer.socket = null; foreach (ConnectedPeerDataContainer _connectedPeer in connectedPeersList) { string _connectedPeerSocketString = _connectedPeer.socket.RemoteEndPoint.ToString(); if (_connectedPeerSocketString.Remove(_connectedPeerSocketString.LastIndexOf(':')) == _ip) { _peer = _connectedPeer; break; } } if (_peer.socket == null) { WriteToTab(_ip, "Client not available", nick, 0); return; } Microsoft.Win32.OpenFileDialog dlg = new Microsoft.Win32.OpenFileDialog(); // Display OpenFileDialog by calling ShowDialog method Nullable <bool> result = dlg.ShowDialog(); // Get the selected file name and display in a TextBox if ((result.HasValue && result.Value)) { string _filePath = dlg.FileName; FileTransferContainer fileTransferContainer = new FileTransferContainer() { fileName = System.IO.Path.GetFileName(_filePath), ID = _peer.nick + " (" + _ip + ")", progress = 0, status = FileTransferStatus.Running, transferType = FileTransferType.Upload, pausedBy = PausedBy.None, }; using (System.IO.FileStream _fs = new System.IO.FileStream(_filePath, System.IO.FileMode.Open, System.IO.FileAccess.Read, System.IO.FileShare.ReadWrite)) { fileTransferContainer.sizeInBytes = _fs.Length; fileTransferContainer.size = Converters.DataConverter.bytesToReadableString(fileTransferContainer.sizeInBytes); } lock (RunningTransfers) { RunningTransfers.Add(fileTransferContainer); } Thread _thread = new Thread(() => { Network.NetworkCommunicationManagers.SendEncryptedIntOverSocket(_peer.socket, _peer.key, (int)PrimaryCommands.FileTransfer); int _port1 = Network.NetworkCommunicationManagers.FindNextFreeTcpPort(); if (!Network.NetworkCommunicationManagers.SendIntOverSocket(_peer.socket, _port1)) { WriteToLogbox("Failed to send file (Handshake Failed)"); lock (RunningTransfers) { fileTransferContainer.status = FileTransferStatus.Error; } return; } ; new Network.FileTransfer(fileTransferContainer, _filePath, _port1); }); _thread.Name = "File Transfer Handler"; _thread.IsBackground = true; _thread.Start(); } }