public async Task <int?> GetSelectedVehicleIdAsync() { _logger.LogInfoMessage("GetSelectedVehicleIdAsync requested"); int?result = null; var r = new Regex(SELECTION_REGEX_PATTERN, RegexOptions.IgnoreCase); var missionPreferencesRequestTask = Task <List <MissionPreference> > .Factory.StartNew(() => _connection.GetMissionPreferences(null)); try { var missionPreferences = await missionPreferencesRequestTask; _logger.LogDebugMessage($"GetSelectedVehicleIdAsync response: {missionPreferences}"); if (missionPreferences == null) { return(null); } _logger.LogDebugMessage($"GetSelectedVehicleIdAsync response: {missionPreferences.Count} missionPreferences"); foreach (var missionPreference in missionPreferences) { if (!isUserMission(missionPreference)) { continue; } var selectedVehicleInMissionPref = getSelectedVehicleIdFromMissionPref(missionPreference); if (selectedVehicleInMissionPref.HasValue) { result = selectedVehicleInMissionPref; } break; } _logger.LogInfoMessage($"GetSelectedVehicleIdAsync result: {result}"); return(result); } catch (Exception e) { _logger.LogException(e); throw; } }
public static Task <IPTZMessage> SendMessage(IPTZMessage message) { _logger.LogDebugMessage($"SendMessage => {message}"); _sendMessageTaskCompletionSource = new TaskCompletionSource <IPTZMessage>(); _cts = new CancellationTokenSource(new TimeSpan(0, 0, 15)); _cts.Token.Register(() => _sendMessageTaskCompletionSource?.TrySetCanceled()); _transport.SendMessage(message); return(_sendMessageTaskCompletionSource.Task); }
private void transport_MessageReceived(object sender, byte[] messageData) { var pelcoMessage = PelcoDEMessage.FromBytes(messageData); _logger.LogInfoMessage($"Pelco message received => {pelcoMessage?.ToString() ?? "<null>"}"); if (pelcoMessage == null) { return; } var settings = _settingsManager.GetAppSettings(); var responseType = _responseDecoder.GetResponseType(pelcoMessage); _logger.LogInfoMessage($"Pelco response type => {responseType?.ToString() ?? "<null>"}"); switch (responseType) { case null: return; case PelcoDEMessageType.SetPanCompleteResponse: _panTaskCompletionSource?.TrySetResult(true); return; case PelcoDEMessageType.RequestPanResponse: { var panAngleToCoordinatesFactor = settings.PTZPanAngleToCoordinateFactor; var angle = PelcoResponseDecoder.GetUInt16(pelcoMessage) / panAngleToCoordinatesFactor / 100; _logger.LogDebugMessage($"Pelco RequestPanResponse received => angle: {angle}"); _panRequestCTS.Dispose(); _requestPanTaskCompletionSource?.TrySetResult(angle); return; } case PelcoDEMessageType.RequestTiltResponse: { var tiltAngleToCoordinatesFactor = settings.PTZTiltAngleToCoordinateFactor; var angle = PelcoResponseDecoder.GetUInt16(pelcoMessage) / tiltAngleToCoordinatesFactor / 100; _logger.LogDebugMessage($"Pelco RequestTiltResponse received => angle: {angle}"); _tiltRequestCTS.Dispose(); _requestTiltTaskCompletionSource?.TrySetResult(angle); return; } } }