public ComponentCommander(ISpatialOsComponentInternal component, ISpatialCommunicator communicator)
        {
            commandResponseThunksRegistered = new HashSet <Type>();
            requestIdToCallback             = new Dictionary <uint, ICommandCallbackWrapper>();

            this.component    = component;
            this.communicator = communicator;

            dispatcherCallbackKeys = new Collections.List <ulong>();
            dispatcherCallbackKeys.Add(
                communicator.RegisterReserveEntityIdResponse(CreateOnResponseThunk <ReserveEntityIdResponseOp, ReserveEntityIdResult>(
                                                                 op => op.RequestId.Id, op => op.StatusCode, op => op.Message, op => op.EntityId.HasValue ? new ReserveEntityIdResult(op.EntityId.Value) : new Option <ReserveEntityIdResult>())));
            dispatcherCallbackKeys.Add(
                communicator.RegisterCreateEntityResponse(CreateOnResponseThunk <CreateEntityResponseOp, CreateEntityResult>(
                                                              op => op.RequestId.Id, op => op.StatusCode, op => op.Message, op => op.EntityId.HasValue ? new CreateEntityResult(op.EntityId.Value) : new Option <CreateEntityResult>())));
            dispatcherCallbackKeys.Add(
                communicator.RegisterReserveEntityIdsResponse(CreateOnResponseThunk <ReserveEntityIdsResponseOp, ReserveEntityIdsResult>(
                                                                  op => op.RequestId.Id, op => op.StatusCode, op => op.Message, op => new ReserveEntityIdsResult(op.FirstEntityId.Value, op.NumberOfEntityIds))));
            dispatcherCallbackKeys.Add(
                communicator.RegisterDeleteEntityResponse(CreateOnResponseThunk <DeleteEntityResponseOp, DeleteEntityResult>(
                                                              op => op.RequestId.Id, op => op.StatusCode, op => op.Message, op => new DeleteEntityResult(op.EntityId))));
            dispatcherCallbackKeys.Add(
                communicator.RegisterEntityQueryResponse(CreateOnResponseThunk <EntityQueryResponseOp, EntityQueryResult>(
                                                             op => op.RequestId.Id, op => op.StatusCode, op => op.Message, op => new EntityQueryResult(op.ResultCount, op.Result))));

            if (component != null)
            {
                component.OnAuthorityChange += OnComponentAuthorityChange;
            }
        }
Ejemplo n.º 2
0
        /// <inheritdoc />
        public void RegisterInterestedComponent(uint componentId, ISpatialOsComponentInternal component)
        {
            if (RegisteredComponents.ContainsKey(componentId))
            {
                throw new InvalidOperationException("Trying to add duplicate componentId to InterestedComponents");
            }

            RegisteredComponents[componentId] = component;
            TriggerInterestedComponentsPotentiallyChanged();
        }