Пример #1
0
 public IHttpClientBuilder UseRequestHandler <THandler>(params object[] args)
     where THandler : HttpMessageHandler
 {
     FinalHandlerDef = new HandlerDefinition {
         HandlerType = typeof(THandler), CtorArgs = args
     };
     return(this);
 }
Пример #2
0
    public LinkHandler(HandlerDefinition definition, ISettings settings, Git git)
    {
        _definition = definition;
        _settings   = settings;
        _git        = git;

        if (definition is PrivateHandlerDefinition privateHandlerDefinition)
        {
            _server = new RemoteServer(async() => await _settings.GetServersAsync(privateHandlerDefinition.ServerSettingsKey));
        }
        else
        {
            _server = new RemoteServer(((PublicHandlerDefinition)definition).Servers);
        }
    }
Пример #3
0
        /// <summary>
        /// Transport has received a message!
        /// </summary>
        private void m_transport_MessageReceived(object sender, Hl7MessageReceivedEventArgs e)
        {
            IMessagePersistenceService messagePersister = ApplicationServiceContext.Current.GetService(typeof(IMessagePersistenceService)) as IMessagePersistenceService;

            // Find the message that supports the type
            Terser msgTerser   = new Terser(e.Message);
            string messageType = String.Format("{0}^{1}", msgTerser.Get("/MSH-9-1"), msgTerser.Get("/MSH-9-2"));
            string messageId   = msgTerser.Get("/MSH-10");

            // Find a handler
            HandlerDefinition handler        = m_serviceDefinition.MessageHandlers.Find(o => o.Types.Exists(a => a.Name == messageType)),
                              defaultHandler = m_serviceDefinition.MessageHandlers.Find(o => o.Types.Exists(a => a.Name == "*"));

            if (handler != null && handler.Types.Find(o => o.Name == messageType).IsQuery ||
                defaultHandler != null && defaultHandler.Types.Find(o => o.Name == "*").IsQuery)
            {
                messagePersister = null;
            }

            // Have we already processed this message?
            MessageState msgState = MessageState.New;

            if (messagePersister != null)
            {
                msgState = messagePersister.GetMessageState(messageId);
            }

            switch (msgState)
            {
            case MessageState.New:

                if (messagePersister != null)
                {
                    messagePersister.PersistMessage(messageId, CreateMessageStream(e.Message));
                }

                if (handler == null && defaultHandler == null)
                {
                    throw new InvalidOperationException(String.Format("Cannot find message handler for '{0}'", messageType));
                }

                e.Response = (handler ?? defaultHandler).Handler.HandleMessage(e);
                if (e.Response == null)
                {
                    throw new InvalidOperationException("Couldn't process message");
                }

                msgTerser = new Terser(e.Response);
                if (messagePersister != null)
                {
                    messagePersister.PersistResultMessage(msgTerser.Get("/MSH-10"), messageId, CreateMessageStream(e.Response));
                }
                break;

            case MessageState.Active:
                throw new InvalidOperationException("Message already in progress");

            case MessageState.Complete:
                NHapi.Base.Parser.PipeParser pp = new NHapi.Base.Parser.PipeParser();
                using (var rdr = new StreamReader(messagePersister.GetMessageResponseMessage(messageId)))
                    e.Response = pp.Parse(rdr.ReadToEnd());
                break;
            }
        }