agsXMPP客户端关于好友在线状态的设置及其响应的方法

分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

               

本文来自http://blog.csdn.net/hellogv/ ,引用必须注明出处!

      agsXMPP越来越多人用,最近有几个网友都问起如何在agsXMPP的客户端处理好友在线状态的设置以及响应。

agsXMPP里面有2个重要的地方可以设置在线状态:

1.PresenceType.available和PresenceType.unavailable,XMPP官方不推荐使用PresenceType.unavailable来实现隐身,为什么?A用户给B用户(或者所有用户)发送PresenceType.unavailable,那就相当于下线了,根本不能识别是“隐身”还是“下线”,有些偏门的工具喜欢把隐身的用户给显示出来。。。。。。。所以,那就不建议用PresenceType.unavailable咯。

2.ShowType.XXXXX,这个就不用多说了,其本身就是设置多种在线状态的。。。。


下面的代码实现了如何告诉特定好友(用循环就可以多个好友了),自己的在线状态:

    /// <summary>    /// 告诉服务器/好友,我的当前可视状态    /// </summary>    /// <param name="jidTo">null表示通知服务器,非null则是指定好友</param>    /// <param name="visible">0:可视,1:invisible,2:unavailable</param>    public static void ChangMyState(String jidTo, int visible)    {        Presence p = new Presence();        if (jidTo != null)            p.To = new Jid(jidTo);        if (visible == 0)//上线,完全可视        {            p.Type = PresenceType.available;            p.Show = ShowType.chat;        }        else if (visible == 1)//上线,不可见        {            p.Type = PresenceType.available;            p.Show = ShowType.away;        }        else if (visible == 2)//下线,不可见        {            p.Type = PresenceType.unavailable;        }        Cls_Config.XmppCon.Send(p);    } 


下面的代码就实现了如何响应好友发送过来的在线状态:

delegate void OnPresenceDelegate(object sender, Presence pres);  /// <summary>  /// 收到Presence节时引发的事件,判断用户上线/离线触发,以及用户处理好友请求(拒绝/接受)、被T处理  /// </summary>  private void XmppCon_OnPresence(object sender, Presence pres)  {      if (ucContactList.InvokeRequired)      {          ucContactList.BeginInvoke(new OnPresenceDelegate(XmppCon_OnPresence), new object[] { sender, pres });          return;      }      //****************处理好友请求************************//      if (pres.Type == PresenceType.subscribe)//收到好友请求      {         //提问用户是否接受好友请求      }      else if (pres.Type == PresenceType.subscribed) { }      else if (pres.Type == PresenceType.unsubscribe) {}      else if (pres.Type == PresenceType.unsubscribed)//收到“拒绝请求”或者“被T”的时候      {                }      else //处理好友上线/离线的事件处理      {          if (pres.From.Bare.Equals(Cls_Config.XmppCon.MyJID.Bare) == false)//如果不是自己的信息,即好友信息          {               //检测该好友是否不存在于好友列表(OnPresence比OnRosterItem优先处理添加好友),则自动添加ListItem               if (Cls_Config.alFriendsList.IndexOf(pres.From.Bare) == -1)               {                   //添加到好友列表               }               //判断该好友目前的状态,上线还是离线               if (pres.Type == PresenceType.available && pres.Show==ShowType.chat)//如果好友上线,并且是chat状态             {}             else if(pres.Type == PresenceType.available && pres.Show==ShowType.away)//如果好友上线,并且是away状态             {}             else if (pres.Type == PresenceType.unavailable)//如果好友离线               {}          }      }  }   

这两句是判断的关键:            

if (pres.Type == PresenceType.available && pres.Show==ShowType.chat)//如果好友上线,并且是chat状态

{}

else if(pres.Type == PresenceType.available && pres.Show==ShowType.away)//如果好友上线,并且是away状态

{}

           

分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣幽默!还带黄段子!希望你也加入到我们人工智能的队伍中来!https://blog.csdn.net/jiangjunshow

猜你喜欢

转载自blog.csdn.net/qq_43666994/article/details/87892582