1、定义XmppClient
public XmppClient(string pstrIp,int pIntPort,string pstrUser,string pstrPas)
{
//构造XmppClient
xmpp = new XmppClientConnection(pstrIp);
xmpp.AutoAgents = false;
xmpp.AutoPresence = true;
xmpp.AutoRoster = true;
xmpp.AutoResolveConnectServer = true;
xmpp.Port = pIntPort;
xmpp.Username = pstrUser;
xmpp.Password = pstrPas;
xmpp.ConnectServer = pstrIp;
m_strServerName = Dns.GetHostEntry(IPAddress.Parse(pstrIp)).HostName; //获取服务器的计算机名
xmpp.Server = m_strServerName;
//登录成功过程
xmpp.OnSaslStart += new agsXMPP.sasl.SaslEventHandler(xmpp_OnSaslStart); //验证时触发
xmpp.OnLogin += new ObjectHandler(xmppCon_OnLogin); //登录成功时触发
xmpp.OnRosterItem += new XmppClientConnection.RosterHandler(xmpp_OnRosterItem); //当读取、添加、删除联系人时触发
xmpp.OnPresence += new PresenceHandler(xmppCon_OnPresence); //收到Presence节时引发的事件
//消息处理
xmpp.OnMessage += new MessageHandler(xmppCon_OnMessage); //消息事件
//错误处理
xmpp.OnSocketError += new ErrorHandler(xmpp_OnSocketError); //找不到服务器时触发
xmpp.OnError += new ErrorHandler(xmpp_OnError); //登录错误时触发
//关闭处理
xmpp.OnClose += new ObjectHandler(xmpp_OnClose); //网络中断或关闭事件
}
2、初始化定义的xmppClient,然后打开连接
xmppClient = new agsXMPPNet.XmppClient(psys.StrIp, psys.IntPort, psys.StrUser, psys.StrPas);
xmppClient.OnPresenceEvent += new agsXMPPNet.XmppClient.OnPresence(xmppClient_OnPresenceEvent);
xmppClient.OnRosterItemEvent += new agsXMPPNet.XmppClient.OnRosterItem(xmppClient_OnRosterItemEvent);
xmppClient.LoginEvent += new agsXMPPNet.XmppClient.MsgHandler(xmppClient_LoginEvent);
xmppClient.Login(); //这里其实就是xmpp.open()
3、设置验证
void xmpp_OnSaslStart(object sender, agsXMPP.sasl.SaslEventArgs args)
{
args.Auto = false;
args.Mechanism = agsXMPP.protocol.sasl.Mechanism.GetMechanismName
(agsXMPP.protocol.sasl.MechanismType.PLAIN);
}
4、登录成功事件
void xmppCon_OnLogin(object sender)
{
RosterItem rt = new RosterItem
{
IsLoginSucc = true
};
LoginEvent(rt);
}
5、读取联系人
/// <summary>
/// 当读取、添加、删除联系人时触发
/// </summary>
/// <param name="sender"></param>
/// <param name="item"></param>
void xmpp_OnRosterItem(object sender, agsXMPP.protocol.iq.roster.RosterItem item)
{
if (item.Subscription == agsXMPP.protocol.iq.roster.SubscriptionType.both)
{
//对方也添加自己为好友
OnRosterItemEvent(new RosterItem()
{
//StrGroupName = item.GetGroups().Count > 0 ? item.GetGroups().Item(0).InnerXml : "",
StrUserName = item.Jid.User,
StrReMarkName = string.IsNullOrWhiteSpace(item.Name) == true ? item.Jid.User : item.Name,
RosterType=PreType.Both
});
m_intCount = 0;
}
else if(item.Subscription==agsXMPP.protocol.iq.roster.SubscriptionType.remove)
{
//删除(对方删除自己)
OnRosterItemEvent(new RosterItem()
{
//StrGroupName = item.GetGroups().Count > 0 ? item.GetGroups().Item(0).InnerXml : "",
StrUserName = item.Jid.User,
StrReMarkName = string.IsNullOrWhiteSpace(item.Name) == true ? item.Jid.User : item.Name,
RosterType = PreType.ReMove
});
}
}
6、收到Presence节,触发事件,进行列表展示
/// <summary>
/// 收到Presence节时引发的事件
/// </summary>
/// <param name="sender"></param>
/// <param name="pres"></param>
void xmppCon_OnPresence(object sender, Presence pres)
{
RosterItem rt = new RosterItem
{
StrFrom = pres.From.ToString(),
StrUserName = pres.From.User,
Server=pres.From.Server,
Resource=pres.From.Resource,
RosterType=(PreType)((int)pres.Type)
};
//if(pres.To==null)
OnPresenceEvent(rt);
}