public IPromise Send(IMessage message, CallbackPoint callbackPoint) { message.Domain = securityProvider.GetDomain(message.Identity); var promise = new Promise(Interlocked.Increment(ref lastCallbackKey)); message.RegisterCallbackPoint(new Messaging.CallbackPoint { Key = promise.CallbackKey.Value, Messages = callbackPoint.MessageIdentifiers, ReceiverIdentity = ReceiverIdentifier, ReceiverNodeIdentity = NodeIdentifier.Local() }); callbackHandlers.Push(promise, callbackPoint.MessageIdentifiers); messageRouter.Route(message); return(promise); }
private void SendClientRequests(CancellationToken token) { try { RegisterMessageHub(); foreach (var callbackRegistration in registrationsQueue.GetConsumingEnumerable(token)) { try { var message = (Message)callbackRegistration.Message; if (CallbackRequired(callbackRegistration)) { var promise = callbackRegistration.Promise; var callbackPoint = callbackRegistration.CallbackPoint; message.RegisterCallbackPoint(callbackReceiverNodeIdentity, ReceiverIdentifier.Identity, callbackPoint.MessageIdentifiers, promise.CallbackKey.Value); callbackHandlers.Push(promise, callbackPoint.MessageIdentifiers.Concat(new[] { ExceptionMessageIdentifier })); CallbackRegistered(message); } localRouterSocket.Send(message); SentToRouter(message); } catch (Exception err) { logger.Error(err); } } registrationsQueue.Dispose(); } catch (OperationCanceledException) { } catch (Exception err) { logger.Error(err); } }