Example #1
0
        private void CompletedReadingPossibleStream(
            ClientMessage.ReadStreamEventsBackwardCompleted completed,
            ProjectionManagementMessage.Command.Post message,
            IEnvelope replyEnvelope)
        {
            int version = -1;

            if (completed.Result == ReadStreamResult.Success)
            {
                version = completed.LastEventNumber + 1;
            }
            if (message.Mode >= ProjectionMode.OneTime)
            {
                BeginWriteProjectionRegistration(
                    message.Name,
                    projectionId =>
                {
                    var initializer = new NewProjectionInitializer(
                        projectionId,
                        message.Name,
                        message.Mode,
                        message.HandlerType,
                        message.Query,
                        message.Enabled,
                        message.EmitEnabled,
                        message.CheckpointsEnabled,
                        message.EnableRunAs,
                        message.RunAs,
                        replyEnvelope);

                    int queueIndex = GetNextWorkerIndex();
                    initializer.CreateAndInitializeNewProjection(
                        this,
                        Guid.NewGuid(),
                        _workers[queueIndex],
                        version: version);
                });
            }
            else
            {
                var initializer = new NewProjectionInitializer(
                    ProjectionQueryId,
                    message.Name,
                    message.Mode,
                    message.HandlerType,
                    message.Query,
                    message.Enabled,
                    message.EmitEnabled,
                    message.CheckpointsEnabled,
                    message.EnableRunAs,
                    message.RunAs,
                    replyEnvelope);

                int queueIndex = GetNextWorkerIndex();
                initializer.CreateAndInitializeNewProjection(this, Guid.NewGuid(), _workers[queueIndex], version: version);
            }
        }
Example #2
0
        private void CINP(
            ProjectionManagementMessage.Command.StartSlaveProjections message,
            SlaveProjectionDefinitions.Definition @group,
            SlaveProjectionCommunicationChannel[] resultArray,
            int queueIndex,
            int arrayIndex,
            Action completed)
        {
            var projectionCorrelationId = Guid.NewGuid();
            var slaveProjectionName     = message.Name + "-" + @group.Name + "-" + queueIndex;

            _awaitingSlaveProjections.Add(
                projectionCorrelationId,
                assigned =>
            {
                var queueWorkerId = _workers[queueIndex];

                resultArray[arrayIndex] = new SlaveProjectionCommunicationChannel(
                    slaveProjectionName,
                    queueWorkerId,
                    assigned.SubscriptionId);
                completed();

                _awaitingSlaveProjections.Remove(projectionCorrelationId);
            });


            var initializer = new NewProjectionInitializer(
                ProjectionQueryId,
                slaveProjectionName,
                @group.Mode,
                @group.HandlerType,
                @group.Query,
                true,
                @group.EmitEnabled,
                @group.CheckpointsEnabled,
                @group.EnableRunAs,
                @group.TrackEmittedStreams,
                @group.RunAs1,
                replyEnvelope: null);

            initializer.CreateAndInitializeNewProjection(
                this,
                projectionCorrelationId,
                _workers[queueIndex],
                true,
                message.MasterWorkerId,
                message.MasterCorrelationId);
        }
        private void PostNewProjection(ProjectionManagementMessage.Command.Post message, IEnvelope replyEnvelope)
        {
            if (message.Mode >= ProjectionMode.OneTime)
            {
                BeginWriteProjectionRegistration(
                    message.Name,
                    projectionId =>
                {
                    var initializer = new NewProjectionInitializer(
                        projectionId,
                        message.Name,
                        message.Mode,
                        message.HandlerType,
                        message.Query,
                        message.Enabled,
                        message.EmitEnabled,
                        message.CheckpointsEnabled,
                        message.EnableRunAs,
                        message.RunAs,
                        replyEnvelope);

                    int queueIndex = GetNextWorkerIndex();
                    initializer.CreateAndInitializeNewProjection(
                        this,
                        Guid.NewGuid(),
                        _workers[queueIndex]);
                });
            }
            else
            {
                var initializer = new NewProjectionInitializer(
                    ProjectionQueryId,
                    message.Name,
                    message.Mode,
                    message.HandlerType,
                    message.Query,
                    message.Enabled,
                    message.EmitEnabled,
                    message.CheckpointsEnabled,
                    message.EnableRunAs,
                    message.RunAs,
                    replyEnvelope);

                int queueIndex = GetNextWorkerIndex();
                initializer.CreateAndInitializeNewProjection(this, Guid.NewGuid(), _workers[queueIndex]);
            }
        }
Example #4
0
        private void CINP(
            ProjectionManagementMessage.StartSlaveProjections message, SlaveProjectionDefinitions.Definition @group,
            SlaveProjectionCommunicationChannel[] resultArray, int queueIndex, int arrayIndex, Action completed)
        {
            var projectionCorrelationId = Guid.NewGuid();
            var slaveProjectionName     = message.Name + "-" + @group.Name + "-" + queueIndex;
            var initializer             = new NewProjectionInitializer(
                ProjectionQueryId, slaveProjectionName, @group.Mode, @group.HandlerType, @group.Query, true,
                @group.EmitEnabled, @group.CheckpointsEnabled, @group.EnableRunAs, @group.RunAs);

            initializer.CreateAndInitializeNewProjection(
                this, managedProjection =>
            {
                resultArray[arrayIndex] = new SlaveProjectionCommunicationChannel(
                    slaveProjectionName, projectionCorrelationId, managedProjection.SlaveProjectionSubscriptionId,
                    _queues[queueIndex]);
                completed();
            }, projectionCorrelationId, queueIndex, true, message.ResultsPublisher, message.MasterCorrelationId);
        }
Example #5
0
        private void InitializeNewProjection(long projectionId, ProjectionManagementMessage.Command.Post message, long version, IEnvelope replyEnvelope)
        {
            try{
                var initializer = new NewProjectionInitializer(
                    projectionId,
                    message.Name,
                    message.Mode,
                    message.HandlerType,
                    message.Query,
                    message.Enabled,
                    message.EmitEnabled,
                    message.CheckpointsEnabled,
                    message.EnableRunAs,
                    message.TrackEmittedStreams,
                    message.RunAs,
                    replyEnvelope);

                int queueIndex = GetNextWorkerIndex();
                initializer.CreateAndInitializeNewProjection(this, Guid.NewGuid(), _workers[queueIndex], version: version);
            }catch (Exception ex) {
                message.Envelope.ReplyWith(new ProjectionManagementMessage.OperationFailed(ex.Message));
            }
        }