public static async Task <IMessageContext> SendProto(this IBus bus, IMessageContext message, int timeOut = 3000, SendModes mode = SendModes.Both, CancellationToken cancellationToken = default) { var result = await bus.Send(message, null, timeOut, mode, cancellationToken); if (result as IMessageContext != null) { return(result as IMessageContext); } return(MessageContext.Create(result)); }
public async Task <object> Send(object message, string topic = null, int timout = 30000, SendModes mode = SendModes.Both, CancellationToken cancellationToken = default) { object result = null; if (message is null) { throw new ArgumentNullException(nameof(message)); } if (message as IMessageContext == null) { message = MessageContext.Create(message, topic); } var context = message as IMessageContext; if (string.IsNullOrWhiteSpace(topic)) { topic = Extensions.GetTopic(message.GetType()); } if (mode != SendModes.ExternalOnly) { foreach (var h in this.GetSubscriptions(topic).Where(x => x.IsRequestHandler)) { try { result = await h.Handler(context).TimeoutAfter(30000, cancellationToken); return(result); } catch { } } } if (mode != SendModes.InternalOnly && message as IMessageContext != null && this.rabbit.IsActive) { /// Try to send to remote /// Note that we can only send message contexts... //var context = message as IMessageContext; try { var text = context.Serialize(); result = await this.rabbit.Send(Encoding.UTF8.GetBytes(text)); } catch { } } return(result); }