📄 formmain.cs
字号:
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 + -