Пример #1
0
 public ErrorMessageEventArgs(SSSBMessage message, ISSSBService svc, Exception processingException, CancellationToken cancellation)
 {
     this._message             = message;
     this._service             = svc;
     this._processingException = processingException;
     this._cancellation        = cancellation;
 }
Пример #2
0
 public CustomMessageHandler(ISSSBService sssbService, IConnectionManager connectionManager, IStandardMessageHandlers standardMessageHandlers, ILogger <CustomMessageHandler> logger)
 {
     _connectionManager       = connectionManager;
     SSSBService              = sssbService;
     _standardMessageHandlers = standardMessageHandlers;
     _logger = logger;
 }
        public override Task<ServiceMessageEventArgs> HandleMessage(ISSSBService sender, ServiceMessageEventArgs args)
        {
            try
            {
                // after the task is completed, to turn on the Timer again
                lock (ScheduleTimer.Timers)
                {
                    Guid conversationGroup = args.Message.ConversationGroupID;
                    var timer = (from t in BaseSheduleTimer.Timers.Values
                                 where t.ConversationGroup.HasValue && t.ConversationGroup.Value == conversationGroup
                                 select t).SingleOrDefault();

                    if (timer != null)
                    {
                        timer.Start();
                    }
                }
            }
            catch (Exception ex)
            {
                _logger.LogError(ErrorHelper.GetFullMessage(ex));
            }
            finally
            {
                args.TaskCompletionSource.SetResult(_services.EndDialog());
            }

            return Task.FromResult(args);
        }
Пример #4
0
 public SSSBMessageDispatcher(ISSSBService sssbService, ILogger <SSSBMessageDispatcher> logger, IStandardMessageHandlers standardMessageHandlers, IServiceProvider services)
 {
     this._logger                  = logger;
     this._sssbService             = sssbService;
     this._standardMessageHandlers = standardMessageHandlers;
     this._services                = services;
     this._messageHandlers         = new ConcurrentDictionary <string, IMessageHandler <ServiceMessageEventArgs> >();
     this._errorMessageHandlers    = new ConcurrentDictionary <string, IMessageHandler <ErrorMessageEventArgs> >();
 }
Пример #5
0
 public SSSBMessageReaderFactory(ISSSBService service, ISSSBMessageDispatcher messageDispatcher, ILoggerFactory loggerFactory,
                                 IConnectionErrorHandler errorHandler, ISSSBManager manager, IConnectionManager connectionManager)
 {
     this._log                = loggerFactory.CreateLogger(nameof(SSSBMessageReader));
     this._service            = service;
     this._conversation_group = service.ConversationGroup;
     this._messageDispatcher  = messageDispatcher;
     this._errorHandler       = errorHandler;
     this._manager            = manager;
     this._connectionManager  = connectionManager;
 }
Пример #6
0
        public override async Task <ServiceMessageEventArgs> HandleMessage(ISSSBService sender, ServiceMessageEventArgs serviceMessageArgs)
        {
            MessageAtributes messageAtributes = null;

            try
            {
                serviceMessageArgs.Token.ThrowIfCancellationRequested();
                XElement xml = serviceMessageArgs.Message.GetMessageXML();
                messageAtributes = xml.GetMessageAttributes();
            }
            catch (OperationCanceledException)
            {
                serviceMessageArgs.TaskCompletionSource.TrySetCanceled(serviceMessageArgs.Token);
                return(serviceMessageArgs);
            }
            catch (PPSException ex)
            {
                serviceMessageArgs.TaskCompletionSource.TrySetException(ex);
                return(serviceMessageArgs);
            }
            catch (Exception ex)
            {
                this.Logger.LogError(ErrorHelper.GetFullMessage(ex));
                serviceMessageArgs.TaskCompletionSource.TrySetException(new PPSException(ex));
                return(serviceMessageArgs);
            }

            var taskManager = serviceMessageArgs.Services.GetRequiredService <IOnDemandTaskManager>();

            try
            {
                serviceMessageArgs.Token.ThrowIfCancellationRequested();
                var task = await taskManager.GetTaskInfo(messageAtributes.TaskID.Value);

                serviceMessageArgs.TaskID = messageAtributes.TaskID.Value;
                var executorArgs = new ExecutorArgs(taskManager, task, serviceMessageArgs.Message, messageAtributes);
                await ExecuteTask(executorArgs, serviceMessageArgs);
            }
            catch (OperationCanceledException)
            {
                serviceMessageArgs.TaskCompletionSource.TrySetCanceled(serviceMessageArgs.Token);
            }
            catch (PPSException ex)
            {
                serviceMessageArgs.TaskCompletionSource.TrySetException(ex);
            }
            catch (Exception ex)
            {
                Logger.LogCritical(ErrorHelper.GetFullMessage(ex));
                serviceMessageArgs.TaskCompletionSource.TrySetException(new PPSException(ex));
            }

            return(serviceMessageArgs);
        }
