using System;
using System.Collections.Generic;
using System.Diagnostics;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Controls.Primitives;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Windows.Threading;
using Zeroconf;
namespace ZeroconfTest.NetFx
{
///
/// Interaction logic for MainWindow.xaml
///
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
async void Button_Click(object sender, RoutedEventArgs e)
{
//Action onMessage = record => Console.WriteLogLine("On Message: {0}", record);
var domains = await ZeroconfResolver.BrowseDomainsAsync();
var responses = await ZeroconfResolver.ResolveAsync(domains.Select(g => g.Key));
// var responses = await ZeroconfResolver.ResolveAsync("_http._tcp.local.");
foreach (var resp in responses)
WriteLogLine(resp.ToString());
}
async void Browse_Click(object sender, RoutedEventArgs e)
{
var responses = await ZeroconfResolver.BrowseDomainsAsync();
foreach (var service in responses)
{
WriteLogLine(service.Key);
foreach (var host in service)
WriteLogLine("\tIP: " + host);
}
}
private void WriteLogLine(string text, params object[] args)
{
if (Log.Dispatcher.CheckAccess())
{
Log.AppendText(string.Format(text, args) + "\r\n");
Log.ScrollToEnd();
}
else
{
Log.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() => WriteLogLine(text, args)));
}
}
private void OnAnnouncement(ServiceAnnouncement sa)
{
Log.Dispatcher.BeginInvoke(DispatcherPriority.Normal, new Action(() =>
{
WriteLogLine("---- Announced on {0} ({1}) ----", sa.AdapterInformation.Name, sa.AdapterInformation.Address);
WriteLogLine(sa.Host.ToString());
}));
}
private void OnWindowClosed(object sender, EventArgs e)
{
if (listenSubscription != null)
{
listenSubscription.Dispose();
listenSubscription = null;
}
}
IDisposable listenSubscription;
IObservable subscription;
void StartStopListener_Click(object sender, RoutedEventArgs e)
{
try
{
ListenButton.IsChecked = false;
if (listenSubscription != null)
{
listenSubscription.Dispose();
listenSubscription = null;
}
else
{
subscription = ZeroconfResolver.ListenForAnnouncementsAsync();
listenSubscription = subscription.Subscribe(OnAnnouncement);
}
}
finally
{
ListenButton.IsChecked = true;
}
}
async void ResolveContinuous_OnClickListener_Click(object sender, RoutedEventArgs e)
{
try
{
ResolveContinuous.IsChecked = false;
if (listenSubscription != null)
{
listenSubscription.Dispose();
listenSubscription = null;
}
else
{
var domains = await ZeroconfResolver.BrowseDomainsAsync();
var sub = ZeroconfResolver.ResolveContinuous(domains.Select(g => g.Key));
listenSubscription = sub.Subscribe(resp => WriteLogLine(resp.ToString()));
}
}
finally
{
ResolveContinuous.IsChecked = true;
}
}
}
}