/// <summary>
        /// Subscription for mission modification
        /// </summary>
        /// <param name="es">Subscriptiob object</param>
        /// <param name="callback">callback for telemetry subscription</param>
        public void SubscribeMission(ObjectModificationSubscription es, System.Action <Mission> callback)
        {
            UnsubscribeAll();
            _objectNotificationSubscription = es;
            _eventSubscriptionWrapper.ObjectModificationSubscription = _objectNotificationSubscription;

            SubscribeEventRequest requestEvent = new SubscribeEventRequest();

            requestEvent.ClientId = _connect.AuthorizeHciResponse.ClientId;

            requestEvent.Subscription = _eventSubscriptionWrapper;

            var responce = _connect.Executor.Submit <SubscribeEventResponse>(requestEvent);
            var subscribeEventResponse = responce.Value;

            SubscriptionToken st = new SubscriptionToken(subscribeEventResponse.SubscriptionId, _getObjectNotificationHandler <Mission>(
                                                             (token, exception, mission) =>
            {
                if (token == ModificationType.MT_UPDATE)
                {
                    _messageReceived(mission);
                }
            }
                                                             ), _eventSubscriptionWrapper);

            _notificationListener.AddSubscription(st);
            tokens.Add(st);
            _callback = callback;
        }
示例#2
0
        /// <summary>
        /// Example how to activate subscription for server log messages
        /// </summary>
        /// <param name="es"></param>
        /// <param name="callback"></param>
        public void SubscribeLog(ObjectModificationSubscription es, System.Action <VehicleLogEntry> callback)
        {
            _callback = callback;
            _objectNotificationSubscription = es;
            _eventSubscriptionWrapper.ObjectModificationSubscription = _objectNotificationSubscription;

            SubscribeEventRequest requestEvent = new SubscribeEventRequest();

            requestEvent.ClientId = _connect.AuthorizeHciResponse.ClientId;

            requestEvent.Subscription = _eventSubscriptionWrapper;

            var responce = _connect.Executor.Submit <SubscribeEventResponse>(requestEvent);
            var subscribeEventResponse = responce.Value;

            SubscriptionToken st = new SubscriptionToken(subscribeEventResponse.SubscriptionId, _getObjectNotificationHandler <VehicleLogEntry>(
                                                             (token, exception, log) =>
            {
                if (token == ModificationType.MT_CREATE)
                {
                    _oneMessageReceived(log);
                }
            }
                                                             ), _eventSubscriptionWrapper);

            _notificationListener.AddSubscription(st);
            _callback = callback;
        }
        /// <summary>
        /// Example how to activate subscription o vehicle modifications
        /// </summary>
        /// <param name="es">ObjectModification with vehicle object id</param>
        /// <param name="callBack">callback with received event</param>
        public void SubscribeVehicle(ObjectModificationSubscription es, System.Action <Vehicle> callBack)
        {
            _objectNotificationSubscription = es;
            _eventSubscriptionWrapper.ObjectModificationSubscription = _objectNotificationSubscription;

            SubscribeEventRequest requestEvent = new SubscribeEventRequest();

            requestEvent.ClientId = _connect.AuthorizeHciResponse.ClientId;

            requestEvent.Subscription = _eventSubscriptionWrapper;

            var responce = _connect.Executor.Submit <SubscribeEventResponse>(requestEvent);
            var subscribeEventResponse = responce.Value;

            SubscriptionToken st = new SubscriptionToken(subscribeEventResponse.SubscriptionId, _getObjectNotificationHandler <Vehicle>(
                                                             (token, exception, vehicle) =>
            {
                if (token == ModificationType.MT_UPDATE && _vehicleList.ContainsKey(vehicle.Id))
                {
                    _messageReceived(vehicle, _vehicleList[vehicle.Id]);
                }
            }
                                                             ), _eventSubscriptionWrapper);

            _notificationListener.AddSubscription(st);
            tokens.Add(st);
            AddVehicleIdTolistener(es.ObjectId, callBack);
        }
