3

我在尝试向 OpenFire 实例中的“房间”发送 XMPP 消息时遇到问题。最终结果是我们的 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();
}

我可以毫无问题地发送给单个用户(相应地更改 To 和 Type),但是将代码更改为指向一个房间会以沉默结束!是否需要进行一些额外的“握手”来解决房间问题?

只要它可以在 Windows Server 上运行,我就不必为解决方案使用 C#。

4

1 回答 1

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",
});
于 2011-02-22T07:42:22.413 回答