MainWindow.xaml.cs 4.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Diagnostics;
  4. using System.Linq;
  5. using System.Text;
  6. using System.Threading;
  7. using System.Threading.Tasks;
  8. using System.Windows;
  9. using System.Windows.Controls;
  10. using System.Windows.Controls.Primitives;
  11. using System.Windows.Data;
  12. using System.Windows.Documents;
  13. using System.Windows.Input;
  14. using System.Windows.Media;
  15. using System.Windows.Media.Imaging;
  16. using System.Windows.Navigation;
  17. using System.Windows.Shapes;
  18. using System.Windows.Threading;
  19. using Zeroconf;
  20. namespace ZeroconfTest.NetFx
  21. {
  22. /// <summary>
  23. /// Interaction logic for MainWindow.xaml
  24. /// </summary>
  25. public partial class MainWindow : Window
  26. {
  27. public MainWindow()
  28. {
  29. InitializeComponent();
  30. }
  31. async void Button_Click(object sender, RoutedEventArgs e)
  32. {
  33. //Action<IZeroconfRecord> onMessage = record => Console.WriteLogLine("On Message: {0}", record);
  34. var domains = await ZeroconfResolver.BrowseDomainsAsync();
  35. var responses = await ZeroconfResolver.ResolveAsync(domains.Select(g => g.Key));
  36. // var responses = await ZeroconfResolver.ResolveAsync("_http._tcp.local.");
  37. foreach (var resp in responses)
  38. WriteLogLine(resp.ToString());
  39. }
  40. async void Browse_Click(object sender, RoutedEventArgs e)
  41. {
  42. var responses = await ZeroconfResolver.BrowseDomainsAsync();
  43. foreach (var service in responses)
  44. {
  45. WriteLogLine(service.Key);
  46. foreach (var host in service)
  47. WriteLogLine("\tIP: " + host);
  48. }
  49. }
  50. private void WriteLogLine(string text, params object[] args)
  51. {
  52. if (Log.Dispatcher.CheckAccess())
  53. {
  54. Log.AppendText(string.Format(text, args) + "\r\n");
  55. Log.ScrollToEnd();
  56. }
  57. else
  58. {
  59. Log.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() => WriteLogLine(text, args)));
  60. }
  61. }
  62. private void OnAnnouncement(ServiceAnnouncement sa)
  63. {
  64. Log.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() =>
  65. {
  66. WriteLogLine("---- Announced on {0} ({1}) ----", sa.AdapterInformation.Name, sa.AdapterInformation.Address);
  67. WriteLogLine(sa.Host.ToString());
  68. }));
  69. }
  70. private void OnWindowClosed(object sender, EventArgs e)
  71. {
  72. if (listenSubscription != null)
  73. {
  74. listenSubscription.Dispose();
  75. listenSubscription = null;
  76. }
  77. }
  78. IDisposable listenSubscription;
  79. IObservable<ServiceAnnouncement> subscription;
  80. void StartStopListener_Click(object sender, RoutedEventArgs e)
  81. {
  82. try
  83. {
  84. ListenButton.IsChecked = false;
  85. if (listenSubscription != null)
  86. {
  87. listenSubscription.Dispose();
  88. listenSubscription = null;
  89. }
  90. else
  91. {
  92. subscription = ZeroconfResolver.ListenForAnnouncementsAsync();
  93. listenSubscription = subscription.Subscribe(OnAnnouncement);
  94. }
  95. }
  96. finally
  97. {
  98. ListenButton.IsChecked = true;
  99. }
  100. }
  101. async void ResolveContinuous_OnClickListener_Click(object sender, RoutedEventArgs e)
  102. {
  103. try
  104. {
  105. ResolveContinuous.IsChecked = false;
  106. if (listenSubscription != null)
  107. {
  108. listenSubscription.Dispose();
  109. listenSubscription = null;
  110. }
  111. else
  112. {
  113. var domains = await ZeroconfResolver.BrowseDomainsAsync();
  114. var sub = ZeroconfResolver.ResolveContinuous(domains.Select(g => g.Key));
  115. listenSubscription = sub.Subscribe(resp => WriteLogLine(resp.ToString()));
  116. }
  117. }
  118. finally
  119. {
  120. ResolveContinuous.IsChecked = true;
  121. }
  122. }
  123. }
  124. }