public ServiceClientRequestSendEndpoint(Task <IMessageClient <TMessage> > messageClient, ClientFactoryContext clientFactoryContext,
                                         ConsumeContext consumeContext)
 {
     _messageClient        = messageClient;
     _clientFactoryContext = clientFactoryContext;
     _consumeContext       = consumeContext;
 }
Exemplo n.º 2
0
        public ClientRequestHandle(ClientFactoryContext context, IRequestSendEndpoint requestSendEndpoint, TRequest message,
                                   CancellationToken cancellationToken = default, RequestTimeout timeout = default, Guid?requestId = default, TaskScheduler taskScheduler = default)
        {
            _context             = context;
            _message             = message;
            _requestSendEndpoint = requestSendEndpoint;
            _cancellationToken   = cancellationToken;

            var requestTimeout = timeout.HasValue ? timeout : _context.DefaultTimeout.HasValue ? _context.DefaultTimeout.Value : RequestTimeout.Default;

            _timeToLive = requestTimeout;

            _requestId = requestId ?? NewId.NextGuid();

            _taskScheduler = taskScheduler ??
                             (SynchronizationContext.Current == null
                    ? TaskScheduler.Default
                    : TaskScheduler.FromCurrentSynchronizationContext());

            _pipeConfigurator = new PipeConfigurator <SendContext <TRequest> >();
            _sendContext      = new TaskCompletionSource <SendContext <TRequest> >();
            _readyToSend      = new TaskCompletionSource <bool>();
            _responseHandlers = new Dictionary <Type, HandlerConnectHandle>();

            _timeoutTimer = new Timer(TimeoutExpired, this, (long)requestTimeout.Value.TotalMilliseconds, -1L);

            if (cancellationToken != default && cancellationToken.CanBeCanceled)
            {
                _registration = cancellationToken.Register(Cancel);
            }

            _send = SendRequest();

            HandleFault();
        }
Exemplo n.º 3
0
        public ServiceClient(IClientFactory clientFactory, ClientFactoryContext clientFactoryContext, IConsumePipeConnector consumePipeConnector)
        {
            _clientFactory        = clientFactory;
            _consumePipeConnector = consumePipeConnector;

            ClientId = NewId.NextGuid();

            _serviceClientFactory = new ServiceClientFactory(this, clientFactoryContext, clientFactory);

            var cacheSettings = new CacheSettings(1000, TimeSpan.FromSeconds(1), TimeSpan.FromMinutes(30));

            _cache = new GreenCache <IMessageClient>(cacheSettings);
            _index = _cache.AddIndex("messageType", x => x.MessageType);
        }
Exemplo n.º 4
0
        public async Task <IRequestSendEndpoint <TMessage> > GetServiceSendEndpoint(ClientFactoryContext clientFactoryContext, TMessage message,
                                                                                    ConsumeContext consumeContext = default, CancellationToken cancellationToken = default)
        {
            // TODO use the message to generate the hash key

            var correlationId = NewId.NextGuid();

            var endpointInfo = _distribution.GetNode(correlationId.ToByteArray());

            if (endpointInfo == null)
            {
                await Link(cancellationToken).ConfigureAwait(false);

                endpointInfo = _distribution.GetNode(correlationId.ToByteArray());
            }

            var endpointAddress = endpointInfo?.EndpointAddress ?? await _serviceAddress.Task.ConfigureAwait(false);

            return(clientFactoryContext.GetRequestEndpoint <TMessage>(endpointAddress, consumeContext));
        }
Exemplo n.º 5
0
        public async Task <IRequestSendEndpoint <TMessage> > GetServiceSendEndpoint(ClientFactoryContext clientFactoryContext, TMessage message,
                                                                                    ConsumeContext consumeContext = default, CancellationToken cancellationToken = default)
        {
            // TODO use the message to generate the hash key

            // var correlationId = NewId.NextGuid();
            //
            // var endpointInfo = _distribution.GetNode(correlationId.ToByteArray());
            // if (endpointInfo == null)
            // {
            //     await Link(cancellationToken).ConfigureAwait(false);
            //
            //     endpointInfo = _distribution.GetNode(correlationId.ToByteArray());
            // }

            var endpointAddress = _serviceAddress.Task.IsCompletedSuccessfully()
                ? _serviceAddress.Task.Result
                : await _serviceAddress.Task.ConfigureAwait(false);

            // TODO may want to switch this up so that it includes the InstanceContext is a specific node selected
            return(clientFactoryContext.GetRequestEndpoint <TMessage>(endpointAddress, consumeContext));
        }
Exemplo n.º 6
0
        public ClientRequestHandle(ClientFactoryContext context, SendRequestCallback sendRequestCallback, CancellationToken cancellationToken = default,
                                   RequestTimeout timeout = default, Guid?requestId = default, TaskScheduler taskScheduler = default)
        {
            _context             = context;
            _sendRequestCallback = sendRequestCallback;
            _cancellationToken   = cancellationToken;

            var requestTimeout = timeout.HasValue ? timeout : _context.DefaultTimeout.HasValue ? _context.DefaultTimeout.Value : RequestTimeout.Default;

            _timeToLive = requestTimeout;

            _requestId = requestId ?? NewId.NextGuid();

            _taskScheduler = taskScheduler ??
                             (SynchronizationContext.Current == null
                    ? TaskScheduler.Default
                    : TaskScheduler.FromCurrentSynchronizationContext());

            _message                 = new TaskCompletionSource <TRequest>();
            _pipeConfigurator        = new PipeConfigurator <SendContext <TRequest> >();
            _sendContext             = TaskUtil.GetTask <SendContext <TRequest> >();
            _readyToSend             = TaskUtil.GetTask <bool>();
            _cancellationTokenSource = new CancellationTokenSource();
            _responseHandlers        = new Dictionary <Type, HandlerConnectHandle>();
            _accept = new List <string>();

            if (cancellationToken != default && cancellationToken.CanBeCanceled)
            {
                _registration = cancellationToken.Register(Cancel);
            }

            _timeoutTimer = new Timer(TimeoutExpired, this, (long)_timeToLive.Value.TotalMilliseconds, -1L);

            _send = SendRequest();

        #pragma warning disable 4014
            HandleFault();
        #pragma warning restore 4014
        }
Exemplo n.º 7
0
 public RequestClient(ClientFactoryContext context, IRequestSendEndpoint <TRequest> requestSendEndpoint, RequestTimeout timeout)
 {
     _context             = context;
     _requestSendEndpoint = requestSendEndpoint;
     _timeout             = timeout;
 }
Exemplo n.º 8
0
 public ClientFactory(ClientFactoryContext context)
 {
     _context = context;
 }
Exemplo n.º 9
0
 public ServiceClientFactory(IServiceClient serviceClient, IClientFactory clientFactory)
 {
     _clientFactory = clientFactory;
     _context       = _clientFactory.Context;
     _serviceClient = serviceClient;
 }
 public ServiceClientRequestSendEndpoint(Task <IServiceClientMessageCache <TMessage> > messageClient, ClientFactoryContext clientFactoryContext,
                                         ConsumeContext consumeContext)
     : this(messageClient, clientFactoryContext)
 {
     _consumeContext = consumeContext;
 }
 public ServiceClientRequestSendEndpoint(Task <IServiceClientMessageCache <TMessage> > messageClient, ClientFactoryContext clientFactoryContext)
 {
     _messageClient        = messageClient;
     _clientFactoryContext = clientFactoryContext;
 }