Arttalk XMPP 库问题

Posted

技术标签:

【中文标题】Arttalk XMPP 库问题【英文标题】:Artalk XMPP library questions 【发布时间】:2020-11-14 16:09:00 【问题描述】:

我在我的 C# 应用程序中使用了 Artalk XMPP nuget 包。我能够通过我们 LAN 上的 Ignite OpenFire 服务器从用户帐户 userA@domain.com 向用户帐户 userB@domain.com 发送消息。这些消息存在几个小问题,这些问题不是最引人注目的:

如果我试图提供一个主题,它会在客户端中以“主题:”作为前缀。这不是问题,但我想知道这是远程客户端还是服务器。

消息正文被包裹在方括号中作为[测试消息正文]。这不是一个大问题,但我宁愿避免它,以保留按原样发送的消息,以进行可能的自动处理。这是远程客户端还是服务器?

如果消息正文包含 XML,则它已成功发送但从未收到。 XMPP 协议不允许发送 XML 吗?还是服务器或远程客户端?

编辑:

由于我问了上面的项目符号,我尝试在消息正文上使用System.Security.SecurityElement.Escape() 并将其包装在<![CDATA[]]> 中,并在保留其XML 的情况下交付。问题仍然存在。

userB 也将所有成功传递的消息复制回userA。如果userA 不是交互式的,这没关系,但如果它也是一个真实的人,那么它可能会很烦人。这是服务器还是远程客户端的事情,有什么办法可以避免吗?我知道远程用户的客户端不会使用通过 Jabber 客户端发送给他们的常规聊天消息来执行此操作。

接下来,我让userB@domain.com 邀请userA@domain.com 到聊天室conference.domain.com@conference.domain.com 并尝试向该聊天室发送消息,仍然来自userA@domain.com。会议室没有收到任何消息,发送过程中也没有抛出异常。

ArtalkXmppClient xmpp;
xmpp = new ArtalkXmppClient("domain.com", "userA@domain.com", "secret", 5222, true);

try

    var msg = new Message(
        "conference.domain.com@conference.domain.com",
        "test message body",
        "conference subject", // conference allows participants to change subject
        null,
        MessageType.Groupchat, 
        CultureInfo.CurrentCulture);

    if (!xmpp.Connected)
    
        xmpp.Connect("myapp");
    

    xmpp.SendMessage(msg);

    return true;

catch (Exception ex)

    Console.WriteLine(ex.Message);

【问题讨论】:

【参考方案1】:

问题的群聊部分的解决方案是在尝试发送到它之前在服务器上预先创建组并使用MessageType.Chat

最后一部分是违反直觉的,如果我在测试期间没有忘记在配置中启用群聊,我永远不会弄明白。当使用MessageType.GroupChatChat 以外的任何类型时,它根本不起作用。

另外,主题必须是null,否则主题会改变,但不会传递任何消息。主题更改必须单独发送,无需正文。

我注意到的唯一副作用是,在群聊中,与人与人之间的聊天相反,消息似乎被转义了。我不确定与面对面聊天相比,他们逃脱了什么,但这是可以接受的。

【讨论】:

以上是关于Arttalk XMPP 库问题的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 xmpp 库共享文件

如何在 Flutter 中配置 Xmpp 库?

适用于 Windows Phone 8.1 的 XMPP 库

我需要啥库才能通过 websocket 实现 XMPP

Visual Basic 语言的 Xmpp 库

使用 Strophe 库进行 XMPP 文件传输