Отправить сообщение XMPP в комнату OpenFire из командной строки

У меня возникли проблемы с попыткой отправить сообщение XMPP в «Комнату» в нашем экземпляре OpenFire. Конечным результатом является то, что наш сервер сборки CruiseControl.NET может отправлять сообщения об успешном/неудачном выполнении в соответствующие «комнаты» в качестве дополнительного средства уведомления.

Я использую библиотеку Matrix XMPP для создания консольного приложения на С# с использованием VS2010. Идея заключалась в том, чтобы создать простой .exe-файл, который я мог бы подключить к CCNet и передать ему несколько аргументов по мере необходимости.

Приведенный ниже код в основном представляет собой образец кода с сайта/документации Matrix, который я обновил, чтобы указать на комнату.

static void Main(string[] args)
{
    var xmppClient = new XmppClient
    {
        XmppDomain = "SERVER",
        Username = "davidc",
        Password = "*********"
    };

    xmppClient.OnRosterEnd += delegate
    {
        xmppClient.Send(new Message
        {
            To = "[email protected]",
            From = "davidc@SERVER",
            Type = MessageType.groupchat,
            Body = "Just Testing the XMPP SDK"
        });
    };
    xmppClient.Open();

    Console.WriteLine("Press return key to exit the application");
    Console.ReadLine();

    xmppClient.Close();
}

Я могу отправить отдельному пользователю (соответственно изменив Кому и Тип) без каких-либо проблем, но изменение кода для указания на комнату заканчивается тишиной! Есть ли какое-то дополнительное «рукопожатие», которое необходимо сделать для обращения к комнате?

Мне действительно не нужно использовать C# для решения, если оно будет работать на Windows Server.


person DilbertDave    schedule 21.02.2011    source источник


Ответы (1)


Вам следует прочитать XEP-0045, "Многопользовательский чат". Вам нужно войти в комнату, прежде чем отправить в нее сообщение. Для быстрого исправления см. раздел 7.1.1, в котором показано, как присоединиться к комнате с использованием упрощенного (старого) протокола:

<presence
    to='[email protected]/thirdwitch'/>

Для более нового протокола включите дополнительный тег x из раздела 7.1.2:

<presence
    to='[email protected]/thirdwitch'>
  <x xmlns='http://jabber.org/protocol/muc'/>
</presence>

Я не знаю вашей библиотеки, но вам понадобится код вроде:

xmppClient.Send(new Presence
{
    To = "[email protected]/mynick",
});
person Joe Hildebrand    schedule 22.02.2011
comment
Спасибо, Джо. Я заглянул в раздел многопользовательского чата, но, будучи девственником XMPP, немного потерял меня. Если я на правильном месте, то закатаю рукава и попробую еще раз ;-) - person DilbertDave; 22.02.2011
comment
Я пытался отправить новый объект Presence непосредственно перед сообщением, но безуспешно — у вас есть какой-нибудь код? - person DilbertDave; 22.02.2011
comment
Спасибо, Джо, наконец-то разобрался - person DilbertDave; 02.03.2011