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

📄 formmain.cs

📁 即时通讯系统LanMsg
💻 CS
📖 第 1 页 / 共 4 页
字号:

		private void UserAVRequestArrival(LanMsg.Controls.ClassMsg msg, System.Net.IPAddress Ip, int Port)//收到视频聊天请求
		{

			ClassUserInfo userinfo =this.findUser(msg.ID);
			if (userinfo!=null)
			{
				string title= userinfo.UserName  +"("+ System.DateTime.Now.ToString() +")";
				foreach(System.Windows.Forms.Form form in forms)
					if (form.Tag.ToString() == userinfo.ID )
					{
						FormSendMsg f=(form as FormSendMsg );
						f.AVrequest(Ip,Port);
						f.Activate ();
						return;
					}

				FormSendMsg newf =new FormSendMsg();
				newf.Tag=msg.ID;
				newf.Text="与 "+ userinfo.UserName+"("+userinfo.ID+") 对话";
				forms.add(newf);
				newf.AVrequest(Ip,Port);
				ShowNotifyIcon(1,"","收到 "+userinfo.UserName +"("+ userinfo.ID  +") 发送给您的视频对话请求,您可以接收或取消视频对话。");
				newf.Show();
			}
		}

		private void UserTextChatArrival(LanMsg.Controls.ClassMsg msg, System.Net.IPAddress Ip, int Port)//处理用户发送来的文本消息
		{

			ClassUserInfo userinfo =this.findUser(msg.ID);
			if (userinfo!=null)
			{
				string title= userinfo.UserName  +"("+ System.DateTime.Now.ToString() +")";
				foreach(System.Windows.Forms.Form form in forms)
					if (form.Tag.ToString() == userinfo.ID )
					{
						FormSendMsg f=(form as FormSendMsg );
						f.newTextMsg(msg.MsgContent,title,new System.Drawing.Font("宋体",10), Color.Blue);
						f.Activate ();
						return;
					}

				FormSendMsg newf =new FormSendMsg();
				newf.Tag=msg.ID;
				newf.Text="与 "+ userinfo.UserName+"("+userinfo.ID+") 对话";
				newf.newTextMsg(msg.MsgContent,title,new System.Drawing.Font("宋体",10),Color.Blue );
				forms.add(newf);
				ShowNotifyIcon(1,"","收到 "+userinfo.UserName +"("+ userinfo.ID  +") 发送给您的新消息。");
				newf.Show();

			}
		}

		private void UserGifArrival(LanMsg.Controls.ClassMsg msg, System.Net.IPAddress Ip, int Port)//处理gif图片消息
		{

			ClassUserInfo userinfo =this.findUser(msg.ID);
			if (userinfo!=null)
			{

				this.sendMsgToOneUser(new LanMsg.Controls.ClassMsg(6,selfInfo.ID,null),userinfo.IP,userinfo.Port );//告诉发消息的联系人已经收到发送的消息
				string title= userinfo.UserName  +"("+ System.DateTime.Now.ToString() +")";
				//MsgAddToDB(msgRtf,msg.ID,selfInfo.ID,msg.AssemblyVersion,System.DateTime.Now.ToString(),true);//将消息添加进数据库
				foreach(System.Windows.Forms.Form form in forms)
					if (form.Tag.ToString() == userinfo.ID )
					{
						FormSendMsg f=(form as FormSendMsg );
						f.newMsg(msg.MsgContent,title,new System.Drawing.Font("宋体",10), Color.Blue);
						f.Activate ();
						return;
					}

				FormSendMsg newf =new FormSendMsg();
				newf.Tag=msg.ID;
				newf.Text="与 "+ userinfo.UserName+"("+userinfo.ID+") 对话";
				newf.newMsg(msg.MsgContent,title,new System.Drawing.Font("宋体",10),Color.Blue );
				forms.add(newf);
				ShowNotifyIcon(1,"","收到 "+userinfo.UserName +"("+ userinfo.ID  +") 发送给您的新消息。");
				newf.Show();

			}
		}

		private void sendFileRequest(LanMsg.Controls.ClassMsg msg,System.Net.IPAddress Ip, int Port) //处理联系人发送接收文件要求
		{
			ClassUserInfo userinfo =this.findUser(msg.ID);
			if (userinfo!=null)
			{
				string[] fileInfo= System.Text.Encoding.Unicode.GetString (msg.MsgContent).Split('|');
				ShowNotifyIcon(1,"",userinfo.UserName +"("+ userinfo.ID  +") 要求发送文件给您,请接收或拒绝。");
				foreach(System.Windows.Forms.Form form in forms)
					if (form.Tag.ToString() == userinfo.ID )
					{
						FormSendMsg f=(form as FormSendMsg );
						f.ReceiveFileRequest(fileInfo[0].ToString(),fileInfo[1].ToString(),Convert.ToInt64(fileInfo[2]),Ip,Port);
						f.Activate ();
						return;
					}
				FormSendMsg newf =new FormSendMsg();
				newf.Tag=msg.ID;
				newf.Text="与 "+ userinfo.UserName+"("+userinfo.ID+") 对话";
				newf.ReceiveFileRequest(fileInfo[0].ToString(),fileInfo[1].ToString(),Convert.ToInt64(fileInfo[2]),Ip,Port);
				forms.add(newf);
				newf.Show();
			}		
		}

		private void noticeArrival(LanMsg.Controls.ClassMsg msg,System.Net.IPAddress Ip, int Port) //处理联系人发送来的群发通知消息
		{
            ClassUserInfo userinfo =this.findUser(msg.ID);
			if (userinfo!=null)
			{
				string msgContent=System.Text.Encoding.Unicode.GetString(msg.MsgContent);
 				MsgAddToDB(msgContent,msg.ID,selfInfo.ID,msg.AssemblyVersion ,System.DateTime.Now.ToString(),"",false);//将消息添加进数据库
				LanMsg.FormNotice nt=new FormNotice();
				nt.RTBNoticeContent.AppendText(msgContent);
				nt.RTBNoticeContent.AppendText("\n发布:"+userinfo.UserName +"("+ userinfo.ID  +")");
				ShowNotifyIcon(3,"通知-消息","收到 "+userinfo.UserName +"("+ userinfo.ID  +") 发布的设计院 通知-消息");
				nt.Show();
			}
		}

		private void returnChatArrival(string ID ) //联系人返回已经收到刚才发送的对话消息
		{
			ClassUserInfo userinfo =this.findUser(ID);
			if (userinfo!=null)
				userinfo.SendIsSuccess=true;//标识刚才发送的消息联系人已经成功收到
		}

		private void UserChatArrival(LanMsg.Controls.ClassMsg msg, System.Net.IPAddress Ip, int Port)//处理对话消息
		{

			ClassUserInfo userinfo =this.findUser(msg.ID);
			if (userinfo!=null)
			{

				this.sendMsgToOneUser(new LanMsg.Controls.ClassMsg(6,selfInfo.ID,null),userinfo.IP,userinfo.Port );//告诉发消息的联系人已经收到发送的消息
				string title= userinfo.UserName  +"("+ System.DateTime.Now.ToString() +")";
				string msgRtf=System.Text.Encoding.Unicode.GetString(msg.MsgContent);
//				MsgAddToDB(msgRtf,msg.ID,selfInfo.ID,msg.AssemblyVersion,System.DateTime.Now.ToString(),true);//将消息添加进数据库
				foreach(System.Windows.Forms.Form form in forms)
					if (form.Tag.ToString() == userinfo.ID )
					{
						FormSendMsg f=(form as FormSendMsg );
						f.newMsg(msgRtf,title,new System.Drawing.Font("宋体",10), Color.Blue);
						f.Activate ();
						return;
					}

				FormSendMsg newf =new FormSendMsg();
				newf.Tag=msg.ID;
				newf.Text="与 "+ userinfo.UserName+"("+userinfo.ID+") 对话";
				newf.newMsg(msgRtf,title,new System.Drawing.Font("宋体",10),Color.Blue );
				forms.add(newf);
				ShowNotifyIcon(1,"","收到 "+userinfo.UserName +"("+ userinfo.ID  +") 发送给您的新消息。");
				newf.Show();

			}
		}

		private void NewUserLogin(ClassUserInfo userinfo)//添加新登录的用户资料
		{
//			if(userinfo.ID==selfInfo.ID )
//				return;//如果新登录的联系人是自己则退出
			ClassUserInfo UserInfo;  
			UserInfo=findUser(userinfo.ID);

			if(UserInfo==null )
			{
				userinfo.Node=new TreeNode();
				this.TvUsers.Nodes[userinfo.Dep].Nodes.Add(userinfo.Node);
				this.MyUsers.add(userinfo);

				userinfo.State =userinfo.State ;
				userinfo.Dep =userinfo.Dep ;
				userinfo.ID=userinfo.ID;
			}
			else
			{
				UserInfo.ID=userinfo.ID;
				UserInfo.Dep=userinfo.Dep;
				UserInfo.State  =userinfo.State;
				UserInfo.IP=userinfo.IP ;
				UserInfo.Port=userinfo.Port;
				UserInfo.UserName =userinfo.UserName;
				UserInfo.AssemblyVersion=userinfo.AssemblyVersion;
			}
			updateGroupInfo();//更新部门成员上线与未上线的数据
		}

		private void updateSelfState()//更新当前用户在线状态
		{
			selfInfo.State  =OnlineState;//将自己的在线状态设置为非0表示在线
			this.LabselfName.Text=selfInfo.UserName  + selfInfo.StateInfo ;
			this.LabselfName.Refresh();
		}

		private void userSingnOut(string ID) //处理用户离线
		{
			ClassUserInfo userinfo=this.findUser(ID);
			if(userinfo!=null)
			{
				int GroupIndex=userinfo.Dep ;
				if (userinfo.Dep==10)//如果用户在未知组
				{
					userinfo.Node.Parent.Nodes.Remove(userinfo.Node);
					this.MyUsers.Romove(userinfo);//在用户列表中删除未知组的此离线用户
				}
				else
				{
					userinfo.State=0;//标识用户已经离线
				}
				updateGroupInfo();//更新部门成员上线与未上线的数据
			}
		}

	   
		private void UsersDataArrival(Controls.ClassUsers users)//收到用户所有联系人的资料
		{
			ClassUserInfo UserInfo;  
			foreach(ClassUserInfo userinfo in users)
			{
				UserInfo=findUser(userinfo.ID);
				if(UserInfo==null)
				{
					userinfo.Node=new TreeNode();
					this.TvUsers.Nodes[userinfo.Dep].Nodes.Add(userinfo.Node);
					this.MyUsers.add(userinfo);

					userinfo.ID=userinfo.ID;
					userinfo.State =userinfo.State ;
					userinfo.Dep=userinfo.Dep;

					//updateGroupInfo(userinfo);
				}
			}
			updateGroupInfo();//更新部门成员上线与未上线的数据
		}
		private void updateGroupInfo()//更新部门成员上线与未上线的数据 
		{
			int Online=0;
			for(int i=0;i<this.TvUsers.Nodes.Count;i++)
			{
				for(int j=0;j<this.TvUsers.Nodes[i].Nodes.Count;j++)
					if(this.TvUsers.Nodes[i].Nodes[j].Text.IndexOf("(脱机)")==-1)
						Online++;
				this.TvUsers.Nodes[i].Text=Convert.ToString(this.TvUsers.Nodes[i].Tag) +"("+Online.ToString() +"/"+this.TvUsers.Nodes[i].Nodes.Count.ToString() +")";
				Online=0;
			}
		}

		private void updateGroupInfo(LanMsg.ClassUserInfo userinfo)//更新部门成员上线与未上线的数据 
		{
			int Online=0;
			int userCount=0;
			foreach(ClassUserInfo TempUserinfo in this.MyUsers)
				if(TempUserinfo.Dep==userinfo.Dep )
				{
					userCount++;
					if(TempUserinfo.State!=0) Online++;
				}
           userinfo.Node.Parent.Text=Convert.ToString(userinfo.Node.Parent.Tag)+"("+Online.ToString() +"/"+userCount.ToString()+")";
		}

		public ClassUserInfo findUser(string ID)//在我的用户列表中查找用户ID
		{
			foreach(ClassUserInfo userinfo in  this.MyUsers)
				if(userinfo.ID.ToLower()==ID.ToLower())
					return userinfo;
			return null;
		}

		private void SuccessLogin(LanMsg.Controls.ClassMsg msg)//服务器告诉用户已经成功登录的处理过程
		{
			//this.Text="成功登陆";
			ClassUserInfo self=(new  ClassSerializers().DeSerializeBinary (new System.IO.MemoryStream(msg.MsgContent ))) as ClassUserInfo;
 			selfInfo.UserName =self.UserName;
            selfInfo.State =1;
			this.LabselfName.Text=selfInfo.UserName  +"(联机)";
			this.LabselfName.Refresh();
			//ShowNotifyIcon(1,"","LanMsg已经成功登录服务器。");
		}

		private void TvUsers_DoubleClick(object sender, System.EventArgs e)
		{
             ActivateOrCreateFormSend();
		}

		private void ActivateOrCreateFormSend()//激活或创建新的消息发送窗体
		{
			if(this.TvUsers.SelectedNode.Parent!=null)
			{
				foreach(System.Windows.Forms.Form fo in forms)
					if (fo.Tag == this.TvUsers.SelectedNode.Tag)
					{
						fo.Activate ();return;
					}
			        FormSendMsg f =new FormSendMsg();
				    forms.add(f);
				    LanMsg.ClassUserInfo userinfo=this.findUser( this.TvUsers.SelectedNode.Tag.ToString());
				    if(userinfo!=null)
				    f.Text="与 "+ userinfo.UserName+"("+userinfo.ID+") 对话";
				    f.Tag=this.TvUsers.SelectedNode.Tag;
                    f.Show();
			}
		}
        
		private void FormMain_Load(object sender, System.EventArgs e)
		{
			this.Left=Screen.PrimaryScreen.WorkingArea.Width -this.Width;
			this.Top=200; 
		    BeginListen();
		}
         
		private void BeginListen()//
		{
			//AssemblyName assName = Assembly.GetExecutingAssembly().GetName(); 
			//string version = assName.Version.ToString(); 
			//System.Diagnostics.FileVersionInfo fInfo=new System.Diagnostics.FileVersionInfo();
		   System.Random i =new Random();
		   int j= i.Next(2000,6000);
           this.sockUDP1.Listen (j);//UDP开始侦听来自外部的消息.
		   selfInfo.Port=j;
		   selfInfo.ID=System.Net.Dns.GetHostName()+ j.ToString();// 
		   System.Reflection.AssemblyName assName = System.Reflection.Assembly.GetExecutingAssembly().GetName(); 
		   selfInfo.AssemblyVersion = assName.Version.ToString(); 
		   System.Threading.Thread.Sleep(3000);
           Login();//用户登录 
		   this.timerCheckOnlinState.Enabled=true;
		}

		private void butMenuMainExit_Click(object sender, System.EventArgs e)
		{
           AppExit();
		}

		private void FormMain_Closing(object sender, System.ComponentModel.CancelEventArgs e)
		{
			if(!IsWindowsExit) 
			{
				this.WindowState=System.Windows.Forms.FormWindowState.Minimized;
				this.Hide();
				e.Cancel=true;
			}
		}

		private void AppExit()//关闭Sock,退出程序
		{
			this.sockUDP1.CloseSock();
			Application.Exit();
		}

		private void Login()//用户登录
		{    
			 this.LabselfName.Text="正在登录...";
			 LanMsg.Controls.ClassMsg msg=new LanMsg.Controls.ClassMsg(1,selfInfo.ID,System.Text.Encoding.Unicode.GetBytes(selfInfo.AssemblyVersion));
			 sendMsgToServer(msg);
		}

		private void timerCheckOnlinState_Tick(object sender, System.EventArgs e)//检测自己的在线状态
		{

⌨️ 快捷键说明

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