public ServiceClientRequestSendEndpoint(Task <IMessageClient <TMessage> > messageClient, ClientFactoryContext clientFactoryContext, ConsumeContext consumeContext) { _messageClient = messageClient; _clientFactoryContext = clientFactoryContext; _consumeContext = consumeContext; }
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(); }
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); }
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)); }
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)); }
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 }
public RequestClient(ClientFactoryContext context, IRequestSendEndpoint <TRequest> requestSendEndpoint, RequestTimeout timeout) { _context = context; _requestSendEndpoint = requestSendEndpoint; _timeout = timeout; }
public ClientFactory(ClientFactoryContext context) { _context = context; }
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; }