示例#1
0
		private void DownloadDeviceCompleted(object sender, DownloadDataCompletedEventArgs e)
		{
			object[] P = (object[])e.UserState;
			DeviceDescriptionEventHandler Callback = (DeviceDescriptionEventHandler)P[0];
			string BaseUrl = (string)P[1];
			object State = P[2];
			DeviceDescriptionEventArgs e2;

			if (e.Error != null)
				e2 = new DeviceDescriptionEventArgs(e.Error, this, State);
			else
			{
				try
				{
					XmlDocument Xml = new XmlDocument();
					Xml.Load(new MemoryStream(e.Result));

					DeviceDescriptionDocument Device = new DeviceDescriptionDocument(Xml, this, BaseUrl);
					e2 = new DeviceDescriptionEventArgs(Device, this, State);
				}
				catch (Exception ex)
				{
					this.RaiseOnError(ex);
					e2 = new DeviceDescriptionEventArgs(e.Error, this, State);
				}
				finally
				{
					WebClient Client = sender as WebClient;
					if (Client != null)
						Client.Dispose();
				}
			}


			try
			{
				Callback(this, e2);
			}
			catch (Exception ex)
			{
				this.RaiseOnError(ex);
			}
		}
		private void DeviceRetrieved(object Sender, DeviceDescriptionEventArgs e)
		{
			try
			{
				if (e.DeviceDescriptionDocument != null)
				{
					UPnPService Service = e.DeviceDescriptionDocument.GetService("urn:schemas-upnp-org:service:WANIPConnection:1");
					if (Service == null)
					{
						Service = e.DeviceDescriptionDocument.GetService("urn:schemas-upnp-org:service:WANIPConnection:2");
						if (Service == null)
							return;
					}

					Service.StartGetService(this.ServiceRetrieved, e.State);
				}
			}
			catch (Exception ex)
			{
				this.exception = ex;
				this.State = PeerToPeerNetworkState.Error;
			}
		}