Artalk XMPP library questions



我在C#应用程序中使用了Artalk XMPP nuget包。我能够通过局域网上的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);
}

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

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

此外,主题必须是null,否则主题将更改,但不会传递任何消息。主题的更改必须单独发送,单独的消息没有正文。

我注意到的唯一副作用是,与人与人之间的聊天相比,群聊的信息似乎是逃逸的。我不确定是什么让他们无法面对面聊天,但这是可以接受的。

最新更新