protected override async Task HandleAsync(PulseReport request, IList <OutgoingMessage> outgoingMessages, CancellationToken cToken) { var node = await _findNodeQuery.ByRfIdAsync(request.FromNodeId); if (node == null) { throw new NodeNotFoundException(request.FromNodeId); } await _touchNode.TouchAsync(node, request.Rssi); }
protected override async Task HandleAsync(NodeInfoReport request, IList <OutgoingMessage> outgoingMessages, CancellationToken cToken) { var node = await _findNodeQuery.ByRfIdAsync(request.FromNodeId); if (node == null) { throw new NodeNotFoundException(request.FromNodeId); } await _touchNode.TouchAsync(node, request.Rssi); node.LatestValues.SendErrorCount = request.SendErrorCount; var nodeInfo = new NodeHealthHistory { SendErrorCount = request.SendErrorCount }; node.LatestValues.VIn = request.Voltage; nodeInfo.VIn = request.Voltage; node.CommunicationHistory.Add(nodeInfo); }
protected override async Task HandleAsync(NodeStartedReport request, IList <OutgoingMessage> outgoingMessages, CancellationToken cToken) { var node = await _findNodeQuery.BySignatureAsync(request.Signature, NodeInclude.Facts | NodeInclude.Config); if (node == default(Node)) { Logger.Debug("Node not found based on signature {0}. A node will be created.", request.Signature); var rfId = await _rfIdGenerationStrategy.FindAvailableRfAddressAsync( Constants.NetworkId, cToken, request.NeedNewRfAddress?(byte)0 : request.FromNodeId); node = await _createNodeCommand.ExecuteAsync(request.Signature, rfId); } else if (request.NeedNewRfAddress) { Logger.Debug("Node was found based on signature {0} but a new rfAddress was requestd", request.Signature); node.RfAddress = await _rfIdGenerationStrategy.FindAvailableRfAddressAsync(Constants.NetworkId, cToken); } if (node.RfAddress != request.FromNodeId) { Logger.Debug("Node with signature {1} received a new rfAddress ({0}).", node.RfAddress, node.Signature); outgoingMessages.Add(new NodeConfigCommand { ToNodeId = request.FromNodeId, Signature = request.Signature, NewRfAddress = node.RfAddress }); } else { outgoingMessages.Add(new NodeConfigCommand { ToNodeId = request.FromNodeId, Signature = request.Signature, }); } node.Configuration.Version = $"{request.Major}.{request.Minor}"; node.LatestValues.StartupTime = _timeProvider.UtcNow; node.AddLog("STRT"); await _touchNode.TouchAsync(node, request.Rssi); }