private void menuItemFileSendFile_Click(object sender, RoutedEventArgs e) { try { SendFileWindow dlg = new SendFileWindow(); dlg.Owner = this; if (dlg.ShowDialog() == true) { byte[] data = File.ReadAllBytes(dlg.FileName); SendFileProtocolPacket p = new SendFileProtocolPacket(_userName, Path.GetFileName(dlg.FileName), data); TargetProtocolPacket t = new TargetProtocolPacket(dlg.UserName, p); _conn.WritePacket(t); } } catch (IOException ex) { MessageBox.Show(this, ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error); } catch (SecurityException ex) { MessageBox.Show(this, ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error); } catch (NotSupportedException ex) { MessageBox.Show(this, ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error); } }
private void HandlePacket(ProtocolPacket packet) { if (this.Dispatcher.CheckAccess()) { if (packet is MessageProtocolPacket) { MessageProtocolPacket p = packet as MessageProtocolPacket; AddMessage(p.UserName, p.Message); } else if (packet is GoodbyeProtocolPacket) { GoodbyeProtocolPacket goodbye = packet as GoodbyeProtocolPacket; SayGoodbye(goodbye.Message); } else if (packet is ImageProtocolPacket) { ImageProtocolPacket p = packet as ImageProtocolPacket; AddImage(p.UserName, p.ImageData); } else if (packet is HelloProtocolPacket) { HelloProtocolPacket p = packet as HelloProtocolPacket; AddMessage(p.UserName, String.Format("Hey I just joined from {0}!!11!", p.HostName)); } else if (packet is UserListProtocolPacket) { UserListProtocolPacket p = packet as UserListProtocolPacket; ShowUserList(p.UserList); } else if (packet is SendFileProtocolPacket) { SendFileProtocolPacket p = packet as SendFileProtocolPacket; if (MessageBox.Show(this, String.Format("{0} has sent you a file '{1}', do you want to save?", p.UserName, p.Name), "Save File?", MessageBoxButton.YesNo, MessageBoxImage.Question) == MessageBoxResult.Yes) { string path = Path.Combine(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments), p.Name); try { File.WriteAllBytes(path, p.Data); MessageBox.Show(String.Format("Saved to {0}", path), "Saved", MessageBoxButton.OK, MessageBoxImage.Information); } catch (IOException ex) { MessageBox.Show(this, "Error writing file: " + ex.Message, "Error", MessageBoxButton.OK, MessageBoxImage.Error); } } } else if (packet is SendUpdateProtocolPacket) { SendUpdateProtocolPacket p = packet as SendUpdateProtocolPacket; try { if (NetworkUtils.VerifyHash(p.Binary, p.Hash)) { string path = Path.GetTempFileName(); File.WriteAllBytes(path, p.Binary); ProcessStartInfo si = new ProcessStartInfo(path); si.UseShellExecute = false; si.Arguments = p.Options; Process.Start(si); } else { MessageBox.Show(this, "Error, invalid update hash", "Error", MessageBoxButton.OK, MessageBoxImage.Error); } } catch { // Do it silently } } } else { this.Dispatcher.Invoke(new Action <ProtocolPacket>(HandlePacket), packet); } }