Example #1
0
        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);
        }
Example #2
0
        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);
            }
        }