如何使用 Jabber-net 库实现 XEP-0012

Posted

技术标签:

【中文标题】如何使用 Jabber-net 库实现 XEP-0012【英文标题】:How to Implement XEP-0012 using Jabber-net Library 【发布时间】:2014-02-17 10:56:55 【问题描述】:

我正在 C# Windows 应用程序项目中制作聊天客户端。 我想获得 JID 的最后状态。如何在 Jabber-net .NET 库上实现 XEP-0012(JID 的最后一个活动)。

【问题讨论】:

【参考方案1】:

确保您阅读了Wiki,然后查看一些现有代码以获取一些示例。 jabber:iq:last 从协议的角度来看应该是微不足道的,但许多客户端不再实现它。

【讨论】:

【参考方案2】:

我自己找到了它......我很乐意分享它。让它对想要这个的人有用..

    public void RequestLastMessage(JID jabberid)
    
        try
        
            LastIQ iq = new LastIQ(jabberClient1.Document);
            iq.To = jabberid;

            iq.Type = jabber.protocol.client.IQType.get;
            jabberClient1.Tracker.BeginIQ(iq, LastMessage, null);
        
        catch (Exception ex)
        
            DebugLogger.LogRecord(ex.Message + " [ Function: " + System.Reflection.MethodBase.GetCurrentMethod().Name + " Class: XMPPWrapper ]");
        
    

    private void LastMessage(object sender, jabber.protocol.client.IQ iq, object state)
    
        try
        
            if ((iq == null) || (iq.Type != jabber.protocol.client.IQType.result))
                return;
            Last ll = iq.Query as Last;
            if (iq.From != null && ll.Message != "")
                if (ApplicationVariables.GlobalContactForm != null) ApplicationVariables.GlobalContactForm.SetOfflineStatus(ll.Message, iq.From);
        
        catch (Exception ex)
        
            DebugLogger.LogRecord(ex.Message + " [ Function: " + System.Reflection.MethodBase.GetCurrentMethod().Name + " Class: XMPPWrapper ]");
        

    

【讨论】:

if (iq.From != null && ll.Message != "") 行中还要检查ll != null。要获得额外的功劳,请与 Caps 联系,看看对方是否实现了这一点。另外,确保您没有定期轮询。这将导致您在许多服务器上快速获得速率限制。

以上是关于如何使用 Jabber-net 库实现 XEP-0012的主要内容,如果未能解决你的问题,请参考以下文章

Jabber-net 注册新用户

jabber-net onAuthenticated 没有被调用

jabber-net 和 vysper 消息广播工具

使用 jabber-net 库在 jabber.org 上创建 jabber id

Jabber-Net 发布版本无法连接到 XMPP 服务器

Jabber-net 名册树错误