【问题标题】:Artalk XMPP library questionsArttalk XMPP 库问题
【发布时间】: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);
}

【问题讨论】:

    标签: c# xmpp


    【解决方案1】:

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

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

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

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

    【讨论】:

      猜你喜欢
      • 2022-01-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-11-15
      相关资源
      最近更新 更多