void ClientServiceEvent(Mono.Ssdp.ServiceArgs args, Action <DeviceAnnouncement> deviceHandler, Action <ServiceAnnouncement> serviceHandler) { if (!args.Usn.StartsWith("uuid:")) { return; } var colon = args.Usn.IndexOf(':', 5); var usn = colon == -1 ? args.Usn : args.Usn.Substring(0, colon); if (args.Usn.Contains(":device:")) { var type = DeviceType.Parse(args.Service.ServiceType); var device = new DeviceAnnouncement(this, type, usn, args.Service.Locations); deviceHandler(device); } else if (args.Usn.Contains(":service:")) { var type = ServiceType.Parse(args.Service.ServiceType); var service = new ServiceAnnouncement(this, type, usn, args.Service.Locations); serviceHandler(service); } }
void ClientServiceAdded(object sender, Mono.Ssdp.ServiceArgs args) { ClientServiceEvent(args, (device) => { if (!devices.ContainsKey(device)) { OnDeviceAdded(new DeviceEventArgs(device, UpnpOperation.Added)); devices.Add(device, device); } }, (service) => { if (!services.ContainsKey(service)) { OnServiceAdded(new ServiceEventArgs(service, UpnpOperation.Added)); services.Add(service, service); } } ); }
void ClientServiceRemoved(object sender, Mono.Ssdp.ServiceArgs args) { ClientServiceEvent(args, (device) => { if (devices.ContainsKey(device)) { device.Dispose(); OnDeviceRemoved(new DeviceEventArgs(device, UpnpOperation.Removed)); devices.Remove(device); } }, (service) => { if (services.ContainsKey(service)) { service.Dispose(); OnServiceRemoved(new ServiceEventArgs(service, UpnpOperation.Removed)); services.Remove(service); } } ); }
private static void OnServiceOperation(object o, ServiceArgs args) { string action = null; switch (args.Operation) { case ServiceOperation.Added: action = "ADDED "; break; case ServiceOperation.Updated: action = "UPDATED"; break; case ServiceOperation.Removed: action = "REMOVED"; break; } Console.WriteLine ("{0}: [{1}] {2}", action, DateTime.Now, args.Usn); if (verbose && args.Operation != ServiceOperation.Removed) { Console.WriteLine (" Search Type : {0}", args.Service.ServiceType); Console.WriteLine (" Expiration : {0}", args.Service.Expiration); Console.WriteLine (" Locations ({0}) :", args.Service.LocationCount); foreach (string location in args.Service.Locations) { Console.WriteLine (" {0}", location); } Console.WriteLine (); } }