Esempio n. 1
0
        /// <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));
        }
Esempio n. 2
0
        /// <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));
        }
Esempio n. 3
0
        /// <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));
        }
Esempio n. 4
0
        /// <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));
        }
Esempio n. 5
0
        /// <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);
        }
Esempio n. 6
0
        /// <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);
        }
Esempio n. 7
0
        /// <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));
        }
Esempio n. 8
0
        /// <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));
        }
Esempio n. 9
0
        /// <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));
        }
Esempio n. 10
0
        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);
        }
Esempio n. 11
0
        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);
        }