public DescriptorMessage RequestDescriptor(ServiceAgent serviceAgent) { var descriptorMessage = new DescriptorMessage(); SendUdpPacket(serviceAgent, descriptorMessage); if (!ReceiveUdpPacket(serviceAgent, out var response)) { return(null); } return(MessagePackSerializer.Deserialize <DescriptorMessage>(response)); }
private bool BuildDeviceReport(ServiceAgent serviceAgent, out DeviceReport deviceReport, out DescriptorMessage requestDescriptor) { requestDescriptor = _udpManager.RequestDescriptor(serviceAgent); if (requestDescriptor == null || !MessageBase.MessageType.Descriptor.Equals(requestDescriptor.Type)) { deviceReport = null; return(false); } var deviceReportNodes = new List <DeviceReportNode>(); if (requestDescriptor.Buttons.Count > 0) { deviceReportNodes.Add(BuildOutputNodes("Buttons", BindingCategory.Momentary, requestDescriptor.Buttons)); } if (requestDescriptor.Axes.Count > 0) { deviceReportNodes.Add(BuildOutputNodes("Axes", BindingCategory.Signed, requestDescriptor.Axes)); } if (requestDescriptor.Deltas.Count > 0) { deviceReportNodes.Add(BuildOutputNodes("Deltas", BindingCategory.Delta, requestDescriptor.Deltas)); } if (requestDescriptor.Events.Count > 0) { deviceReportNodes.Add(BuildOutputNodes("Events", BindingCategory.Event, requestDescriptor.Events)); } var descriptor = new DeviceDescriptor() { DeviceHandle = serviceAgent.Hostname, DeviceInstance = 0 // Unused }; deviceReport = new DeviceReport() { DeviceName = serviceAgent.Hostname, DeviceDescriptor = descriptor, Nodes = deviceReportNodes }; return(true); }