adds new rabbit SendMessageToQ command
This commit is contained in:
parent
10dc20e350
commit
8f95809c80
2 changed files with 98 additions and 0 deletions
58
SecondBotEvents/Commands/RabbitMQ.cs
Normal file
58
SecondBotEvents/Commands/RabbitMQ.cs
Normal file
|
|
@ -0,0 +1,58 @@
|
||||||
|
using Newtonsoft.Json;
|
||||||
|
using OpenMetaverse;
|
||||||
|
using SecondBotEvents.Services;
|
||||||
|
using System;
|
||||||
|
using System.Collections.Generic;
|
||||||
|
using System.Linq;
|
||||||
|
|
||||||
|
namespace SecondBotEvents.Commands
|
||||||
|
{
|
||||||
|
[ClassInfo("Talk back to the rabbit MQ")]
|
||||||
|
public class RabbitMQ(EventsSecondBot setmaster) : CommandsAPI(setmaster)
|
||||||
|
{
|
||||||
|
[About("Fetchs the current region type the bot is in")]
|
||||||
|
[ArgHints("Qname", "Name of the queue to send the message to")]
|
||||||
|
[ArgHints("message", "Message to send to the queue")]
|
||||||
|
[ReturnHints("Message sent to the queue")]
|
||||||
|
[ReturnHintsFailure("Error sending message: ...")]
|
||||||
|
[ReturnHintsFailure("RabbitMQ service not available")]
|
||||||
|
[ReturnHintsFailure("RabbitMQ service not running")]
|
||||||
|
[ReturnHintsFailure("Qname is empty")]
|
||||||
|
[ReturnHintsFailure("Message is empty")]
|
||||||
|
[CmdTypeDo()]
|
||||||
|
public object SendMessageToQ(string Qname,string message)
|
||||||
|
{
|
||||||
|
if(master.RabbitService == null)
|
||||||
|
{
|
||||||
|
return Failure("RabbitMQ service not available");
|
||||||
|
}
|
||||||
|
if(master.RabbitService.isRunning() == false)
|
||||||
|
{
|
||||||
|
return Failure("RabbitMQ service not running");
|
||||||
|
}
|
||||||
|
if((Qname == null) || (Qname.Length < 1))
|
||||||
|
{
|
||||||
|
return Failure("Qname is empty");
|
||||||
|
}
|
||||||
|
if ((message == null) || (message.Length < 1))
|
||||||
|
{
|
||||||
|
return Failure("Message is empty");
|
||||||
|
}
|
||||||
|
try
|
||||||
|
{
|
||||||
|
KeyValuePair<bool,string> reply = master.RabbitService.SendMessage(Qname, message);
|
||||||
|
if(reply.Key == false)
|
||||||
|
{
|
||||||
|
return Failure("Error sending message: " + reply.Value);
|
||||||
|
}
|
||||||
|
return BasicReply("Message sent successfully to " + Qname);
|
||||||
|
}
|
||||||
|
catch (Exception ex)
|
||||||
|
{
|
||||||
|
return Failure("Error sending message: " + ex.Message);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -9,6 +9,7 @@ using RabbitMQ.Client.Events;
|
||||||
using Newtonsoft.Json;
|
using Newtonsoft.Json;
|
||||||
using Swan;
|
using Swan;
|
||||||
using OpenMetaverse;
|
using OpenMetaverse;
|
||||||
|
using Microsoft.Extensions.Logging.Abstractions;
|
||||||
|
|
||||||
namespace SecondBotEvents.Services
|
namespace SecondBotEvents.Services
|
||||||
{
|
{
|
||||||
|
|
@ -169,6 +170,45 @@ namespace SecondBotEvents.Services
|
||||||
master.BotClientNoticeEvent += BotClientRestart;
|
master.BotClientNoticeEvent += BotClientRestart;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public KeyValuePair<bool,string> SendMessage(string Qname,string message)
|
||||||
|
{
|
||||||
|
if (connection == null || connection.IsOpen == false)
|
||||||
|
{
|
||||||
|
LogFormater.Warn("Rabbit service [Connection is not open] cannot send message to queue " + Qname);
|
||||||
|
return new KeyValuePair<bool, string>(false, "Connection is not open");
|
||||||
|
}
|
||||||
|
if (string.IsNullOrEmpty(Qname) || string.IsNullOrEmpty(message))
|
||||||
|
{
|
||||||
|
LogFormater.Warn("Rabbit service [Queue name or message is empty] cannot send message to queue " + Qname);
|
||||||
|
return new KeyValuePair<bool, string>(false, "Queue name or message is empty");
|
||||||
|
}
|
||||||
|
IChannel channel = null;
|
||||||
|
if (channels.ContainsKey(Qname) == false)
|
||||||
|
{
|
||||||
|
channel = connection.CreateChannelAsync().Await();
|
||||||
|
channel.QueueDeclareAsync(queue: Qname, durable: true, exclusive: false, autoDelete: false,
|
||||||
|
arguments: null);
|
||||||
|
channels.Add(Qname, channel);
|
||||||
|
}
|
||||||
|
channel = channels[Qname];
|
||||||
|
if (channel == null || channel.IsOpen == false)
|
||||||
|
{
|
||||||
|
LogFormater.Warn("Rabbit service [Channel is not open] " + Qname + " reconnecting");
|
||||||
|
channel = connection.CreateChannelAsync().Await();
|
||||||
|
channel.QueueDeclareAsync(queue: Qname, durable: true, exclusive: false, autoDelete: false,
|
||||||
|
arguments: null);
|
||||||
|
channels[Qname] = channel;
|
||||||
|
}
|
||||||
|
if (channel == null || channel.IsOpen == false)
|
||||||
|
{
|
||||||
|
LogFormater.Warn("Rabbit service [Channel is still not open] " + Qname + " cannot send message");
|
||||||
|
return new KeyValuePair<bool, string>(false, "Channel is still not open");
|
||||||
|
}
|
||||||
|
var body = Encoding.UTF8.GetBytes(message);
|
||||||
|
channel.BasicPublishAsync(exchange: "", routingKey: Qname, body: body);
|
||||||
|
return new KeyValuePair<bool, string>(true, "Message sent to queue " + Qname);
|
||||||
|
}
|
||||||
|
|
||||||
protected void connectService()
|
protected void connectService()
|
||||||
{
|
{
|
||||||
if (connection != null && connection.IsOpen == true)
|
if (connection != null && connection.IsOpen == true)
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue