示例#1
0
        ProcessTransportMessage <TTransportMessage, TDomainMessage>(
            ITransportToDomainMessageTransform <TTransportMessage,
                                                TDomainMessage> messageTransform,
            ServiceProvider rootServiceProvider,
            IIocManagement <TTransportMessage> iocManagement,
            TTransportMessage transportMessage)
        {
            Option <TDomainMessage> domainMessageO =
                messageTransform.ToDomainMessage(transportMessage);

            OptionAsync <Either <IPipelineError, Tuple <TTransportMessage, TDomainMessage> > > result2 =
                domainMessageO.MapAsync(d =>
                                        HandleDomainMessage(
                                            rootServiceProvider,
                                            iocManagement,
                                            transportMessage,
                                            d));

            Task <Either <
                      IPipelineError,
                      Tuple <TTransportMessage, TDomainMessage> > >
            res = result2.Match(
                sm => sm,
                () => Prelude.Left((IPipelineError) new ErrorParsingTransportMessage()));

            return(res);
        }
示例#2
0
        Run <TTransportMessage, TDomainMessage>(
            IMessageSource <TTransportMessage> messageSource,
            ITransportToDomainMessageTransform <TTransportMessage, TDomainMessage> messageTransform,
            ServiceProvider rootServiceProvider,
            IIocManagement <TTransportMessage> iocManagement
            )
        {
            Option <TTransportMessage> transportMessageO =
                await messageSource.Poll();

            Option <Either <IPipelineError, Tuple <TTransportMessage, TDomainMessage> > >
            processMessageResult =
                await transportMessageO.MapAsync(
                    transportMessage =>
                    ProcessTransportMessage(
                        messageTransform,
                        rootServiceProvider,
                        iocManagement,
                        transportMessage)).ToOption();

            Either <IPipelineError, Tuple <TTransportMessage, TDomainMessage> >
            resFinal = processMessageResult.Match(
                mpr => mpr,
                () => Prelude.Left <IPipelineError>(new NoTransportMessageAvailable()));

            resFinal.IfRight(m => messageSource.Ack(m.Item1));

            return(resFinal);
        }