示例#4
0
        public void SubscribeVehicle(System.Action <ClientVehicleDTO, ModificationTypeDTO> callBack)
        {
            var subscription = new ObjectModificationSubscription();

            subscription.ObjectType = "Vehicle";

            _eventSubscriptionWrapper.ObjectModificationSubscription = subscription;

            SubscribeEventRequest requestEvent = new SubscribeEventRequest();

            requestEvent.ClientId = _connectionService.ClientId;

            requestEvent.Subscription = _eventSubscriptionWrapper;

            var responce = _connectionService.Submit <SubscribeEventResponse>(requestEvent);

            if (responce.Exception != null)
            {
                logger.Error(responce.Exception);
                throw new Exception("Failed to subscribe on vehicle modifications. Try again or see log for more details.");
            }
            var subscribeEventResponse = responce.Value;

            SubscriptionToken st = new SubscriptionToken(subscribeEventResponse.SubscriptionId, _getObjectNotificationHandler <Vehicle>(
                                                             (token, vehicleId, vehicle) =>
            {
                if (token == ModificationType.MT_UPDATE || token == ModificationType.MT_CREATE)
                {
                    var newCvd = new ClientVehicleDTO()
                    {
                        VehicleId  = vehicle.Id,
                        Name       = vehicle.Name,
                        TailNumber = vehicle.SerialNumber
                    };
                    _messageReceived(callBack, newCvd, ModificationTypeDTO.UPDATED);
                }
                else
                {
                    var newCvd = new ClientVehicleDTO()
                    {
                        VehicleId  = vehicleId,
                        Name       = string.Empty,
                        TailNumber = string.Empty
                    };
                    _messageReceived(callBack, newCvd, ModificationTypeDTO.DELETED);
                }
            }), _eventSubscriptionWrapper);

            _connectionService.NotificationListener.AddSubscription(st);
            tokens.Add(st);
        }
        public void SubscribeVehicle(System.Action <ClientVehicleDto, Enums.ModificationType> callBack)
        {
            var subscription = new ObjectModificationSubscription
            {
                ObjectType = "Vehicle"
            };

            _eventSubscriptionWrapper.ObjectModificationSubscription = subscription;

            SubscribeEventRequest requestEvent = new SubscribeEventRequest
            {
                ClientId = _connectionService.GetClientId(),

                Subscription = _eventSubscriptionWrapper
            };

            var responce = _connectionService.Submit <SubscribeEventResponse>(requestEvent);

            if (responce.Exception != null)
            {
                logger.Error(responce.Exception);
                throw new InvalidOperationException("Failed to subscribe on vehicle modifications. Try again or see log for more details.");
            }
            var subscribeEventResponse = responce.Value;

            SubscriptionToken st = new SubscriptionToken(subscribeEventResponse.SubscriptionId, getObjectNotificationHandler <Vehicle>(
                                                             (token, vehicleId, vehicle) =>
            {
                if (token == Sdk.Protocol.Encoding.ModificationType.MT_UPDATE || token == Sdk.Protocol.Encoding.ModificationType.MT_CREATE)
                {
                    var newCvd = new ClientVehicleDto()
                    {
                        VehicleId = vehicle.Id,
                        Name      = vehicle.Name
                    };
                    messageReceived(callBack, newCvd, Enums.ModificationType.UPDATED);
                }
                else
                {
                    var newCvd = new ClientVehicleDto()
                    {
                        VehicleId = vehicleId,
                        Name      = string.Empty
                    };
                    messageReceived(callBack, newCvd, Enums.ModificationType.DELETED);
                }
            }), _eventSubscriptionWrapper);

            _connectionService.NotificationListener.AddSubscription(st);
            tokens.Add(st);
        }
