/// <summary> /// Start network discovery. The discovery of a node will result in a <see cref="NodeDiscovered" /> event. /// </summary> /// <param name="timeout">The amount of time to wait until discovery responses are ignored</param> /// <remarks>During network discovery nodes may be unresponsive</remarks> public async Task DiscoverNetworkAsync(TimeSpan timeout) { var atCommandFrame = new AtCommandFrameContent(new NetworkDiscoveryCommand()); await ExecuteMultiQueryAsync(atCommandFrame, new Action <AtCommandResponseFrame>( async frame => { var discoveryData = (NetworkDiscoveryResponseData)frame.Content.Data; if (NodeDiscovered != null && discoveryData?.LongAddress != null && !discoveryData.IsCoordinator) { var address = new NodeAddress(discoveryData.LongAddress, discoveryData.ShortAddress); // XBees have trouble recovering from discovery await Task.Delay(500); try { var node = await GetNodeAsync(address); var signalStrength = discoveryData.ReceivedSignalStrengthIndicator?.SignalStrength; NodeDiscovered?.Invoke(this, new NodeDiscoveredEventArgs(discoveryData.Name, signalStrength, node)); } catch (TimeoutException) { /* if we timeout getting the remote node info, no need to bubble up. * We just won't include the node in discovery */ } } }), timeout); }
private async Task OnNodeDiscovered(AtCommandResponseFrame frame, CancellationToken cancellationToken) { var discoveryData = (NetworkDiscoveryResponseData)frame.Content.Data; if (NodeDiscovered == null || discoveryData?.LongAddress == null || discoveryData.IsCoordinator) { return; } var address = new NodeAddress(discoveryData.LongAddress, discoveryData.ShortAddress); // XBees have trouble recovering from discovery await Task.Delay(1000, cancellationToken); try { var node = await GetNodeAsync(address); var signalStrength = discoveryData.ReceivedSignalStrengthIndicator?.SignalStrength; NodeDiscovered?.Invoke(this, new NodeDiscoveredEventArgs(discoveryData.Name, signalStrength, node)); } catch (TimeoutException) { /* if we timeout getting the remote node info, no need to bubble up. * We just won't include the node in discovery */ } }
private void OnNewNodeDiscovered(object sender, NodeEventArgs e) { e.Node.AddedToDiscovery = true; NodeDiscovered?.Invoke(this, e); }
/// <summary> /// Fires and handles the node discovered event. /// </summary> /// <param name="e">The event arguments.</param> protected virtual void OnNodeDiscovered(NodeDiscoveryEventArgs e) { NodeDiscovered?.Invoke(this, e); }
private void OnNewNodeDiscovered(object sender, NodeEventArgs e) { NodeDiscovered?.Invoke(this, e); }