/// <summary> /// Gets all consumers of channel /// </summary> public async Task <TmqResult <List <ClientInformation> > > GetConsumers(string channel) { TmqMessage message = new TmqMessage(); message.Type = MessageType.Server; message.SetTarget(channel); message.ContentType = KnownContentTypes.ChannelConsumers; return(await SendAndGetJson <List <ClientInformation> >(message)); }
/// <summary> /// Finds all queues in channel /// </summary> public async Task <TmqResult <List <QueueInformation> > > GetQueues(string channel) { TmqMessage message = new TmqMessage(); message.Type = MessageType.Server; message.ContentType = KnownContentTypes.QueueList; message.SetTarget(channel); return(await SendAndGetJson <List <QueueInformation> >(message)); }
/// <summary> /// Finds the channel and gets information if exists /// </summary> public async Task <TmqResult <ChannelInformation> > GetChannelInfo(string name) { TmqMessage message = new TmqMessage(); message.Type = MessageType.Server; message.ContentType = KnownContentTypes.ChannelInformation; message.SetTarget(name); return(await SendAndGetJson <ChannelInformation>(message)); }
/// <summary> /// Finds the queue and gets information if exists /// </summary> public async Task <TmqResult <QueueInformation> > GetQueueInfo(string channel, ushort id) { TmqMessage message = new TmqMessage(); message.Type = MessageType.Server; message.ContentType = KnownContentTypes.QueueInformation; message.SetTarget(channel); message.Content = new MemoryStream(BitConverter.GetBytes(id)); return(await SendAndGetJson <QueueInformation>(message)); }
/// <summary> /// Creates new status code message /// </summary> public static TmqMessage StatusCodeMessage(ushort contentType, string target = null) { TmqMessage message = new TmqMessage(); message.Type = MessageType.Server; message.ContentType = contentType; message.SetTarget(target); message.FirstAcquirer = true; return(message); }
/// <summary> /// Creates new response message, with no content, of the message. /// </summary> public static TmqMessage ResponseStatus(TmqMessage request, ushort status) { TmqMessage response = new TmqMessage(); response.Type = MessageType.Response; response.SetMessageId(request.MessageId); response.ContentType = status; response.FirstAcquirer = true; response.SetTarget(request.Type == MessageType.Channel ? request.Target : request.Source); return(response); }
/// <summary> /// Removes a channel and all queues in it /// </summary> public async Task <TmqResponseCode> RemoveChannel(string channel, bool verifyResponse) { TmqMessage message = new TmqMessage(); message.Type = MessageType.Server; message.ContentType = KnownContentTypes.RemoveChannel; message.SetTarget(channel); message.ResponseRequired = verifyResponse; if (verifyResponse) { message.SetMessageId(UniqueIdGenerator.Create()); } return(await WaitResponse(message, verifyResponse)); }
/// <summary> /// Updates queue options /// </summary> public async Task <TmqResponseCode> SetQueueOptions(string channel, ushort queueId, Action <QueueOptions> optionsAction) { TmqMessage message = new TmqMessage(); message.Type = MessageType.Server; message.ContentType = KnownContentTypes.UpdateQueue; message.SetTarget(channel); message.ResponseRequired = true; message.SetMessageId(UniqueIdGenerator.Create()); QueueOptions options = new QueueOptions(); optionsAction(options); message.Content = new MemoryStream(Encoding.UTF8.GetBytes(options.Serialize(queueId))); return(await WaitResponse(message, true)); }
/// <summary> /// Removes a queue in a channel in server /// </summary> public async Task <TmqResponseCode> RemoveQueue(string channel, ushort queueId, bool verifyResponse) { TmqMessage message = new TmqMessage(); message.Type = MessageType.Server; message.ContentType = KnownContentTypes.RemoveQueue; message.SetTarget(channel); message.ResponseRequired = verifyResponse; message.Content = new MemoryStream(BitConverter.GetBytes(queueId)); if (verifyResponse) { message.SetMessageId(UniqueIdGenerator.Create()); } return(await WaitResponse(message, verifyResponse)); }
public async Task FromClientToClientManuel() { TestMqServer server = new TestMqServer(); server.Initialize(42302); server.Start(); server.Server.Server.Options.PingInterval = 300; server.Server.Server.Options.RequestTimeout = 300; await Task.Delay(250); TmqClient client1 = new TmqClient(); TmqClient client2 = new TmqClient(); client1.ClientId = "client-1"; client2.ClientId = "client-2"; client2.AutoAcknowledge = false; client2.MessageReceived += async(c, m) => { if (m.AcknowledgeRequired) { await client2.SendAsync(m.CreateAcknowledge()); } }; await client1.ConnectAsync("tmq://localhost:42302"); await client2.ConnectAsync("tmq://localhost:42302"); Assert.True(client1.IsConnected); Assert.True(client2.IsConnected); TmqMessage message = new TmqMessage(); message.HighPriority = true; message.Type = MessageType.Client; message.SetTarget(client2.ClientId); message.SetStringContent("Hello, World!"); bool acknowledge = await client1.SendWithAcknowledge(message); Assert.True(acknowledge); }
public async Task FromClientToClientTimeout() { TestMqServer server = new TestMqServer(); server.Initialize(42393); server.Start(15, 15); server.Server.Server.Options.PingInterval = 300; server.Server.Server.Options.RequestTimeout = 300; await Task.Delay(250); TmqClient client1 = new TmqClient(); TmqClient client2 = new TmqClient(); client1.ClientId = "client-1"; client2.ClientId = "client-2"; client1.AcknowledgeTimeout = TimeSpan.FromSeconds(5); client2.AutoAcknowledge = false; await client1.ConnectAsync("tmq://localhost:42393"); await client2.ConnectAsync("tmq://localhost:42393"); Assert.True(client1.IsConnected); Assert.True(client2.IsConnected); TmqMessage message = new TmqMessage(); message.HighPriority = true; message.Type = MessageType.Client; message.SetTarget(client2.ClientId); message.SetStringContent("Hello, World!"); bool acknowledge = await client1.SendWithAcknowledge(message); Assert.False(acknowledge); }