示例#6
0
        /// <summary>
        /// Create subscribtion to change the selected vehicle
        /// </summary>
        /// <param name="handler">Handler for new vehicle tail number</param>
        /// <returns>Returns subscription id or null if error is raised</returns>
        public int SubscribeSelectedVehicleChange(System.Action <ClientVehicleDto> handler)
        {
            //get selected vehicle id from mission preferences
            ObjectModificationSubscription missionPrefSubscription = new ObjectModificationSubscription
            {
                ObjectType = InvariantNames.GetInvariantName <MissionPreference>()
            };

            EventSubscriptionWrapper subscriptionWrapper = new EventSubscriptionWrapper
            {
                ObjectModificationSubscription = missionPrefSubscription
            };

            var response = _connectionService.Execute <SubscribeEventResponse>(
                new SubscribeEventRequest()
            {
                ClientId     = _connectionService.GetClientId(),
                Subscription = subscriptionWrapper,
            });

            _connectionService.NotificationListener.AddSubscription(new SubscriptionToken(response.SubscriptionId,
                                                                                          (notif) =>
            {
                var prefs = notif.Event.ObjectModificationEvent.Object.MissionPreference;
                if (prefs.Name.Equals(PREF_NAME))
                {
                    int?id = missionPreferenceToVehicleId(prefs, _connectionService.GetUser().Id);
                    if (id != null)
                    {
                        var v = getVehicleById(id.Value);
                        if (v != null)
                        {
                            handler(new ClientVehicleDto()
                            {
                                Name      = v.Name,
                                VehicleId = v.Id
                            });
                            return;
                        }
                    }
                    handler(null);
                }
            },
                                                                                          subscriptionWrapper));
            return(response.SubscriptionId);
        }
示例#7
0
        public MainViewModel(VehicleService vs, VehicleListener vl, MapViewModel mp, TelemetryListener tl, CommandService cs, MissionService ms, RouteService rs, VehicleCommand vc)
        {
            Mapper.Initialize(cfg =>
            {
                cfg.CreateMap <ServiceTelemetryDTO, ClientTelemetry>();
            });

            logger.LogInfoMessage("Main window initialized");
            MapViewModel    = mp;
            _vehicleService = vs;
            _commandService = cs;
            _missionService = ms;
            _routeService   = rs;
            _vehicleCommand = vc;
            try
            {
                ClientVehicle                   = new ClientVehicle();
                ClientVehicle.Vehicle           = vs.GetVehicleByName(Settings.Default.UgcsDroneProfileName);
                ClientVehicle.Telemetry.Vehicle = ClientVehicle.Vehicle;
                var subscription = new ObjectModificationSubscription();
                subscription.ObjectId   = ClientVehicle.Vehicle.Id;
                subscription.ObjectType = "Vehicle";
                _commandService.TryAcquireLock(ClientVehicle.Vehicle.Id);
                tl.AddVehicleIdTolistener(ClientVehicle.Vehicle.Id, TelemetryCallBack);
                vl.SubscribeVehicle(subscription, (e) =>
                {
                    //Subscribe vehicle changes
                });
                MapViewModel.Init(ClientVehicle);
                NotifyOfPropertyChange(() => MissionName);
                NotifyOfPropertyChange(() => RouteName);
                NotifyOfPropertyChange(() => VehicleName);
            }
            catch (Exception e)
            {
                MessageBox.Show(e.Message);
                Application.Current.Shutdown();
            }
        }
示例#8
0
        /// <summary>
        /// Create subscribtion to change the selected vehicle
        /// </summary>
        /// <param name="handler">Handler for new vehicle tail number</param>
        /// <returns>Returns subscription id or null if error is raised</returns>
        public int SubscribeSelectedVehicleChange(System.Action <string> handler)
        {
            //get selected vehicle id from mission preferences
            int result = 0;
            ObjectModificationSubscription missionPrefSubscription = new ObjectModificationSubscription();

            missionPrefSubscription.ObjectType = InvariantNames.GetInvariantName <MissionPreference>();

            EventSubscriptionWrapper subscriptionWrapper = new EventSubscriptionWrapper();

            subscriptionWrapper.ObjectModificationSubscription = missionPrefSubscription;

            var response = _connectionService.Execute <SubscribeEventResponse>(
                new SubscribeEventRequest()
            {
                ClientId     = _connectionService.ClientId,
                Subscription = subscriptionWrapper,
            });

            result = response.SubscriptionId;
            _connectionService.NotificationListener.AddSubscription(new SubscriptionToken(response.SubscriptionId,
                                                                                          (notif) =>
            {
                var prefs = notif.Event.ObjectModificationEvent.Object.MissionPreference;
                int?id    = missionPreferenceToVehicleId(prefs, _connectionService.User.Id);
                if (id != null)
                {
                    string tailNum = getVehicleTailNumberById(id.Value);
                    if (tailNum != null)
                    {
                        handler(tailNum);
                    }
                }
            },
                                                                                          subscriptionWrapper));
            return(response.SubscriptionId);
        }