从命令行向OpenFire会议室发送XMPP消息

时间:2011-02-21 16:51:38

标签: c# command-line xmpp openfire

我在尝试将XMPP消息发送到OpenFire实例中的“Room”时遇到问题。最终结果是我们的CruiseControl.NET构建服务器能够将成功/失败消息作为附加的通知方式发送到相应的“房间”。

我正在使用Matrix XMPP库使用VS2010在C#中创建控制台应用程序。我的想法是创建一个简单的.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 = "roomname@conference.SERVER",
            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服务器上运行。

1 个答案:

答案 0 :(得分:2)

您需要阅读XEP-0045,“多用户聊天”。您需要在向其发送消息之前进入房间。有关快速修复的信息,请参阅第7.1.1节,其中显示了如何使用简化(较旧)协议加入会议室:

<presence
    to='darkcave@chat.shakespeare.lit/thirdwitch'/>

对于较新的协议,请在7.1.2节中添加额外的x标记:

<presence
    to='darkcave@chat.shakespeare.lit/thirdwitch'>
  <x xmlns='http://jabber.org/protocol/muc'/>
</presence>

我不知道您的图书馆,但您需要的代码如下:

xmppClient.Send(new Presence
{
    To = "roomname@conference.SERVER/mynick",
});