示例#1
0
        /// <summary>
        /// Creates new queue and sends response
        /// </summary>
        private async Task UpdateQueue(MqClient client, HorseMessage message)
        {
            NetworkOptionsBuilder builder = await System.Text.Json.JsonSerializer.DeserializeAsync <NetworkOptionsBuilder>(message.Content);

            HorseQueue queue = _server.FindQueue(message.Target);

            if (queue == null)
            {
                if (message.WaitResponse)
                {
                    await client.SendAsync(message.CreateResponse(HorseResultCode.NotFound));
                }

                return;
            }

            foreach (IAdminAuthorization authorization in _server.AdminAuthorizations)
            {
                bool grant = await authorization.CanUpdateQueueOptions(client, queue, builder);

                if (!grant)
                {
                    if (message.WaitResponse)
                    {
                        await client.SendAsync(message.CreateResponse(HorseResultCode.Unauthorized));
                    }

                    return;
                }
            }

            builder.ApplyToQueue(queue.Options);
            if (builder.Status.HasValue)
            {
                await queue.SetStatus(builder.Status.Value);
            }

            _server.OnQueueUpdated.Trigger(queue);

            //if creation successful, sends response
            if (message.WaitResponse)
            {
                await client.SendAsync(message.CreateResponse(HorseResultCode.Ok));
            }
        }
示例#2
0
        /// <summary>
        /// Removes a queue from the server
        /// </summary>
        public async Task RemoveQueue(HorseQueue queue)
        {
            try
            {
                _queues.Remove(queue);
                await queue.SetStatus(QueueStatus.Stopped);

                foreach (IQueueEventHandler handler in _queueEventHandlers)
                {
                    await handler.OnRemoved(queue);
                }

                OnQueueRemoved.Trigger(queue);
                await queue.Destroy();
            }
            catch (Exception e)
            {
                SendError("REMOVE_QUEUE", e, $"QueueName:{queue?.Name}");
            }
        }