Exemple #1
0
        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;
            }
        }
Exemple #2
0
        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;
            }
            }
        }