⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 xmppserverconnection.cs

📁 一个用C#编写的能实现即时通讯的工具
💻 CS
📖 第 1 页 / 共 2 页
字号:

		private void ProcessIQ(IQ iq)
		{
            //好友信息查询
            if (iq.HasTag(typeof(Info)))
            {
                if (iq.Type == IqType.get)
                {
                    Info _Info = iq.SelectSingleElement(typeof(Info)) as Info;
                    DataTable dt = usersTableAdapter.selectUser_byname(_Info.Name);
                    DataTable dt_group = groupTableAdapter.select_group();
                    iq.SwitchDirection();
                    iq.Type = IqType.result;

                    _Info.Name = dt.Rows[0][0].ToString();
                    _Info.FaceId = Convert.ToInt32(dt.Rows[0][2]);
                    _Info.Sex = dt.Rows[0][3].ToString();
                    _Info.Age = Convert.ToInt32(dt.Rows[0][4]);
                    for (int i = 0; i < dt_group.Rows.Count; i++)
                    {
                        if (dt_group.Rows[i][0].Equals(dt.Rows[0][5]))
                            _Info.Group = dt_group.Rows[i][1].ToString();
                    }
                    _Info.Tel = dt.Rows[0][6].ToString();
                    _Info.Email = dt.Rows[0][7].ToString();
                    Send(iq);
                    dt.Dispose();
                    dt_group.Dispose();
                }
                if (iq.Type == IqType.set)
                {
                    Info setInfo = iq.SelectSingleElement(typeof(Info)) as Info;
                    if (setInfo.Name == jid.User)
                    {
                        DatabaseDataSet databaseDataSet = new DatabaseDataSet();
                        usersTableAdapter.Update_userInfo(setInfo.Pwd, setInfo.FaceId, setInfo.Sex, setInfo.Age, setInfo.Tel, setInfo.Email, setInfo.Name);
                        usersTableAdapter.Update(databaseDataSet.users);
                        //修改成功
                    }
                }
            }
            if(iq.Query!=null)
            {
                //处理用户认证
			    if(iq.Query.GetType() == typeof(Auth))
			    {
				    Auth auth = iq.Query as Auth;
                    switch (iq.Type)
                    {
                        case IqType.get:
                            iq.SwitchDirection();
                            iq.Type = IqType.result;
                            auth.AddChild(new Element("password"));
                            auth.AddChild(new Element("digest"));
                            Send(iq);
                            break;
                        case IqType.set:
                            this.jid = new Jid(auth.Username, "localhost", "Resource");
                            //用户登陆认证
                            try
                            {
                                DataTable dt_auth = usersTableAdapter.selectUser_byname(auth.Username);
                                string str = util.Hash.Sha1Hash(this.SessionId + dt_auth.Rows[0][1].ToString());
                                if (auth.Digest == str)
                                {
                                    bool flag = false;//表示不存在
                                    foreach (XmppSeverConnection con in Online.onlineuser)
                                    {
                                        if (con.jid.User == auth.Username)
                                        {
                                            flag = true;
                                        }
                                    }
                                    if (!flag)
                                    {
                                        Online.onlineuser.Add(this);
                                        int itemNumber = frm.listViewOnlineUser.Items.Count;
                                        string[] subItem0 ={ auth.Username, m_Sock.RemoteEndPoint.ToString() };
                                        frm.listViewOnlineUser.Items.Insert(itemNumber, new ListViewItem(subItem0));

                                        iq.SwitchDirection();
                                        iq.Type = IqType.result;
                                        iq.Query = null;
                                        Send(iq);
                                    }
                                }
                                else
                                {
                                    iq.SwitchDirection();
                                    iq.Type = IqType.error;
                                    iq.Query = null;
                                    Send(iq);
                                }
                            }
                            catch (Exception ee)
                            { 
                            }
                            break;
                    }
			    }
                //处理用户列表与在线用户的发送
			    else if(iq.Query.GetType() == typeof(Roster))
			    {
				    ProcessRosterIQ(iq);
			    }
                //处理会议消息
                else if (iq.Query.GetType() == typeof(Browse))
                {
                    switch (iq.Type)
                    {
                        case IqType.get:
                            //加入会议室
                            foreach(Meeting meeting in Online.onlinemeeting)
                            {
                                if (meeting.jid.Equals(iq.To))
                                {
                                    if (iq.Query.Value == meeting.password)
                                    {
                                        iq.Type = IqType.result;
                                        iq.From = iq.To;
                                        this.Send(iq);


                                        //将会议中的参与者发给他
                                        Presence presence = new Presence();
                                        presence.Type = PresenceType.subscribe;
                                        foreach(Jid jd in meeting.userinmeeting)
                                        {
                                            presence.From = jd;
                                            this.Send(presence);
                                        }
                                        
                                        meeting.userinmeeting.Add(this.jid);
                                        //将他参与会议的消息发给所有会议中的参与者
                                        presence.From = this.jid;
                                        foreach (Jid jd2 in meeting.userinmeeting)
                                        {
                                            foreach (XmppSeverConnection con in Online.onlineuser)
                                            {
                                                if (jd2.Equals(con.jid))
                                                {
                                                    con.Send(presence);
                                                    break;
                                                }
                                            }
                                        }
                                    }
                                    else
                                    {
                                        iq.From = iq.To;
                                        iq.Type = IqType.error;
                                        this.Send(iq);
                                    }
                                    break;
                                }
                            }
                            break;

                        case IqType.set:
                            //建立会议室
                            Meeting meeting2 = new Meeting(iq.To, iq.Query.Value);
                            meeting2.userinmeeting.Add(this.jid);
                            Online.onlinemeeting.Add(meeting2);
                            //将新建的会议室通知所有人
                            Presence pre = new Presence();
                            pre.Type = PresenceType.probe;
                            pre.From = iq.To;

                            foreach (XmppSeverConnection con in Online.onlineuser)
                            {
                                con.Send(pre);
                            }
                            break;
                    }
                }
                    
            }
        
		}

		private void ProcessRosterIQ(IQ iq)
		{
			if (iq.Type == IqType.get)
			{
				// 发送用户列表
                getRosterItem(iq);
				Send(iq);

                //发送所有在线人及在线会议室的消息给他
                Presence pre;
                pre = new Presence();
                pre.Show = ShowType.chat;
                foreach (XmppSeverConnection con in Online.onlineuser)
                {
                    pre.From = con.jid;
                    Send(pre);
                }
                //将他在线消息发给所有在线人
                Presence pre1 = new Presence();
                pre1.Type = PresenceType.probe;
                foreach (Meeting meeting in Online.onlinemeeting)
                {
                    pre1.From = meeting.jid;
                    Send(pre1);
                }
			}
		}
        /*************************************************************
        * 2007-05-16   牛坤
        * 查询DataSet  即  得到用户列表   发送个登陆用户
        * 
        *用户登录验证 
        *************************************************************/
        #region  得到用户列表

        server.DatabaseDataSetTableAdapters.usersTableAdapter usersTableAdapter = new server.DatabaseDataSetTableAdapters.usersTableAdapter();
        server.DatabaseDataSetTableAdapters.groupTableAdapter groupTableAdapter = new server.DatabaseDataSetTableAdapters.groupTableAdapter();

        private IQ getRosterItem(IQ iq)
        {
            DataTable dt_group = groupTableAdapter.select_group();
            DataTable dt_users = usersTableAdapter.select_users();
            iq.SwitchDirection();
            iq.Type = IqType.result;
            for (int i = 0; i < dt_users.Rows.Count; i++)
            {
                RosterItem ri = new RosterItem();
                ri.Name = dt_users.Rows[i][0].ToString();
                ri.Subscription = SubscriptionType.both;
                ri.Jid = new Jid(ri.Name + "@localhost");
                for (int j = 0; j < dt_group.Rows.Count; j++)
                {
                    if (dt_group.Rows[j][0].Equals(dt_users.Rows[i][5]))
                        ri.AddGroup(dt_group.Rows[j][1].ToString());
                }
                ri.Value = dt_users.Rows[i][2].ToString();
                iq.Query.AddChild(ri);
            }
            return iq;
        }
        #endregion
		private void SendOpenStream()
		{
			// Send the Opening Strem to the client
			string ServerDomain = "localhost";
			
			this.SessionId = agsXMPP.SessionId.CreateNewId();
			
			
			StringBuilder sb = new StringBuilder();

			sb.Append( "<stream:stream from='");
			sb.Append( ServerDomain );
			
			sb.Append( "' xmlns='" );
			sb.Append( Uri.CLIENT );
			
			sb.Append( "' xmlns:stream='" );
			sb.Append( Uri.STREAM );
			
			sb.Append( "' id='" );
			sb.Append( this.SessionId );
			
			sb.Append( "'>" );

			Send( sb.ToString() );
		}

		private void Send(Element el)
		{
			Send(el.ToString());
		}
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -