/// <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)); } }
/// <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}"); } }