/// <summary> /// Handles selection changed event of device list /// </summary> /// <param name="sender">Event sender</param> /// <param name="e">Event argument</param> private void lvDevices_SelectedIndexChanged(object sender, EventArgs e) { if (lvDevices.SelectedItems.Count > 0) { ClearServiceInfo(); ListViewItem item = lvDevices.SelectedItems[0]; DeviceDiscoveryData device = (DeviceDiscoveryData)item.Tag; tbEpAddress.Text = device.UUID; tbDeviceIP.Text = device.EndPointAddress; cmbServiceAddress.Items.Clear(); foreach (string s in device.ServiceAddresses) { cmbServiceAddress.Items.Add(s); } cmbServiceAddress.Text = device.ServiceAddresses.Count > 0 ? device.ServiceAddresses[0] : string.Empty; tbType.Text = device.Type; string[] scopes = device.Scopes.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); tbScopes.Text = string.Empty; foreach (string scope in scopes) { tbScopes.Text += scope + "\r\n"; } tbMetadataVersion.Text = device.MetadataVersion.ToString(); } }
/// <summary> /// Handles selection changed event of device list /// </summary> /// <param name="sender">Event sender</param> /// <param name="e">Event argument</param> private void lvDevices_SelectedIndexChanged(object sender, EventArgs e) { if (lvDevices.SelectedItems.Count > 0) { ClearServiceInfo(); ListViewItem item = lvDevices.SelectedItems[0]; DeviceDiscoveryData device = (DeviceDiscoveryData)item.Tag; ShowDeviceDiscoveryData(device); } }
/// <summary> /// Adds device to device list /// </summary> /// <param name="device">Device to be added</param> private void AddDeviceToList(DeviceDiscoveryData device) { IPAddress devAddress = null; IPAddress.TryParse(device.EndPointAddress, out devAddress); if (devAddress != null) { ListViewItem deviceItem = null; for (int i = 0; i < lvDevices.Items.Count; i++) { DeviceDiscoveryData listDev = (DeviceDiscoveryData)lvDevices.Items[i].Tag; IPAddress address = IPAddress.Parse(listDev.EndPointAddress); int res = Compare(devAddress.GetAddressBytes(), address.GetAddressBytes()); if (res == 0 && listDev.UUID == device.UUID) { deviceItem = lvDevices.Items[i]; break; } } if (deviceItem == null) { var scopes = device.Scopes.Split(' '); var hardwarePrefix = "onvif://www.onvif.org/hardware/"; var hardware = ""; if (scopes.Where(e => e.StartsWith(hardwarePrefix)).Any()) { hardware = scopes.Where(e => e.StartsWith(hardwarePrefix)).First().Substring(hardwarePrefix.Count()); } var manufacturerPrefix = "onvif://www.onvif.org/manufacturer/"; var manufacturer = ""; if (scopes.Where(e => e.StartsWith(manufacturerPrefix)).Any()) { manufacturer = scopes.Where(e => e.StartsWith(manufacturerPrefix)).First().Substring(manufacturerPrefix.Count()); } deviceItem = new ListViewItem(new string[] { device.EndPointAddress, device.UUID, hardware, manufacturer }); lvDevices.Items.Add(deviceItem); lvDevices.Sort(); } deviceItem.Tag = device; //renew properties if (_unicastProbing) { ShowDeviceDiscoveryData(device); } if (!deviceItem.Selected && _autoSelectDevice) { lvDevices.SelectedItems.Clear(); deviceItem.Selected = true; lvDevices.Refresh(); } } }
/// <summary> /// Adds device to device list /// </summary> /// <param name="device">Device to be added</param> private void AddDeviceToList(DeviceDiscoveryData device) { IPAddress devAddress = null; IPAddress.TryParse(device.EndPointAddress, out devAddress); if (devAddress != null) { ListViewItem deviceItem = null; int index = lvDevices.Items.Count; for (int i = 0; i < lvDevices.Items.Count; i++) { DeviceDiscoveryData listDev = (DeviceDiscoveryData)lvDevices.Items[i].Tag; IPAddress address = IPAddress.Parse(listDev.EndPointAddress); int res = Compare(devAddress.GetAddressBytes(), address.GetAddressBytes()); if (res < 0) { //find proper position to insert item index = i; break; } else if (res == 0) { deviceItem = lvDevices.Items[i]; break; } } if (deviceItem == null) { deviceItem = new ListViewItem(new string[] { device.EndPointAddress, device.UUID }); lvDevices.Items.Insert(index, deviceItem); } deviceItem.Tag = device; //renew properties if (_unicastProbing) { ShowDeviceDiscoveryData(device); } if (!deviceItem.Selected && _autoSelectDevice) { lvDevices.SelectedItems.Clear(); deviceItem.Selected = true; lvDevices.Refresh(); } } }
void ShowDeviceDiscoveryData(DeviceDiscoveryData device) { tbEpAddress.Text = device.UUID; tbDeviceIP.Text = device.EndPointAddress; cmbServiceAddress.Items.Clear(); foreach (string s in device.ServiceAddresses) { cmbServiceAddress.Items.Add(s); } cmbServiceAddress.Text = device.ServiceAddresses.Count > 0 ? device.ServiceAddresses[0] : string.Empty; tbType.Text = device.Type; string[] scopes = device.Scopes.Split(new char[] { ' ' }, StringSplitOptions.RemoveEmptyEntries); tbScopes.Text = string.Empty; foreach (string scope in scopes) { tbScopes.Text += scope + "\r\n"; } tbMetadataVersion.Text = device.MetadataVersion.ToString(); }
/// <summary> /// Handles device discovered event /// </summary> /// <param name="device">Discovered device</param> private void OnDeviceDiscovered(DeviceDiscoveryData device) { _probeAnswered = true; Invoke(new Action <DeviceDiscoveryData>(AddDeviceToList), new object[] { device }); }