Пример #7
0
 public ServiceMessageEventArgs(ServiceMessageEventArgs parentArgs, SSSBMessage message)
 {
     _message      = message ?? parentArgs.Message;
     _service      = parentArgs._service;
     _token        = parentArgs._token;
     _taskID       = parentArgs._taskID;
     _serviceScope = parentArgs._serviceScope;
     _tcs          = parentArgs._tcs;
     _completion   = parentArgs._completion;
     _services     = parentArgs._services;
 }
Пример #8
0
 public ServiceMessageEventArgs(SSSBMessage message, ISSSBService svc, CancellationToken cancellation, IServiceScope serviceScope)
 {
     _message      = message;
     _service      = svc;
     _token        = cancellation;
     _taskID       = -1;
     _serviceScope = serviceScope;
     _tcs          = new TaskCompletionSource <HandleMessageResult>();
     _completion   = _tcs.Task;
     _services     = _serviceScope.ServiceProvider;
 }
Пример #9
0
 public SSSBMessageReader(long taskId, Guid?conversation_group, BaseTasksCoordinator tasksCoordinator, ILogger log,
                          ISSSBService service, ISSSBMessageDispatcher dispatcher,
                          IConnectionErrorHandler errorHandler, ISSSBManager manager, IConnectionManager connectionManager) :
     base(taskId, tasksCoordinator, log)
 {
     this._conversation_group = conversation_group;
     this._service            = service;
     this._dispatcher         = dispatcher;
     this._errorHandler       = errorHandler;
     this._manager            = manager;
     this._connectionManager  = connectionManager;
 }
Пример #10
0
 public abstract Task <T> HandleMessage(ISSSBService sender, T args);
Пример #11
0
        public override async Task <ServiceMessageEventArgs> HandleMessage(ISSSBService sender, ServiceMessageEventArgs serviceMessageArgs)
        {
            MessageAtributes messageAtributes = null;
            SSSBMessage      originalMessage  = null;

            try
            {
                serviceMessageArgs.Token.ThrowIfCancellationRequested();
                XElement envelopeXml         = serviceMessageArgs.Message.GetMessageXML();
                byte[]   originalMessageBody = Convert.FromBase64String(envelopeXml.Element("body").Value);
                XElement originalMessageXml  = originalMessageBody.GetMessageXML();
                messageAtributes               = originalMessageXml.GetMessageAttributes();
                messageAtributes.isDefered     = true;
                messageAtributes.attemptNumber = (int)envelopeXml.Attribute("attemptNumber");
                string messageType    = (string)envelopeXml.Attribute("messageType");
                string serviceName    = (string)envelopeXml.Attribute("serviceName");
                string contractName   = (string)envelopeXml.Attribute("contractName");
                long   sequenceNumber = (long)envelopeXml.Attribute("sequenceNumber");
                MessageValidationType validationType = (MessageValidationType)Enum.Parse(typeof(MessageValidationType), envelopeXml.Attribute("validationType").Value);
                Guid conversationHandle  = Guid.Parse(envelopeXml.Attribute("conversationHandle").Value);
                Guid conversationGroupID = Guid.Parse(envelopeXml.Attribute("conversationGroupID").Value);

                originalMessage = new SSSBMessage(conversationHandle, conversationGroupID, validationType, contractName);
                originalMessage.SequenceNumber = sequenceNumber;
                originalMessage.ServiceName    = serviceName;
                originalMessage.Body           = originalMessageBody;
            }
            catch (OperationCanceledException)
            {
                serviceMessageArgs.TaskCompletionSource.TrySetCanceled(serviceMessageArgs.Token);
                return(serviceMessageArgs);
            }
            catch (PPSException ex)
            {
                serviceMessageArgs.TaskCompletionSource.TrySetException(ex);
                return(serviceMessageArgs);
            }
            catch (Exception ex)
            {
                this.Logger.LogError(ErrorHelper.GetFullMessage(ex));
                serviceMessageArgs.TaskCompletionSource.TrySetException(new PPSException(ex));
                return(serviceMessageArgs);
            }

            OnDemandTaskManager taskManager = serviceMessageArgs.Services.GetRequiredService <OnDemandTaskManager>();

            try
            {
                serviceMessageArgs.Token.ThrowIfCancellationRequested();
                var task = await taskManager.GetTaskInfo(messageAtributes.TaskID.Value);

                serviceMessageArgs.TaskID = messageAtributes.TaskID.Value;
                var executorArgs = new ExecutorArgs(taskManager, task, originalMessage, messageAtributes);
                await ExecuteTask(executorArgs, serviceMessageArgs);
            }
            catch (OperationCanceledException)
            {
                serviceMessageArgs.TaskCompletionSource.TrySetCanceled(serviceMessageArgs.Token);
            }
            catch (PPSException ex)
            {
                serviceMessageArgs.TaskCompletionSource.TrySetException(ex);
            }
            catch (Exception ex)
            {
                Logger.LogCritical(ErrorHelper.GetFullMessage(ex));
                serviceMessageArgs.TaskCompletionSource.TrySetException(new PPSException(ex));
            }

            return(serviceMessageArgs);
        }