午夜视频在线网站,日韩视频精品在线,中文字幕精品一区二区三区在线,在线播放精品,1024你懂我懂的旧版人,欧美日韩一级黄色片,一区二区三区在线观看视频

分享

C#訪問openfire服務器之三:一次成功的登錄

 WindySky 2016-03-14

1、定義XmppClient

[csharp] view plain copy
在CODE上查看代碼片派生到我的代碼片
  1. public XmppClient(string pstrIp,int pIntPort,string pstrUser,string pstrPas)  
  2.       {  
  3.           //構造XmppClient  
  4.           xmpp = new XmppClientConnection(pstrIp);  
  5.   
  6.           xmpp.AutoAgents = false;  
  7.           xmpp.AutoPresence = true;  
  8.           xmpp.AutoRoster = true;  
  9.           xmpp.AutoResolveConnectServer = true;  
  10.           xmpp.Port = pIntPort;  
  11.           xmpp.Username = pstrUser;  
  12.           xmpp.Password = pstrPas;  
  13.           xmpp.ConnectServer = pstrIp;  
  14.   
  15.           m_strServerName = Dns.GetHostEntry(IPAddress.Parse(pstrIp)).HostName;  //獲取服務器的計算機名  
  16.           xmpp.Server = m_strServerName;  
  17.   
  18.           //登錄成功過程  
  19.           xmpp.OnSaslStart += new agsXMPP.sasl.SaslEventHandler(xmpp_OnSaslStart); //驗證時觸發(fā)  
  20.           xmpp.OnLogin += new ObjectHandler(xmppCon_OnLogin); //登錄成功時觸發(fā)  
  21.           xmpp.OnRosterItem += new XmppClientConnection.RosterHandler(xmpp_OnRosterItem); //當讀取、添加、刪除聯(lián)系人時觸發(fā)  
  22.           xmpp.OnPresence += new PresenceHandler(xmppCon_OnPresence); //收到Presence節(jié)時引發(fā)的事件  
  23.   
  24.           //消息處理  
  25.           xmpp.OnMessage += new MessageHandler(xmppCon_OnMessage); //消息事件  
  26.             
  27.           //錯誤處理  
  28.           xmpp.OnSocketError += new ErrorHandler(xmpp_OnSocketError); //找不到服務器時觸發(fā)  
  29.           xmpp.OnError += new ErrorHandler(xmpp_OnError); //登錄錯誤時觸發(fā)  
  30.             
  31.           //關閉處理  
  32.           xmpp.OnClose += new ObjectHandler(xmpp_OnClose);  //網(wǎng)絡中斷或關閉事件  
  33.             
  34.       }  

2、初始化定義的xmppClient,然后打開連接

[csharp] view plain copy
在CODE上查看代碼片派生到我的代碼片
  1. xmppClient = new agsXMPPNet.XmppClient(psys.StrIp, psys.IntPort, psys.StrUser, psys.StrPas);  
  2.   
  3.                 xmppClient.OnPresenceEvent += new agsXMPPNet.XmppClient.OnPresence(xmppClient_OnPresenceEvent);  
  4.                 xmppClient.OnRosterItemEvent += new agsXMPPNet.XmppClient.OnRosterItem(xmppClient_OnRosterItemEvent);  
  5.   
  6.                 xmppClient.LoginEvent += new agsXMPPNet.XmppClient.MsgHandler(xmppClient_LoginEvent);  
  7.                 xmppClient.Login();  //這里其實就是xmpp.open()  

3、設置驗證

[csharp] view plain copy
在CODE上查看代碼片派生到我的代碼片
  1. void xmpp_OnSaslStart(object sender, agsXMPP.sasl.SaslEventArgs args)  
  2.       {  
  3.           args.Auto = false;  
  4.           args.Mechanism = agsXMPP.protocol.sasl.Mechanism.GetMechanismName  
  5.               (agsXMPP.protocol.sasl.MechanismType.PLAIN);  
  6.       }  

4、登錄成功事件

[csharp] view plain copy
在CODE上查看代碼片派生到我的代碼片
  1. void xmppCon_OnLogin(object sender)  
  2.        {  
  3.            RosterItem rt = new RosterItem  
  4.            {  
  5.                IsLoginSucc = true  
  6.            };  
  7.            LoginEvent(rt);  
  8.        }  

5、讀取聯(lián)系人

[csharp] view plain copy
在CODE上查看代碼片派生到我的代碼片
  1. /// <summary>  
  2.       /// 當讀取、添加、刪除聯(lián)系人時觸發(fā)  
  3.       /// </summary>  
  4.       /// <param name="sender"></param>  
  5.       /// <param name="item"></param>  
  6.       void xmpp_OnRosterItem(object sender, agsXMPP.protocol.iq.roster.RosterItem item)  
  7.       {  
  8.           if (item.Subscription == agsXMPP.protocol.iq.roster.SubscriptionType.both)   
  9.           {  
  10.               //對方也添加自己為好友  
  11.               OnRosterItemEvent(new RosterItem()  
  12.               {  
  13.                   //StrGroupName = item.GetGroups().Count > 0 ? item.GetGroups().Item(0).InnerXml : "",  
  14.                   StrUserName = item.Jid.User,  
  15.                   StrReMarkName = string.IsNullOrWhiteSpace(item.Name) == true ? item.Jid.User : item.Name,  
  16.                   RosterType=PreType.Both  
  17.               });  
  18.               m_intCount = 0;  
  19.           }  
  20.           else if(item.Subscription==agsXMPP.protocol.iq.roster.SubscriptionType.remove)  
  21.           {  
  22.               //刪除(對方刪除自己)  
  23.               OnRosterItemEvent(new RosterItem()  
  24.               {  
  25.                   //StrGroupName = item.GetGroups().Count > 0 ? item.GetGroups().Item(0).InnerXml : "",  
  26.                   StrUserName = item.Jid.User,  
  27.                   StrReMarkName = string.IsNullOrWhiteSpace(item.Name) == true ? item.Jid.User : item.Name,  
  28.                   RosterType = PreType.ReMove  
  29.               });  
  30.           }  
  31.       }  

6、收到Presence節(jié),觸發(fā)事件,進行列表展示

[csharp] view plain copy
在CODE上查看代碼片派生到我的代碼片
  1. /// <summary>  
  2.       /// 收到Presence節(jié)時引發(fā)的事件  
  3.       /// </summary>  
  4.       /// <param name="sender"></param>  
  5.       /// <param name="pres"></param>  
  6.       void xmppCon_OnPresence(object sender, Presence pres)  
  7.       {  
  8.           RosterItem rt = new RosterItem  
  9.           {  
  10.               StrFrom = pres.From.ToString(),  
  11.               StrUserName = pres.From.User,  
  12.               Server=pres.From.Server,  
  13.               Resource=pres.From.Resource,  
  14.               RosterType=(PreType)((int)pres.Type)  
  15.           };  
  16.   
  17.           //if(pres.To==null)  
  18.           OnPresenceEvent(rt);  
  19.       }  


至此,完成一個成功的登錄過程。

    本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
    轉藏 分享 獻花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多