public void Consume(string queueName) { try { string[] routingKeys = File.ReadAllLines(topicsDir); var factory = new ConnectionFactory() { HostName = "localhost" }; using (var connection = factory.CreateConnection()) using (var channel = connection.CreateModel()) { channel.ExchangeDeclare(exchange: "audio_job", type: "topic"); channel.QueueDeclare(queue: queueName, durable: false, exclusive: false, autoDelete: false, arguments: null); channel.BasicQos(0, 1, false); //var queueName = channel.QueueDeclare().QueueName; //not good because it randomly generates queues if (routingKeys.Length < 1) { Console.Error.WriteLine("Error no routing key set"); Console.WriteLine(" Press [enter] to exit."); Console.ReadLine(); Environment.ExitCode = 1; return; } foreach (var bindingKey in routingKeys) { channel.QueueBind(queue: queueName, exchange: "audio_job", routingKey: bindingKey); } Console.WriteLine(" [*] QUEUE NAME: " + queueName); Console.WriteLine(" [*] Waiting for messages. To exit press CTRL+C"); // while (true) // { var consumer = new EventingBasicConsumer(channel); consumer.Received += (model, ea) => { var body = ea.Body; //var message = Encoding.UTF8.GetString(body); var routingKey = ea.RoutingKey; var props = ea.BasicProperties; var tag = ea.DeliveryTag; Console.WriteLine(" [x] Received '{0}':'{1}'", routingKey, "Audio Job"); object inputPropriety, inputLanguage, voiceSpeed, format; props.Headers.TryGetValue("inputPropriety", out inputPropriety); props.Headers.TryGetValue("inputLanguage", out inputLanguage); props.Headers.TryGetValue("voiceSpeed", out voiceSpeed); props.Headers.TryGetValue("format", out format); //channel.BasicAck(deliveryTag: ea.DeliveryTag, multiple: false); AudioJobProcessor ajp = new AudioJobProcessor(); byte[] response = ajp.SubmitWorkItem(body, Encoding.UTF8.GetString((byte[])inputPropriety), (int)inputLanguage, (int)voiceSpeed, (int)format); bool worked = true; if (response == null) { worked = false; } this.SendResponse(props, response, tag, worked); }; channel.BasicConsume(queue: queueName, noAck: true, consumer: consumer); Processor.CheckForAudioAgentInstances(); Console.ReadLine(); //Thread.Sleep(800); // } } } catch (Exception e) { Console.WriteLine(e.Message); Console.WriteLine("Application will now exit"); Console.ReadLine(); } }
public void run(string[] args) { string queueName = "rba16"; if (File.Exists(workingDir + "\\agent.config")) { queueName = File.ReadAllText(workingDir + "\\agent.config"); } bool skip = false; string input = ""; if (args.Length > 0) { input = args[0]; if (input.Equals("startup", StringComparison.InvariantCultureIgnoreCase)) { skip = true; } } if (File.Exists(workingDir + "\\topics.config")) { oldTopics = File.ReadAllLines(workingDir + "\\topics.config"); if (oldTopics.Length > 0) { topics = oldTopics; } } string res = ""; foreach (var topic in topics) { res += topic + " "; } Console.WriteLine("Current queue is: " + queueName); Console.WriteLine("Current binding keys are: " + res); if (!skip) { Console.WriteLine(consoleMessage); ConsoleKeyInfo ck = Console.ReadKey(); bool loop = true; do { if (ConsoleKey.P.Equals(ck.Key)) { AudioJobProcessor.WriteAllInstalledVoicesToFile(); Console.WriteLine(consoleMessage); ck = Console.ReadKey(); } if (ConsoleKey.N.Equals(ck.Key)) { AudioJobProcessor.WriteVoiceNames(); Console.WriteLine(consoleMessage); ck = Console.ReadKey(); } if (ConsoleKey.C.Equals(ck.Key)) { Console.WriteLine("Current binding keys are: " + res); Console.WriteLine("Write each key separated by commas (,):"); string keys = Console.ReadLine(); topics = keys.Split(','); Console.WriteLine(consoleMessage); ck = Console.ReadKey(); } if (ConsoleKey.Q.Equals(ck.Key)) { Console.WriteLine("Current queue is: " + queueName + " Write new queue name: "); queueName = Console.ReadLine(); Console.WriteLine(consoleMessage); ck = Console.ReadKey(); } if (ConsoleKey.Enter.Equals(ck.Key)) { loop = false; //ck = Console.ReadKey(); } } while (loop); res = ""; foreach (var topic in topics) { res += topic + " "; } if (!File.Exists(workingDir + "\\agent.config")) { File.Create(workingDir + "\\agent.config").Close(); } File.WriteAllText(workingDir + "\\agent.config", queueName); if (!File.Exists(workingDir + "\\topics.config")) { File.Create(workingDir + "\\topics.config").Close(); } File.WriteAllLines(workingDir + "\\topics.config", topics); } Console.WriteLine("Audio Conversion Agent started listening on topics: " + res); QueueConsumer qc = new QueueConsumer(); qc.Consume(queueName.Trim()); }
public void Consume(string queueName) { try { string[] routingKeys = File.ReadAllLines(topicsDir); var factory = new ConnectionFactory() { HostName = "localhost" }; using (var connection = factory.CreateConnection()) using (var channel = connection.CreateModel()) { channel.ExchangeDeclare(exchange: "audio_job", type: "topic"); channel.QueueDeclare(queue: queueName, durable: true, exclusive: false, autoDelete: false, arguments: null); channel.BasicQos(0, 1, false); //var queueName = channel.QueueDeclare().QueueName; //not good here because it randomly generates queues if (routingKeys.Length < 1) { Console.Error.WriteLine("Error no routing key set"); Console.WriteLine(" Press [enter] to exit."); Console.ReadLine(); Environment.ExitCode = 1; return; } foreach (var bindingKey in routingKeys) { channel.QueueBind(queue: queueName, exchange: "audio_job", routingKey: bindingKey); } Console.WriteLine(" [*] QUEUE NAME: " + queueName); Console.WriteLine(" [*] Waiting for messages. To exit press CTRL+C"); // while (true) // { var consumer = new EventingBasicConsumer(channel); consumer.Received += (model, ea) => { var body = ea.Body; //var message = Encoding.UTF8.GetString(body); var routingKey = ea.RoutingKey; var props = ea.BasicProperties; var tag = ea.DeliveryTag; Console.WriteLine(" [x] Received '{0}' Time: '{1}'", routingKey, DateTime.Now); props.Headers.TryGetValue("inputPropriety", out object inputPropriety); props.Headers.TryGetValue("inputLanguage", out object inputLanguage); props.Headers.TryGetValue("voiceSpeed", out object voiceSpeed); props.Headers.TryGetValue("format", out object format); //channel.BasicAck(deliveryTag: ea.DeliveryTag, multiple: false); AudioJobProcessor ajp = new AudioJobProcessor(); byte[] response = ajp.SubmitWorkItem(body, Encoding.UTF8.GetString((byte[])inputPropriety), (int)inputLanguage, (int)voiceSpeed, (int)format); bool worked = true; if (response == null) { worked = false; } this.SendResponse(props, response, tag, worked); }; channel.BasicConsume(queue: queueName, noAck: true, consumer: consumer); Processor.CheckForAudioAgentInstances(); Console.ReadLine(); //Thread.Sleep(800); // } } } catch (Exception e) { Console.WriteLine(e.Message); Console.WriteLine("Application will now exit"); Console.ReadLine(); } }