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); }
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); }
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); } }
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 }); } }
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 } }
public Task Respond(string responseUrl, IReadOnlyMessage message, CancellationToken?cancellationToken) { throw new NotImplementedException(); }
/// <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);
static void AddPriority(IReadOnlyMessage msg, Rv.Message rvm) { rvm.AddField(nameof(msg.Headers.Priority), msg.Headers.Priority.Value); }
/// <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); }