示例#1
0
        /// <summary>
        /// Pushes a message to a queue
        /// </summary>
        public async Task <HorseResult> PushJson(string queue, object jsonObject, string messageId, bool waitAcknowledge,
                                                 IEnumerable <KeyValuePair <string, string> > messageHeaders = null)
        {
            TypeDeliveryDescriptor descriptor = _client.DeliveryContainer.GetDescriptor(jsonObject.GetType());
            HorseMessage           message    = descriptor.CreateMessage(MessageType.QueueMessage, queue, 0);

            if (!string.IsNullOrEmpty(messageId))
            {
                message.SetMessageId(messageId);
            }

            message.WaitResponse = waitAcknowledge;

            if (messageHeaders != null)
            {
                foreach (KeyValuePair <string, string> pair in messageHeaders)
                {
                    message.AddHeader(pair.Key, pair.Value);
                }
            }

            message.Serialize(jsonObject, _client.JsonSerializer);

            if (string.IsNullOrEmpty(message.MessageId) && waitAcknowledge)
            {
                message.SetMessageId(_client.UniqueIdGenerator.Create());
            }

            return(await _client.WaitResponse(message, waitAcknowledge));
        }
示例#2
0
        /// <summary>
        /// Sends a JSON message by full name
        /// </summary>
        public async Task <HorseResult> SendJson <T>(T model, bool waitAcknowledge, IEnumerable <KeyValuePair <string, string> > messageHeaders = null)
        {
            TypeDeliveryDescriptor descriptor = _client.DeliveryContainer.GetDescriptor(model.GetType());
            HorseMessage           message    = descriptor.CreateMessage(MessageType.DirectMessage, null, null);

            if (string.IsNullOrEmpty(message.Target))
            {
                return(new HorseResult(HorseResultCode.SendError));
            }

            message.WaitResponse = waitAcknowledge;
            message.Serialize(model, _client.JsonSerializer);

            if (messageHeaders != null)
            {
                foreach (KeyValuePair <string, string> pair in messageHeaders)
                {
                    message.AddHeader(pair.Key, pair.Value);
                }
            }

            if (waitAcknowledge)
            {
                return(await _client.SendAndGetAck(message));
            }

            return(await _client.SendAsync(message));
        }
示例#3
0
        /// <summary>
        /// Sends a request to target with a JSON model, waits response
        /// </summary>
        public async Task <HorseResult <TResponse> > RequestJson <TResponse>(string target, ushort?contentType, object model,
                                                                             IEnumerable <KeyValuePair <string, string> > messageHeaders = null)
        {
            TypeDeliveryDescriptor descriptor = _client.DeliveryContainer.GetDescriptor(model.GetType());
            HorseMessage           message    = descriptor.CreateMessage(MessageType.DirectMessage, target, contentType);

            message.Serialize(model, _client.JsonSerializer);

            if (messageHeaders != null)
            {
                foreach (KeyValuePair <string, string> pair in messageHeaders)
                {
                    message.AddHeader(pair.Key, pair.Value);
                }
            }

            HorseMessage responseMessage = await _client.Request(message);

            if (responseMessage.ContentType == 0)
            {
                TResponse response = responseMessage.Deserialize <TResponse>(_client.JsonSerializer);
                return(new HorseResult <TResponse>(response, message, HorseResultCode.Ok));
            }

            return(new HorseResult <TResponse>(default, responseMessage, (HorseResultCode)responseMessage.ContentType));
示例#4
0
        /// <summary>
        /// Publishes a JSON object to a router
        /// </summary>
        public async Task <HorseResult> PublishJson(string routerName,
                                                    object model,
                                                    string messageId        = null,
                                                    bool waitForAcknowledge = false,
                                                    ushort?contentType      = null,
                                                    IEnumerable <KeyValuePair <string, string> > messageHeaders = null)
        {
            TypeDeliveryDescriptor descriptor = _client.DeliveryContainer.GetDescriptor(model.GetType());
            HorseMessage           message    = descriptor.CreateMessage(MessageType.Router, routerName, contentType);

            if (!string.IsNullOrEmpty(messageId))
            {
                message.SetMessageId(messageId);
            }
            else
            {
                message.SetMessageId(_client.UniqueIdGenerator.Create());
            }

            message.WaitResponse = waitForAcknowledge;
            message.Serialize(model, _client.JsonSerializer);

            if (messageHeaders != null)
            {
                foreach (KeyValuePair <string, string> pair in messageHeaders)
                {
                    message.AddHeader(pair.Key, pair.Value);
                }
            }

            return(await _client.WaitResponse(message, waitForAcknowledge));
        }