Ejemplo n.º 1
0
        public static Rv.Message ToRvMessge(IReadOnlyMessage msg, Uri source)
        {
            Contract.Requires(msg != null);
            Contract.Requires(source != null);

            var rvm = new Rv.Message();

            if (msg.Subject != null)
            {
                rvm.SendSubject = ToRvSubject(msg.Subject);
            }
            if (msg.HasHeaders)
            {
                if (msg.Headers.ReplyTo != null)
                {
                    AddReplyTo(source, rvm, msg.Headers.ReplyTo);
                }
                if (msg.Headers.Priority.HasValue)
                {
                    AddPriority(msg, rvm);
                }
                foreach (KeyValuePair <string, object> pair in msg.Headers)
                {
                    AddRvField(rvm, pair.Key, pair.Value);
                }
            }
            if (msg.Body != null)
            {
                AddRvField(rvm, Fields.Body, msg.Body);
            }
            return(rvm);
        }
Ejemplo n.º 2
0
        private void OnMsmqPing(IReadOnlyMessage msg)
        {
            if (++pings % 1000 == 0)
            {
                Console.WriteLine($"{pings} pings of {msg.GetType().Name}");
            }
            msg.Acknowledge();
            msg.Dispose();

            //Thread.Sleep(delay);
            using (var reply = new Messaging.Message {
                Subject = "pong", Body = "world"
            })
                rvMessaging.Send(reply);
        }
Ejemplo n.º 3
0
        public void can_receive_a_message()
        {
            var rvt = Rv.IntraProcessTransport.UniqueInstance;

            Message input = HelloWorldMessage("/say/hello");

            using (var group = new RvMultiSubjectMessaging(rvt, new Uri("rv+ipc://localhost")))
            {
                IReadOnlyMessage got = null;
                var evt = new AutoResetEvent(false);
                group.Subscribe(msg => { got = msg; evt.Set(); }, "/say/hello");
                rvt.Send(new Rv.Message {
                    SendSubject = "say.hello"
                });
                Assert.IsTrue(group.DispatchMessage(TimeSpan.FromSeconds(2)));
                Assert.NotNull(got);
            }
        }
Ejemplo n.º 4
0
 public static MSMQ.Message ToMsmqMessage(this IReadOnlyMessage msg)
 {
     if (msg.HasHeaders)
     {
         return(new MSMQ.Message
         {
             Priority = msg.Headers.Priority.HasValue ? (MSMQ.MessagePriority)msg.Headers.Priority : MSMQ.MessagePriority.Normal,
             TimeToBeReceived = msg.Headers.TimeToLive.HasValue ? msg.Headers.TimeToLive.Value : MSMQ.Message.InfiniteTimeout,
             ResponseQueue = GetOrAddQueue(msg.Headers.ReplyTo),
             Body = msg.Body,
             Extension = EncodeExtension(msg.Headers)
         });
     }
     else
     {
         return(new MSMQ.Message {
             Body = msg.Body
         });
     }
 }
Ejemplo n.º 5
0
 public void Send(IReadOnlyMessage msg)
 {
     try
     {
         using (var m = Converter.ToMsmqMessage(msg))
         {
             m.Recoverable = _recoverable;
             if (_isTransactional)
             {
                 _queue.Send(m, MSMQ.MessageQueueTransactionType.Single);
             }
             else
             {
                 _queue.Send(m);
             }
         }
     }
     catch (MSMQ.MessageQueueException ex) when(ex.MessageQueueErrorCode == MSMQ.MessageQueueErrorCode.TransactionUsage)
     {
         // we attempted a transactions receive on a non-transactional queue
         _isTransactional = !_isTransactional;
         Send(msg); // recurse
     }
 }
Ejemplo n.º 6
0
 public Task Respond(string responseUrl, IReadOnlyMessage message, CancellationToken?cancellationToken)
 {
     throw new NotImplementedException();
 }
Ejemplo n.º 7
0
 /// <summary>
 /// Posts a message to a response URL provided by e.g. <see cref="InteractionRequest"/> or <see cref="SlashCommand"/>.
 /// </summary>
 /// <param name="responseUrl">A temporary webhook that can be used to send messages in response to interactions.</param>
 /// <param name="message">The message to respond with.</param>
 /// <param name="cancellationToken"></param>
 public Task Respond(string responseUrl, IReadOnlyMessage message, CancellationToken?cancellationToken) =>
 Post <object>(responseUrl, message, cancellationToken);
Ejemplo n.º 8
0
 static void AddPriority(IReadOnlyMessage msg, Rv.Message rvm)
 {
     rvm.AddField(nameof(msg.Headers.Priority), msg.Headers.Priority.Value);
 }
Ejemplo n.º 9
0
 /// <summary>Sends a message to the destination of this transport</summary>
 /// <exception cref="T:System.ArgumentNullException">thrown when <paramref name="msg" /> is not set</exception>
 public void Send(IReadOnlyMessage msg)
 {
     using (var rvm = Converter.ToRvMessge(msg, Address))
         _transport.Send(rvm);
 }