FormMain.cs
上传用户:lqb116
上传日期:2014-04-04
资源大小:2712k
文件大小:30k
源码类别:

P2P编程

开发平台:

C#

  1. using System;
  2. using System.Drawing;
  3. using System.Collections;
  4. using System.ComponentModel;
  5. using System.Windows.Forms;
  6. using System.Data;
  7. namespace LanMsg 
  8. {
  9. /// <summary>
  10. /// Form1 的摘要说明。
  11. /// </summary>
  12. public class FormMain : System.Windows.Forms.Form
  13. {
  14. private LanMsg.Controls.SockUDP sockUDP1;
  15. private System.Windows.Forms.MainMenu mainMenu1;
  16. private System.Windows.Forms.MenuItem menuItem3;
  17. private System.Windows.Forms.ToolBar toolBar1;
  18. private System.Windows.Forms.ImageList imageList1;
  19. private System.Windows.Forms.ToolBarButton toolBarButton1;
  20. private System.Windows.Forms.MenuItem menuItemControl;
  21. private System.Windows.Forms.MenuItem menuItemControlServer;
  22. private System.Windows.Forms.MenuItem menuItemControlExit;
  23. private System.Windows.Forms.StatusBar statusBar1;
  24. internal System.Windows.Forms.TreeView TreeView1;
  25. internal System.Windows.Forms.Splitter Splitter1;
  26. private System.Windows.Forms.MenuItem menuItem1;
  27. private System.Windows.Forms.MenuItem menuItem2;
  28. internal System.Windows.Forms.Timer TimerCheckOnlineSta;
  29. private System.Windows.Forms.Panel panel1;
  30. private System.Windows.Forms.TabControl tabControl1;
  31. private System.Windows.Forms.TabPage tabPage1;
  32. private System.Windows.Forms.TabPage tabPage2;
  33. internal System.Windows.Forms.ListView LV_OnlineUser;
  34. internal System.Windows.Forms.ColumnHeader ID;
  35. internal System.Windows.Forms.ColumnHeader IP地址;
  36. internal System.Windows.Forms.ColumnHeader 端口;
  37. internal System.Windows.Forms.ColumnHeader 状态;
  38. internal System.Windows.Forms.ColumnHeader 部门;
  39. internal System.Windows.Forms.ColumnHeader 姓名;
  40. private System.Windows.Forms.ColumnHeader Version;
  41. internal System.Windows.Forms.ListView LV_SysUser;
  42. internal System.Windows.Forms.ColumnHeader ColumnHeader1;
  43. internal System.Windows.Forms.ColumnHeader ColumnHeader2;
  44. internal System.Windows.Forms.ColumnHeader ColumnHeader3;
  45. internal System.Windows.Forms.ColumnHeader ColumnHeader4;
  46. internal System.Windows.Forms.ColumnHeader ColumnHeader5;
  47. internal System.Windows.Forms.ColumnHeader ColumnHeader6;
  48. private System.Windows.Forms.ColumnHeader columnHeader7;
  49. private System.Windows.Forms.NotifyIcon notifyIcon1;
  50. private System.ComponentModel.IContainer components;
  51. private System.Windows.Forms.StatusBarPanel statusBarPanel1;
  52. private System.Windows.Forms.StatusBarPanel statusBarPanel2;
  53. internal System.Windows.Forms.Timer timerGetCurrVersion;
  54.         private string CurrVersion="2.0.0.1";
  55. public FormMain()
  56. {
  57. //
  58. // Windows 窗体设计器支持所必需的
  59. //
  60. InitializeComponent();
  61. //
  62. // TODO: 在 InitializeComponent 调用后添加任何构造函数代码
  63. //
  64. }
  65. /// <summary>
  66. /// 清理所有正在使用的资源。
  67. /// </summary>
  68. protected override void Dispose( bool disposing )
  69. {
  70. if( disposing )
  71. {
  72. if (components != null) 
  73. {
  74. components.Dispose();
  75. }
  76. }
  77. base.Dispose( disposing );
  78. }
  79. #region Windows 窗体设计器生成的代码
  80. /// <summary>
  81. /// 设计器支持所需的方法 - 不要使用代码编辑器修改
  82. /// 此方法的内容。
  83. /// </summary>
  84. private void InitializeComponent()
  85. {
  86. this.components = new System.ComponentModel.Container();
  87. System.Resources.ResourceManager resources = new System.Resources.ResourceManager(typeof(FormMain));
  88. this.sockUDP1 = new LanMsg.Controls.SockUDP(this.components);
  89. this.mainMenu1 = new System.Windows.Forms.MainMenu();
  90. this.menuItemControl = new System.Windows.Forms.MenuItem();
  91. this.menuItemControlServer = new System.Windows.Forms.MenuItem();
  92. this.menuItem3 = new System.Windows.Forms.MenuItem();
  93. this.menuItemControlExit = new System.Windows.Forms.MenuItem();
  94. this.menuItem1 = new System.Windows.Forms.MenuItem();
  95. this.menuItem2 = new System.Windows.Forms.MenuItem();
  96. this.toolBar1 = new System.Windows.Forms.ToolBar();
  97. this.toolBarButton1 = new System.Windows.Forms.ToolBarButton();
  98. this.imageList1 = new System.Windows.Forms.ImageList(this.components);
  99. this.statusBar1 = new System.Windows.Forms.StatusBar();
  100. this.statusBarPanel1 = new System.Windows.Forms.StatusBarPanel();
  101. this.statusBarPanel2 = new System.Windows.Forms.StatusBarPanel();
  102. this.TreeView1 = new System.Windows.Forms.TreeView();
  103. this.Splitter1 = new System.Windows.Forms.Splitter();
  104. this.TimerCheckOnlineSta = new System.Windows.Forms.Timer(this.components);
  105. this.panel1 = new System.Windows.Forms.Panel();
  106. this.tabControl1 = new System.Windows.Forms.TabControl();
  107. this.tabPage1 = new System.Windows.Forms.TabPage();
  108. this.LV_SysUser = new System.Windows.Forms.ListView();
  109. this.ColumnHeader1 = new System.Windows.Forms.ColumnHeader();
  110. this.ColumnHeader2 = new System.Windows.Forms.ColumnHeader();
  111. this.ColumnHeader3 = new System.Windows.Forms.ColumnHeader();
  112. this.ColumnHeader4 = new System.Windows.Forms.ColumnHeader();
  113. this.ColumnHeader5 = new System.Windows.Forms.ColumnHeader();
  114. this.ColumnHeader6 = new System.Windows.Forms.ColumnHeader();
  115. this.columnHeader7 = new System.Windows.Forms.ColumnHeader();
  116. this.tabPage2 = new System.Windows.Forms.TabPage();
  117. this.LV_OnlineUser = new System.Windows.Forms.ListView();
  118. this.ID = new System.Windows.Forms.ColumnHeader();
  119. this.IP地址 = new System.Windows.Forms.ColumnHeader();
  120. this.端口 = new System.Windows.Forms.ColumnHeader();
  121. this.状态 = new System.Windows.Forms.ColumnHeader();
  122. this.部门 = new System.Windows.Forms.ColumnHeader();
  123. this.姓名 = new System.Windows.Forms.ColumnHeader();
  124. this.Version = new System.Windows.Forms.ColumnHeader();
  125. this.notifyIcon1 = new System.Windows.Forms.NotifyIcon(this.components);
  126. this.timerGetCurrVersion = new System.Windows.Forms.Timer(this.components);
  127. ((System.ComponentModel.ISupportInitialize)(this.statusBarPanel1)).BeginInit();
  128. ((System.ComponentModel.ISupportInitialize)(this.statusBarPanel2)).BeginInit();
  129. this.panel1.SuspendLayout();
  130. this.tabControl1.SuspendLayout();
  131. this.tabPage1.SuspendLayout();
  132. this.tabPage2.SuspendLayout();
  133. this.SuspendLayout();
  134. // 
  135. // sockUDP1
  136. // 
  137. this.sockUDP1.Server = ((System.Net.IPEndPoint)(resources.GetObject("sockUDP1.Server")));
  138. this.sockUDP1.DataArrival += new LanMsg.Controls.SockUDP.DataArrivalEventHandler(this.sockUDP1_DataArrival);
  139. // 
  140. // mainMenu1
  141. // 
  142. this.mainMenu1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
  143.   this.menuItemControl,
  144.   this.menuItem1});
  145. // 
  146. // menuItemControl
  147. // 
  148. this.menuItemControl.Index = 0;
  149. this.menuItemControl.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
  150. this.menuItemControlServer,
  151. this.menuItem3,
  152. this.menuItemControlExit});
  153. this.menuItemControl.Text = "控件台(&C)";
  154. this.menuItemControl.Click += new System.EventHandler(this.menuItemControl_Click);
  155. // 
  156. // menuItemControlServer
  157. // 
  158. this.menuItemControlServer.Index = 0;
  159. this.menuItemControlServer.Text = "开始服务(&B)";
  160. this.menuItemControlServer.Click += new System.EventHandler(this.menuItemControlServer_Click);
  161. // 
  162. // menuItem3
  163. // 
  164. this.menuItem3.Index = 1;
  165. this.menuItem3.Text = "-";
  166. // 
  167. // menuItemControlExit
  168. // 
  169. this.menuItemControlExit.Index = 2;
  170. this.menuItemControlExit.Text = "退出(&E)";
  171. this.menuItemControlExit.Click += new System.EventHandler(this.menuItemControlExit_Click);
  172. // 
  173. // menuItem1
  174. // 
  175. this.menuItem1.Index = 1;
  176. this.menuItem1.MenuItems.AddRange(new System.Windows.Forms.MenuItem[] {
  177.   this.menuItem2});
  178. this.menuItem1.Text = "帮助(&H)";
  179. // 
  180. // menuItem2
  181. // 
  182. this.menuItem2.Index = 0;
  183. this.menuItem2.Text = "关于(&C)";
  184. // 
  185. // toolBar1
  186. // 
  187. this.toolBar1.Appearance = System.Windows.Forms.ToolBarAppearance.Flat;
  188. this.toolBar1.Buttons.AddRange(new System.Windows.Forms.ToolBarButton[] {
  189. this.toolBarButton1});
  190. this.toolBar1.DropDownArrows = true;
  191. this.toolBar1.ImageList = this.imageList1;
  192. this.toolBar1.Location = new System.Drawing.Point(0, 0);
  193. this.toolBar1.Name = "toolBar1";
  194. this.toolBar1.ShowToolTips = true;
  195. this.toolBar1.Size = new System.Drawing.Size(632, 28);
  196. this.toolBar1.TabIndex = 0;
  197. this.toolBar1.Visible = false;
  198. // 
  199. // toolBarButton1
  200. // 
  201. this.toolBarButton1.ImageIndex = 0;
  202. this.toolBarButton1.Style = System.Windows.Forms.ToolBarButtonStyle.ToggleButton;
  203. // 
  204. // imageList1
  205. // 
  206. this.imageList1.ImageSize = new System.Drawing.Size(16, 16);
  207. this.imageList1.ImageStream = ((System.Windows.Forms.ImageListStreamer)(resources.GetObject("imageList1.ImageStream")));
  208. this.imageList1.TransparentColor = System.Drawing.Color.Transparent;
  209. // 
  210. // statusBar1
  211. // 
  212. this.statusBar1.Location = new System.Drawing.Point(0, 371);
  213. this.statusBar1.Name = "statusBar1";
  214. this.statusBar1.Panels.AddRange(new System.Windows.Forms.StatusBarPanel[] {
  215.   this.statusBarPanel1,
  216.   this.statusBarPanel2});
  217. this.statusBar1.ShowPanels = true;
  218. this.statusBar1.Size = new System.Drawing.Size(632, 22);
  219. this.statusBar1.TabIndex = 1;
  220. // 
  221. // statusBarPanel1
  222. // 
  223. this.statusBarPanel1.Width = 300;
  224. // 
  225. // statusBarPanel2
  226. // 
  227. this.statusBarPanel2.AutoSize = System.Windows.Forms.StatusBarPanelAutoSize.Spring;
  228. this.statusBarPanel2.Width = 316;
  229. // 
  230. // TreeView1
  231. // 
  232. this.TreeView1.Dock = System.Windows.Forms.DockStyle.Left;
  233. this.TreeView1.ImageIndex = -1;
  234. this.TreeView1.ItemHeight = 14;
  235. this.TreeView1.Location = new System.Drawing.Point(0, 28);
  236. this.TreeView1.Name = "TreeView1";
  237. this.TreeView1.SelectedImageIndex = -1;
  238. this.TreeView1.Size = new System.Drawing.Size(121, 343);
  239. this.TreeView1.TabIndex = 6;
  240. this.TreeView1.Visible = false;
  241. // 
  242. // Splitter1
  243. // 
  244. this.Splitter1.Location = new System.Drawing.Point(121, 28);
  245. this.Splitter1.Name = "Splitter1";
  246. this.Splitter1.Size = new System.Drawing.Size(4, 343);
  247. this.Splitter1.TabIndex = 7;
  248. this.Splitter1.TabStop = false;
  249. this.Splitter1.Visible = false;
  250. // 
  251. // TimerCheckOnlineSta
  252. // 
  253. this.TimerCheckOnlineSta.Enabled = true;
  254. this.TimerCheckOnlineSta.Interval = 60000;
  255. this.TimerCheckOnlineSta.Tick += new System.EventHandler(this.TimerCheckOnlineSta_Tick);
  256. // 
  257. // panel1
  258. // 
  259. this.panel1.BorderStyle = System.Windows.Forms.BorderStyle.Fixed3D;
  260. this.panel1.Controls.Add(this.tabControl1);
  261. this.panel1.Dock = System.Windows.Forms.DockStyle.Fill;
  262. this.panel1.Location = new System.Drawing.Point(125, 28);
  263. this.panel1.Name = "panel1";
  264. this.panel1.Size = new System.Drawing.Size(507, 343);
  265. this.panel1.TabIndex = 8;
  266. // 
  267. // tabControl1
  268. // 
  269. this.tabControl1.Controls.Add(this.tabPage1);
  270. this.tabControl1.Controls.Add(this.tabPage2);
  271. this.tabControl1.Dock = System.Windows.Forms.DockStyle.Fill;
  272. this.tabControl1.Location = new System.Drawing.Point(0, 0);
  273. this.tabControl1.Name = "tabControl1";
  274. this.tabControl1.SelectedIndex = 0;
  275. this.tabControl1.Size = new System.Drawing.Size(503, 339);
  276. this.tabControl1.TabIndex = 0;
  277. // 
  278. // tabPage1
  279. // 
  280. this.tabPage1.Controls.Add(this.LV_SysUser);
  281. this.tabPage1.Location = new System.Drawing.Point(4, 21);
  282. this.tabPage1.Name = "tabPage1";
  283. this.tabPage1.Size = new System.Drawing.Size(495, 314);
  284. this.tabPage1.TabIndex = 0;
  285. this.tabPage1.Text = "系统用户";
  286. // 
  287. // LV_SysUser
  288. // 
  289. this.LV_SysUser.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
  290.  this.ColumnHeader1,
  291.  this.ColumnHeader2,
  292.  this.ColumnHeader3,
  293.  this.ColumnHeader4,
  294.  this.ColumnHeader5,
  295.  this.ColumnHeader6,
  296.  this.columnHeader7});
  297. this.LV_SysUser.Dock = System.Windows.Forms.DockStyle.Fill;
  298. this.LV_SysUser.FullRowSelect = true;
  299. this.LV_SysUser.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
  300. this.LV_SysUser.Location = new System.Drawing.Point(0, 0);
  301. this.LV_SysUser.Name = "LV_SysUser";
  302. this.LV_SysUser.Size = new System.Drawing.Size(495, 314);
  303. this.LV_SysUser.TabIndex = 14;
  304. this.LV_SysUser.View = System.Windows.Forms.View.Details;
  305. // 
  306. // ColumnHeader1
  307. // 
  308. this.ColumnHeader1.Text = "ID";
  309. this.ColumnHeader1.Width = 72;
  310. // 
  311. // ColumnHeader2
  312. // 
  313. this.ColumnHeader2.Text = "IP地址";
  314. this.ColumnHeader2.Width = 122;
  315. // 
  316. // ColumnHeader3
  317. // 
  318. this.ColumnHeader3.Text = "端口";
  319. // 
  320. // ColumnHeader4
  321. // 
  322. this.ColumnHeader4.Text = "状态";
  323. this.ColumnHeader4.Width = 44;
  324. // 
  325. // ColumnHeader5
  326. // 
  327. this.ColumnHeader5.Text = "部门";
  328. this.ColumnHeader5.Width = 40;
  329. // 
  330. // ColumnHeader6
  331. // 
  332. this.ColumnHeader6.Text = "姓名";
  333. this.ColumnHeader6.Width = 90;
  334. // 
  335. // columnHeader7
  336. // 
  337. this.columnHeader7.Text = "Version";
  338. this.columnHeader7.Width = 120;
  339. // 
  340. // tabPage2
  341. // 
  342. this.tabPage2.Controls.Add(this.LV_OnlineUser);
  343. this.tabPage2.Location = new System.Drawing.Point(4, 21);
  344. this.tabPage2.Name = "tabPage2";
  345. this.tabPage2.Size = new System.Drawing.Size(495, 314);
  346. this.tabPage2.TabIndex = 1;
  347. this.tabPage2.Text = "在线用户";
  348. // 
  349. // LV_OnlineUser
  350. // 
  351. this.LV_OnlineUser.Columns.AddRange(new System.Windows.Forms.ColumnHeader[] {
  352. this.ID,
  353. this.IP地址,
  354. this.端口,
  355. this.状态,
  356. this.部门,
  357. this.姓名,
  358. this.Version});
  359. this.LV_OnlineUser.Dock = System.Windows.Forms.DockStyle.Fill;
  360. this.LV_OnlineUser.FullRowSelect = true;
  361. this.LV_OnlineUser.HeaderStyle = System.Windows.Forms.ColumnHeaderStyle.Nonclickable;
  362. this.LV_OnlineUser.Location = new System.Drawing.Point(0, 0);
  363. this.LV_OnlineUser.Name = "LV_OnlineUser";
  364. this.LV_OnlineUser.Size = new System.Drawing.Size(495, 314);
  365. this.LV_OnlineUser.TabIndex = 13;
  366. this.LV_OnlineUser.View = System.Windows.Forms.View.Details;
  367. // 
  368. // ID
  369. // 
  370. this.ID.Text = "ID";
  371. this.ID.Width = 72;
  372. // 
  373. // IP地址
  374. // 
  375. this.IP地址.Text = "IP地址";
  376. this.IP地址.Width = 122;
  377. // 
  378. // 端口
  379. // 
  380. this.端口.Text = "端口";
  381. // 
  382. // 状态
  383. // 
  384. this.状态.Text = "状态";
  385. this.状态.Width = 44;
  386. // 
  387. // 部门
  388. // 
  389. this.部门.Text = "部门";
  390. this.部门.Width = 40;
  391. // 
  392. // 姓名
  393. // 
  394. this.姓名.Text = "姓名";
  395. this.姓名.Width = 90;
  396. // 
  397. // Version
  398. // 
  399. this.Version.Text = "Version";
  400. this.Version.Width = 120;
  401. // 
  402. // notifyIcon1
  403. // 
  404. this.notifyIcon1.Icon = ((System.Drawing.Icon)(resources.GetObject("notifyIcon1.Icon")));
  405. this.notifyIcon1.Text = "LanMsg服务";
  406. this.notifyIcon1.Visible = true;
  407. this.notifyIcon1.MouseDown += new System.Windows.Forms.MouseEventHandler(this.notifyIcon1_MouseDown);
  408. this.notifyIcon1.DoubleClick += new System.EventHandler(this.notifyIcon1_DoubleClick);
  409. // 
  410. // timerGetCurrVersion
  411. // 
  412. this.timerGetCurrVersion.Enabled = true;
  413. this.timerGetCurrVersion.Interval = 1800000;
  414. this.timerGetCurrVersion.Tick += new System.EventHandler(this.timerGetCurrVersion_Tick);
  415. // 
  416. // FormMain
  417. // 
  418. this.AutoScaleBaseSize = new System.Drawing.Size(6, 14);
  419. this.ClientSize = new System.Drawing.Size(632, 393);
  420. this.Controls.Add(this.panel1);
  421. this.Controls.Add(this.Splitter1);
  422. this.Controls.Add(this.TreeView1);
  423. this.Controls.Add(this.statusBar1);
  424. this.Controls.Add(this.toolBar1);
  425. this.Menu = this.mainMenu1;
  426. this.Name = "FormMain";
  427. this.Text = "LanMsg服务";
  428. this.WindowState = System.Windows.Forms.FormWindowState.Maximized;
  429. this.Resize += new System.EventHandler(this.FormMain_Resize);
  430. this.Closing += new System.ComponentModel.CancelEventHandler(this.FormMain_Closing);
  431. this.Load += new System.EventHandler(this.Form1_Load);
  432. ((System.ComponentModel.ISupportInitialize)(this.statusBarPanel1)).EndInit();
  433. ((System.ComponentModel.ISupportInitialize)(this.statusBarPanel2)).EndInit();
  434. this.panel1.ResumeLayout(false);
  435. this.tabControl1.ResumeLayout(false);
  436. this.tabPage1.ResumeLayout(false);
  437. this.tabPage2.ResumeLayout(false);
  438. this.ResumeLayout(false);
  439. }
  440. #endregion
  441. /// <summary>
  442. /// 应用程序的主入口点。
  443. /// </summary>
  444. [STAThread]
  445. static void Main() 
  446. {
  447. Application.Run(new FormMain());
  448. }
  449. private void Form1_Load(object sender, System.EventArgs e)
  450. {
  451. //            GetAllUserInfo();//从数据库中获得系统用户
  452. //              showCurrVersion();//获得当前客户端的最新版本,也决定是否要求登录的客户端升级
  453. }
  454. private void showCurrVersion()
  455. {
  456. this.CurrVersion=Convert.ToString(new ClassOptionData().ExSQLReField("AssemblyVersion","select AssemblyVersion from Web_AssemblyVersion where softWareName='LanMsg'"));
  457.             this.statusBar1.Panels[1].Text="客户端当前最新版:"+ this.CurrVersion;
  458. }
  459. private void Server(bool IsServer)//开始或停止服务
  460. {
  461. if(IsServer)
  462. this.sockUDP1.Listen(3211);
  463. else
  464. this.sockUDP1.CloseSock();
  465. }
  466. private void sockUDP1_DataArrival(byte[] Data, System.Net.IPAddress Ip, int Port)//当有数据到达后调用新的处理进程
  467. {
  468. DataArrivaldelegate outdelegate = new DataArrivaldelegate( DataArrival); 
  469. this.BeginInvoke (outdelegate, new object[]{ Data,Ip,Port}); 
  470. }
  471. private delegate void DataArrivaldelegate(byte[] Data, System.Net.IPAddress Ip, int Port); 
  472. private void DataArrival(byte[] Data, System.Net.IPAddress Ip, int Port) //当有数据到达后的处理进程
  473. try
  474. {
  475. LanMsg.Controls.ClassMsg msg=new LanMsg.Controls.ClassSerializers().DeSerializeBinary((new System.IO.MemoryStream(Data))) as LanMsg.Controls.ClassMsg;
  476. switch(msg.MsgInfoClass)
  477. {
  478. case 1://处理用户登录过程
  479. NewUserLogin(msg,Ip,Port);
  480. break;
  481. case 2://用户询问自己是否在线,并更改其在线状态
  482. updateUserState(msg,Ip,  Port);//更新用户状态信息
  483. break;
  484. }
  485. }
  486. catch(Exception e)
  487. {}
  488. }
  489. private void updateUserState(Controls.ClassMsg msg, System.Net.IPAddress Ip, int Port)//更新用户状态信息
  490. {
  491. try
  492. {
  493. //this.textBox1.AppendText ("用户"+ msg.ID +"状态更新n");
  494. string state=System.Text.Encoding.Unicode.GetString((msg.MsgContent ));
  495. System.Windows.Forms.ListViewItem item=FindUser(msg.ID ,this.LV_OnlineUser );
  496. if(item!=null)
  497. {
  498. item.SubItems[3].Text =state;
  499. if(state=="0")
  500. this.LV_OnlineUser.Items.Remove(item);
  501. }
  502. item=FindUser(msg.ID ,this.LV_SysUser  );
  503. if(item!=null)
  504. {
  505. item.SubItems[3].Text =state;
  506. if(state=="0" && item.SubItems[4].Text =="10") 
  507. this.LV_SysUser.Items.Remove(item);
  508. }
  509. this.SendMsgToOne(Ip,Port,new Controls.ClassMsg( 2,"",null));//告诉用户在线
  510. }
  511. catch(Exception e){}
  512. }
  513. private void NewUserLogin(Controls.ClassMsg msg, System.Net.IPAddress Ip, int Port)//处理用户登录过程
  514. {
  515. try
  516. {
  517. // this.textBox1.AppendText ("用户"+ msg.ID +"登录n");
  518. ClassUserInfo selfInfo=new ClassUserInfo();//准备添加新用户的资料
  519. selfInfo.ID=msg.ID;
  520. selfInfo.UserName =msg.ID;
  521. selfInfo.IP=Ip;
  522. selfInfo.Port=Port;
  523. selfInfo.State =1;
  524. selfInfo.Dep =10;
  525. selfInfo.AssemblyVersion=System.Text.Encoding.Unicode.GetString(msg.MsgContent);
  526. System.Windows.Forms.ListViewItem item=FindUser(msg.ID ,this.LV_SysUser);
  527. if(item!=null)//如果此用户是sysuser,那么更改其上线信息,并把他的所有联系人的信息发送给它
  528. {
  529. item.SubItems[1].Text=Ip.ToString();
  530. item.SubItems[2].Text=Port.ToString();
  531. item.SubItems[3].Text="1";//1表示用户在线状态为联机
  532. item.SubItems[6].Text =selfInfo.AssemblyVersion;//更新其版本号
  533. selfInfo.UserName =item.SubItems[5].Text;
  534. selfInfo.Dep =Convert.ToInt32(item.SubItems[4].Text);
  535. //在在线用户表中查找此用户是否存在,如果不存在则添加,如果存在就不做任何操作
  536. System.Windows.Forms.ListViewItem items=FindUser(msg.ID ,this.LV_OnlineUser );
  537. if(items!=null)//如果用户不在在线用户列表里面,则添加
  538. {
  539. items.SubItems[1].Text=Ip.ToString();
  540. items.SubItems[2].Text=Port.ToString();
  541. items.SubItems[3].Text="1";//1表示用户在线状态为联机
  542. items.SubItems[6].Text =selfInfo.AssemblyVersion;//更新其版本号
  543. }
  544. else//如果是用户不在在线列表中,则添加
  545. {
  546. System.Windows.Forms.ListViewItem NewItem=new ListViewItem();
  547. NewItem=item.Clone() as ListViewItem;
  548. this.LV_OnlineUser.Items.Add(NewItem);
  549. }
  550. }
  551. else//如果此用户不是sysuser,那么将其添加入系统用户列表与在线用户列表并更改其上线信息,并把他的所有联系人的信息发送给它
  552. {
  553. System.Windows.Forms.ListViewItem NewItem=new ListViewItem();
  554. NewItem.Text=msg.ID;
  555. NewItem.SubItems.Add(Ip.ToString());
  556. NewItem.SubItems.Add(Port.ToString());
  557. NewItem.SubItems.Add("1");//1表示用户在线状态为联机
  558. NewItem.SubItems.Add("10");//10表示用户为未知组用户
  559. NewItem.SubItems.Add(msg.ID);// 未知组用户的姓名均为ID
  560. NewItem.SubItems.Add(selfInfo.AssemblyVersion);//表示用户软件版本号
  561. this.LV_SysUser.Items.Add (NewItem);   
  562. this.LV_OnlineUser.Items.Add(NewItem.Clone() as ListViewItem);
  563. }
  564.             
  565. if(selfInfo.AssemblyVersion.Trim()!=this.CurrVersion.Trim())//如果当前用户不是最新版,通知其升级到最新版
  566. this.SendMsgToOne(Ip,Port,new LanMsg.Controls.ClassMsg(16,"",null));
  567. //发送消息告诉用户已经登录到服务器,并将其服务器上的个人资料发回
  568. LanMsg.Controls.ClassMsg ToOneMsg =new LanMsg.Controls.ClassMsg(1,"",new Controls.ClassSerializers().SerializeBinary(selfInfo).ToArray() );
  569. this.SendMsgToOne(Ip,Port,ToOneMsg);
  570. // this.textBox1.AppendText ("将其服务器上的个人资料发回"+ Ip.ToString() + Port.ToString() +msg.ID +"n");
  571.             
  572. System.Threading.Thread.Sleep(100);
  573. //发回此用户所有联系人的资料
  574. LanMsg.Controls.ClassUsers allUsers=Users();//返回所有用户联系人的资料
  575. System.Threading.Thread.Sleep(100);
  576. ToOneMsg =new LanMsg.Controls.ClassMsg(4,"",new Controls.ClassSerializers().SerializeBinary(allUsers).ToArray());
  577. this.SendMsgToOne(Ip,Port,ToOneMsg);
  578. // this.textBox1.AppendText ("返回所有用户联系人的资料"+ msg.ID +"n");
  579.              
  580. //将登录用户资料发送给其全部联系人,告之用户登录
  581. System.Threading.Thread.Sleep(100);
  582. ToOneMsg =new LanMsg.Controls.ClassMsg(3,"",new Controls.ClassSerializers().SerializeBinary(selfInfo).ToArray());
  583. this.SendMsgToAll( ToOneMsg);
  584. // this.textBox1.AppendText ("告之用户登录"+ msg.ID +"n");
  585. }
  586. catch(Exception e){}
  587. }
  588. private LanMsg.Controls.ClassUsers Users()//返回所有用户联系人的资料
  589. {
  590. try
  591. {
  592. LanMsg.Controls.ClassUsers  allUsers=new LanMsg.Controls.ClassUsers();
  593. foreach(System.Windows.Forms.ListViewItem item in this.LV_SysUser.Items )
  594. {
  595. ClassUserInfo userInfo=new ClassUserInfo();
  596. userInfo.ID=item.Text;
  597. userInfo.IP=System.Net.IPAddress.Parse(item.SubItems[1].Text);
  598. userInfo.Port =Convert.ToInt32(item.SubItems[2].Text) ;
  599. userInfo.State  =Convert.ToInt32(item.SubItems[3].Text) ;
  600. userInfo.Dep  =Convert.ToInt32(item.SubItems[4].Text) ;
  601. userInfo.UserName = item.SubItems[5].Text;
  602. userInfo.AssemblyVersion= item.SubItems[6].Text;
  603. allUsers.add(userInfo);
  604. }
  605. return allUsers;
  606. }
  607. catch(Exception e){return null;}
  608. }
  609. private System.Windows.Forms.ListViewItem FindUser(string UserID,System.Windows.Forms.ListView LV)//在相应的ListView里查找用户
  610. {
  611. try
  612. {
  613. foreach(System.Windows.Forms.ListViewItem item in  LV.Items)
  614. if(item.Text.ToLower()==UserID.ToLower())//找到用户,说明是系统用户,返回它的值
  615. return item;
  616. return null;
  617. }
  618. catch(Exception e){return null;}
  619. }
  620. private void menuItemControlExit_Click(object sender, System.EventArgs e)
  621. {
  622. FormMain_Closing(sender,null);
  623. }
  624. private void FormMain_Closing(object sender, System.ComponentModel.CancelEventArgs e)
  625. {
  626. if(menuItemControlServer.Text=="停止服务(&S)")
  627. if(MessageBox.Show("确定要关闭服务并退出程序吗?","提示",MessageBoxButtons.YesNoCancel,MessageBoxIcon.Question) ==System.Windows.Forms.DialogResult.Yes)
  628. {
  629. this.sockUDP1.CloseSock();
  630. Application.Exit();
  631. }
  632. }
  633. private void menuItemControlServer_Click(object sender, System.EventArgs e)
  634. {
  635. if (menuItemControlServer.Text=="开始服务(&B)")
  636. {
  637. menuItemControlServer.Text="停止服务(&S)";
  638. Server(true);//开始服务
  639. this.statusBar1.Panels[0].Text="服务已经启动";
  640. }
  641. else
  642. {
  643. menuItemControlServer.Text="开始服务(&B)";
  644. Server(false);//停止服务
  645. this.statusBar1.Panels[0].Text="服务已经关闭";
  646. }
  647. }
  648. private void TimerCheckOnlineSta_Tick(object sender, System.EventArgs e)
  649. {
  650. CheckOnlineSta();//系统每隔一分钟检查一次用户在线状态,不在线的则删除并通知其联系人
  651. }
  652. private void  CheckOnlineSta()//系统每隔一分钟检查一次用户在线状态,不在线的则删除并通知其联系人
  653. {
  654. try
  655. {
  656. foreach(System.Windows.Forms.ListViewItem item in this.LV_OnlineUser.Items)
  657. {
  658. if(item.SubItems[3].Text=="0")//如果用户已经脱机,则删除并通知其全部联系人
  659. {
  660. System.Windows.Forms.ListViewItem TempItem=FindUser(item.Text,this.LV_SysUser);//在系统用户表中查找此用户的信息
  661. if(TempItem!=null)
  662. {
  663. if(item.SubItems[4].Text=="10")//如果部门为未知,则在系统用户表中删除此用户
  664. this.LV_SysUser.Items.Remove(TempItem);
  665. else//如果是本系统用户则更新状态
  666. TempItem.SubItems[3].Text="0";//更新系统用户的在线状态
  667. }
  668. LanMsg.Controls.ClassMsg msg =new LanMsg.Controls.ClassMsg(0,item.Text, null);
  669. SendMsgToAll(msg);//发送消息给所有此用户的联系人,告之用户掉线
  670. this.LV_OnlineUser.Items.Remove(item);//在在线用户列表中删除此用户信息
  671. else
  672. {
  673. item.SubItems[3].Text ="0";//假设此用户已经掉线
  674. }
  675. }
  676. }
  677. catch(Exception e){}
  678. }
  679. private void SendMsgToOne(System.Net.IPAddress ip,int port,Controls.ClassMsg msg)//发送消息给一个用户
  680. {
  681. try
  682. {
  683. System.IO.MemoryStream stream= new Controls.ClassSerializers().SerializeBinary(msg);
  684. LanMsg.Controls.SockUDP udp=new LanMsg.Controls.SockUDP();
  685. udp.Send(ip,port,stream.ToArray());
  686. }
  687. catch(Exception e){}
  688. }
  689. private void SendMsgToAll(Controls.ClassMsg msg)//发送消息给所有用户
  690. {
  691. try
  692. {
  693. foreach(System.Windows.Forms.ListViewItem item in this.LV_OnlineUser.Items)
  694. {
  695. System.Net.IPAddress ip=System.Net.IPAddress.Parse(item.SubItems[1].Text);
  696. int port=Convert.ToInt32 (item.SubItems[2].Text);
  697. System.IO.MemoryStream stream= new Controls.ClassSerializers().SerializeBinary(msg);
  698. LanMsg.Controls.SockUDP udp=new LanMsg.Controls.SockUDP();
  699. udp.Send(ip,port,stream.ToArray());
  700. }
  701. }
  702. catch(Exception e){}
  703. }
  704. private void GetAllUserInfo() //读取数据库中所有用户数据到列表中
  705. try
  706. {
  707. System.Data.OleDb.OleDbDataReader dr;
  708. string  SQLstr= "select Sys_Users.UserName as computer,Mp_EmpLoyee.DepID as Dept,Mp_EmpLoyee.EmpName as UserName from Sys_Users,Mp_EmpLoyee where Mp_EmpLoyee.EmpID=Sys_Users.EmpID and (Sys_Users.IsWork is null or Sys_Users.IsWork>0)";
  709. dr=new ClassOptionData().ExSQLReDr(SQLstr);
  710. while(dr.Read())
  711. {
  712. AllOneUserInfoToLV(LV_SysUser, Convert.ToString(dr["computer"]), "127.0.0.1", "0", "0",Convert.ToString(dr["dept"]), Convert.ToString(dr["UserName"]));
  713. }
  714. dr.Close();
  715. }
  716. catch(Exception e){}
  717. }
  718. private void AllOneUserInfoToLV( System.Windows.Forms.ListView LV, string  Computer, string  IpAddress,string  port, string  OnlineSta, string  Dept, string  UserName )//'处理新登录用户的信息数据)
  719. {
  720. try
  721. {
  722. System.Windows.Forms.ListViewItem   NewItem =new  ListViewItem();
  723. NewItem.Text  = Computer.Trim().ToLower(); //      '添加用户计算机名与端口号信息
  724. NewItem.SubItems.Add(IpAddress); //'添加用户IP地址信息
  725. NewItem.SubItems.Add(port); //  '添加用户端口信息
  726. NewItem.SubItems.Add(OnlineSta);// '在线状态
  727. NewItem.SubItems.Add(getDept(Dept));//'设置用户部门为未知
  728. NewItem.SubItems.Add(UserName.Trim());//'添加用户姓名信息
  729. NewItem.SubItems.Add("");//'添加用户姓名信息
  730. LV.Items.Add(NewItem);// '添加此登录用户的所有信息到系统列表中 
  731. }
  732. catch(Exception e){}
  733. }
  734. private string getDept(string Dept)
  735. {
  736. switch(Dept)
  737. {
  738. case  "12":
  739. return "0";
  740.                     break;
  741. case  "8":
  742.     return "1";    
  743.                     break;
  744. case  "13":
  745. return "1"; 
  746.                     break;
  747. case  "14":
  748. return "1"; 
  749.                     break;
  750. case  "15":
  751. return "1"; 
  752.                     break;
  753. case  "3":
  754. return "2";
  755.                     break;
  756. case  "5":
  757. return "3";
  758.                     break;
  759. case  "2":
  760. return "3"; 
  761.                     break;
  762. case  "11":
  763. return "4";
  764.                     break;
  765. case  "9":
  766. return "5";
  767.                     break;
  768. case  "10":
  769. return "6"; 
  770.                     break;
  771. case  "4":
  772. return "7";
  773.                     break;
  774. case  "16":
  775. return "8";
  776.                     break;
  777.                 case "6": 
  778.     return "9"; 
  779. break;
  780. }
  781. return "10";
  782. }
  783. private void menuItemControl_Click(object sender, System.EventArgs e)
  784. {
  785. }
  786. private void notifyIcon1_MouseDown(object sender, System.Windows.Forms.MouseEventArgs e)
  787. {
  788. }
  789. private void notifyIcon1_DoubleClick(object sender, System.EventArgs e)
  790. {
  791. this.WindowState=System.Windows.Forms.FormWindowState.Maximized ;
  792. this.Show();
  793. this.Activate();
  794. }
  795. private void FormMain_Resize(object sender, System.EventArgs e)
  796. {
  797. if(this.WindowState==System.Windows.Forms.FormWindowState.Minimized)
  798. this.Hide();
  799. }
  800. private void timerGetCurrVersion_Tick(object sender, System.EventArgs e)
  801. {
  802. showCurrVersion();
  803. }
  804. }
  805. }