frmMain.cs 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497
  1. using System;
  2. using System.Collections.Generic;
  3. using System.ComponentModel;
  4. using System.Data;
  5. using System.Drawing;
  6. using System.Linq;
  7. using System.Text;
  8. using System.Windows.Forms;
  9. using LYFZ;
  10. using HPSocketCS.Extended;
  11. namespace LYFZ.ERPCloudServer
  12. {
  13. public partial class frmMain : LYFZ.ComponentLibrary.BaseContentsFormMain
  14. {
  15. public frmMain()
  16. {
  17. InitializeComponent();
  18. this.btnSaveSet.Click += btnSaveSet_Click;
  19. this.Load += frmMain_Load;
  20. this.btnStart.Click += btnStart_Click;
  21. this.btnStop.Click += btnStop_Click;
  22. this.TraceListenerLog = new HPSocketCS.Extended.CustomTraceListener(this.txtTraceListenerLog);
  23. this.NetServer.TraceListenerLog = this.TraceListenerLog;
  24. this.NetServer.EventSerializationDataRequest += NetServer_EventSerializationDataRequest;
  25. this.NetServer.EventFileDataRequest += NetServer_EventFileDataRequest;
  26. this.btnBrowse.Click += btnBrowse_Click;
  27. this.btnBrowseInstallation.Click += btnBrowseInstallation_Click;
  28. this.btnBrowseFileDirPath.Click += btnBrowseFileDirPath_Click;
  29. this.btnBrowseBakFileDirPath.Click += btnBrowseBakFileDirPath_Click;
  30. ServerDataReturn = new LYFZ.CloudServerData.BJBServerDataReturnProcess(this.bjbServerCon);
  31. this.btnRefreshList.Click += btnRefreshList_Click;
  32. }
  33. void btnRefreshList_Click(object sender, EventArgs e)
  34. {
  35. RefreshClientList();
  36. }
  37. void RefreshClientList()
  38. {
  39. this.listbxClientList.Items.Clear();
  40. if (this.NetServer.hp_Server.State == HPSocketCS.ServiceState.Started)
  41. {
  42. IntPtr[] connIDs= this.NetServer.hp_Server.GetAllConnectionIDs();
  43. if (connIDs != null)
  44. {
  45. foreach (IntPtr ptr in connIDs)
  46. {
  47. HPSocketCS.Extended.ClientInfo ci = this.NetServer.hp_Server.GetClientInfo(ptr);
  48. ItemValue item;
  49. if (ci != null)
  50. {
  51. item = new ItemValue(ci, String.Format("[{0}]{1}:{2}{3}", ci.ConnId.ToInt64(), ci.IpAddress, ci.Port, ci.Message));
  52. }
  53. else
  54. {
  55. item = new ItemValue(null, String.Format("[{0}]{1}", ptr.ToInt64(), "未知道连接"));
  56. }
  57. this.listbxClientList.Items.Add(item);
  58. }
  59. }
  60. }
  61. else {
  62. MessageBoxCustom.Show("服务器网络未启动");
  63. }
  64. }
  65. LYFZ.CloudServerData.Model.DBConnection NetworkTrafficStatisticsDbConn = new CloudServerData.Model.DBConnection();
  66. public void SetNetworkTrafficStatisticsDbConn()
  67. {
  68. NetworkTrafficStatisticsDbConn.DataBaseServer = this.bjbServerCon.BenJi_DataBaseServer;
  69. NetworkTrafficStatisticsDbConn.DataBaseName = "NetworkTrafficStatistics";
  70. NetworkTrafficStatisticsDbConn.DataBasePort = this.bjbServerCon.BenJi_DataBasePort;
  71. NetworkTrafficStatisticsDbConn.DataBaseUser = this.bjbServerCon.BenJi_DataBaseUser;
  72. NetworkTrafficStatisticsDbConn.DataBasePass = this.bjbServerCon.BenJi_DataBasePass;
  73. }
  74. void NetServer_EventFileDataRequest(HPSocketCS.TcpPackServer hp_Server, TcpHeadInfo header, TcpTailInfo tail, IntPtr connId, byte[] bytes)
  75. {
  76. try
  77. {
  78. if (this.bjbServerCon.NetworkTrafficStatistics)
  79. {
  80. if (!String.IsNullOrEmpty(tail.FileName.Trim()))
  81. {
  82. string[] tempValues = tail.FileName.Split('|');
  83. string _EnterpriseID = "LYFZFileNull";
  84. if (tempValues.Length >= 2)
  85. {
  86. _EnterpriseID = tempValues[1];
  87. }
  88. int _FlowType = 0;
  89. if ((FileRequestType)tail.RequestType == FileRequestType.Download)
  90. {
  91. _FlowType = 0;
  92. }
  93. else
  94. {
  95. _FlowType = 1;
  96. }
  97. SetNetworkTrafficStatisticsDbConn();
  98. LYFZ.CloudServerData.DAL.NetworkTrafficRecord.AddNetworkTrafficRecordThreadPool(NetworkTrafficStatisticsDbConn, _EnterpriseID, _FlowType, CloudServerData.DAL.NetworkTrafficRecord.FlowDataType.File, bytes.LongLength, ServerDataReturn.Multiple);
  99. //SystemFileLogs.WriteLogs("文件传输流量统计已插入记录", this.TraceListenerLog);
  100. }
  101. else {
  102. SystemFileLogs.WriteLogs("文件传输流量统计时,文件名为空", this.TraceListenerLog);
  103. }
  104. }
  105. else {
  106. // SystemFileLogs.WriteLogs("未开启文件传输流量统计", this.TraceListenerLog);
  107. }
  108. }
  109. catch (Exception ex){
  110. SystemFileLogs.WriteLogs("插入文件传输流量记录时出错:"+ex.Message, this.TraceListenerLog);
  111. }
  112. }
  113. #region 网络通信事件处理
  114. LYFZ.CloudServerData.BJBServerDataReturnProcess ServerDataReturn = null;
  115. /// <summary>
  116. /// 接收到的客户端请求处理事件
  117. /// </summary>
  118. /// <param name="hp_Server"></param>
  119. /// <param name="header"></param>
  120. /// <param name="connId"></param>
  121. /// <param name="bytes"></param>
  122. void NetServer_EventSerializationDataRequest(HPSocketCS.TcpPackServer hp_Server, HPSocketCS.Extended.TcpHeadInfo header, IntPtr connId, byte[] bytes)
  123. {
  124. TransferRequestCommand Command = (TransferRequestCommand)Convert.ToInt32(header.RequestCommand);
  125. DataType MsgDataType = (DataType)header.MsgDataType;
  126. if (MsgDataType == DataType.SQLHelper)
  127. {
  128. ServerDataReturn.SQLHelperDataRequestProcessed(hp_Server, header, connId, bytes);
  129. }
  130. else
  131. {
  132. ReturnData returnData;
  133. try
  134. {
  135. SetNetworkTrafficStatisticsDbConn();
  136. RequestData requestData = (RequestData)DataSetSerializerDeserialize.ObjectDeserializeDecompress(bytes);
  137. HPSocketCS.Extended.RequestParameters reqParameters = requestData.AttachedDataToObject<HPSocketCS.Extended.RequestParameters>();
  138. string _EnterpriseID = reqParameters.GetRequsetEnterpriseIDParameter();
  139. try
  140. {
  141. if (this.bjbServerCon.NetworkTrafficStatistics)
  142. {
  143. LYFZ.CloudServerData.DAL.NetworkTrafficRecord.AddNetworkTrafficRecordThreadPool(NetworkTrafficStatisticsDbConn, _EnterpriseID, 1, CloudServerData.DAL.NetworkTrafficRecord.FlowDataType.Message, bytes.LongLength, ServerDataReturn.Multiple);
  144. }
  145. if (MsgDataType == DataType.Serialization)
  146. {
  147. returnData = ServerDataReturn.SerializerRequestProcessed(hp_Server, header, connId, requestData);
  148. }
  149. else
  150. {
  151. returnData = new ReturnData("处理请求指令时失败,非法指令");
  152. }
  153. }
  154. catch (Exception ex)
  155. {
  156. returnData = new ReturnData("处理请求指令时出错:" + ex.Message);
  157. }
  158. if (returnData == null)
  159. {
  160. returnData = new ReturnData("请求指令失败,没有返回有效的结果");
  161. }
  162. returnData.ServerStartTimeStamp = LYFZ.Network.TCPNetworkServer.TCP_NetworkServer.ServerStartTimeStamp;
  163. byte[] sendBytes = DataSetSerializerDeserialize.ObjectSerializerCompressionRetBytes(returnData);
  164. if (this.bjbServerCon.NetworkTrafficStatistics)
  165. {
  166. LYFZ.CloudServerData.DAL.NetworkTrafficRecord.AddNetworkTrafficRecordThreadPool(NetworkTrafficStatisticsDbConn, _EnterpriseID, 0, CloudServerData.DAL.NetworkTrafficRecord.FlowDataType.Message, sendBytes.LongLength, ServerDataReturn.Multiple);
  167. }
  168. hp_Server.AutoUnpackingAndSend(connId, sendBytes, header.TransportID, MsgDataType, Command);
  169. System.GC.Collect();
  170. }
  171. catch (Exception ex)
  172. {
  173. try
  174. {
  175. returnData = new ReturnData("服务器处理客户端请求时出错:" + ex.Message);
  176. returnData.ServerStartTimeStamp = LYFZ.Network.TCPNetworkServer.TCP_NetworkServer.ServerStartTimeStamp;
  177. HPSocketCS.Extended.SystemFileLogs.WriteLogs(returnData.ReturnMessage, this.TraceListenerLog);
  178. byte[] sendBytes = DataSetSerializerDeserialize.ObjectSerializerCompressionRetBytes(returnData);
  179. hp_Server.AutoUnpackingAndSend(connId, sendBytes, header.TransportID, MsgDataType, Command);
  180. }
  181. catch
  182. {
  183. }
  184. }
  185. }
  186. }
  187. #endregion
  188. #region 服务器网络 侦听处理
  189. /// <summary>
  190. /// 服务器运行日志跟踪侦听器
  191. /// </summary>
  192. HPSocketCS.Extended.CustomTraceListener TraceListenerLog = null;
  193. LYFZ.Network.TCPNetworkServer.TCP_NetworkServer NetServer = new Network.TCPNetworkServer.TCP_NetworkServer();
  194. /// <summary>
  195. /// 开始网络侦听器
  196. /// </summary>
  197. /// <param name="_serverCon"></param>
  198. void StartNetworkServer(LYFZ.CloudServerData.Model.BJBCloudServerConfig _serverCon)
  199. {
  200. NetServer.StartRun(_serverCon.ServerIP, _serverCon.Port);
  201. }
  202. /// <summary>
  203. /// 停止侦听
  204. /// </summary>
  205. /// <param name="sender"></param>
  206. /// <param name="e"></param>
  207. void btnStop_Click(object sender, EventArgs e)
  208. {
  209. this.NetServer.StopRun();
  210. this.btnStop.Enabled = this.NetServer.hp_Server.IsStarted;
  211. this.btnStart.Enabled = !this.btnStop.Enabled;
  212. }
  213. /// <summary>
  214. /// 开始侦听
  215. /// </summary>
  216. /// <param name="sender"></param>
  217. /// <param name="e"></param>
  218. void btnStart_Click(object sender, EventArgs e)
  219. {
  220. //测试
  221. // ServerDataReturn.InstallationDatabase(new CloudServerData.Model.AuthorizationVerification(),null);
  222. this.bjbServerCon.ServerIP = this.txtMonitorIP.Text.Trim();
  223. if (String.IsNullOrEmpty(this.bjbServerCon.ServerIP.Trim()))
  224. {
  225. MessageBoxCustom.Show(LYFZ.WinAPI.UserTips.GetCanNotBeEmptyTips(this.lbMonitorIP.Text));
  226. return;
  227. }
  228. if (String.IsNullOrEmpty(this.txtMonitorPort.Text.Trim()))
  229. {
  230. MessageBoxCustom.Show(LYFZ.WinAPI.UserTips.GetCanNotBeEmptyTips(this.lbMonitorPort.Text));
  231. return;
  232. }
  233. try
  234. {
  235. this.bjbServerCon.Port = Convert.ToUInt16(this.txtMonitorPort.Text.Trim());
  236. }
  237. catch
  238. {
  239. MessageBoxCustom.Show(this.lbMonitorPort.Text + "输入的格式不正确");
  240. return;
  241. }
  242. HPSocketCS.TcpServer.ServerFileDirPath = this.bjbServerCon.UploadFileDirPath;
  243. LYFZ.ComponentLibrary.FrmLoadHandling.LoadDoWorkMethod(delegate(object obj, BackgroundWorker backgroundWorker)
  244. {
  245. backgroundWorker.ReportProgress(0, "正在保存...");
  246. if (LYFZ.CloudServerData.SystemConfig.WriteBJBCloudServerConfig(this.bjbServerCon))
  247. {
  248. backgroundWorker.ReportProgress(0, "正在启动网络服务...");
  249. try
  250. {
  251. ServerDataReturn.LoadEnterpriseAndCloudServer();
  252. StartNetworkServer(this.bjbServerCon);
  253. }
  254. catch (Exception ex)
  255. {
  256. MessageBoxCustom.Show("启动网络服务失败:" + ex.Message, backgroundWorker: backgroundWorker);
  257. }
  258. }
  259. else
  260. {
  261. MessageBoxCustom.Show("配置保存失败,请重新启动程序后重试", backgroundWorker: backgroundWorker);
  262. }
  263. });
  264. this.btnStart.Enabled = !this.NetServer.hp_Server.IsStarted;
  265. this.btnStop.Enabled = !this.btnStart.Enabled;
  266. }
  267. #endregion
  268. #region 服务器端配置
  269. void btnBrowse_Click(object sender, EventArgs e)
  270. {
  271. FolderBrowserDialog fd = new FolderBrowserDialog();
  272. if (fd.ShowDialog() == DialogResult.OK)
  273. {
  274. this.txtDBBakPath.Text = fd.SelectedPath;
  275. }
  276. }
  277. void btnBrowseInstallation_Click(object sender, EventArgs e)
  278. {
  279. FolderBrowserDialog fd = new FolderBrowserDialog();
  280. if (fd.ShowDialog() == DialogResult.OK)
  281. {
  282. this.txtinstallation.Text = fd.SelectedPath;
  283. }
  284. }
  285. void btnBrowseFileDirPath_Click(object sender, EventArgs e)
  286. {
  287. FolderBrowserDialog fd = new FolderBrowserDialog();
  288. if (fd.ShowDialog() == DialogResult.OK)
  289. {
  290. this.txtFileDirPath.Text = fd.SelectedPath;
  291. }
  292. }
  293. void btnBrowseBakFileDirPath_Click(object sender, EventArgs e)
  294. {
  295. FolderBrowserDialog fd = new FolderBrowserDialog();
  296. if (fd.ShowDialog() == DialogResult.OK)
  297. {
  298. this.txtBakFileDirPath.Text = fd.SelectedPath;
  299. }
  300. }
  301. /// <summary>
  302. /// 当前服务器配置
  303. /// </summary>
  304. LYFZ.CloudServerData.Model.BJBCloudServerConfig bjbServerCon = LYFZ.CloudServerData.SystemConfig.ReadBJBCloudServerConfig();
  305. void frmMain_Load(object sender, EventArgs e)
  306. {
  307. this.txtDataBaseServer.Text = this.bjbServerCon.DataBaseServer;
  308. this.txtDataBasePort.Text = this.bjbServerCon.DataBasePort.ToString_s();
  309. this.txtDataBaseName.Text = this.bjbServerCon.DataBaseName;
  310. this.txtDataBaseUser.Text = this.bjbServerCon.DataBaseUser;
  311. this.txtDataBasePass.Text = this.bjbServerCon.DataBasePass;
  312. this.txtBenJiIP.Text = this.bjbServerCon.BenJi_DataBaseServer;
  313. this.txtBenJiDataBasePort.Text = this.bjbServerCon.BenJi_DataBasePort.ToString_s();
  314. this.txtBenJiDataBaseUser.Text = this.bjbServerCon.BenJi_DataBaseUser;
  315. this.txtBenJiDataBasePass.Text = this.bjbServerCon.BenJi_DataBasePass;
  316. this.txtMonitorIP.Text = this.bjbServerCon.ServerIP.Trim();
  317. this.txtMonitorPort.Text = this.bjbServerCon.Port.ToString().Trim();
  318. this.txtDBBakPath.Text = this.bjbServerCon.DatabaseBackupPath;
  319. this.txtinstallation.Text = this.bjbServerCon.DatabaseInstallationPath;
  320. this.txtFileDirPath.Text = this.bjbServerCon.UploadFileDirPath;
  321. this.txtBakFileDirPath.Text = this.bjbServerCon.BakUploadFileDirPath;
  322. this.chkNetworkTrafficStatistics.Checked = this.bjbServerCon.NetworkTrafficStatistics;
  323. this.txtServerID.Text = this.bjbServerCon.CurrentServerID.ToString();
  324. this.txtWebAPIDirPath.Text = this.bjbServerCon.WebAPIDirPath;
  325. this.txtSiteName.Text = this.bjbServerCon.SiteName;
  326. this.txtAppPoolId.Text = this.bjbServerCon.AppPoolId;
  327. this.txtWebAPIPort.Text = this.bjbServerCon.WebAPIPort.ToString();
  328. ServerDataReturn = new LYFZ.CloudServerData.BJBServerDataReturnProcess(this.bjbServerCon);
  329. }
  330. void btnSaveSet_Click(object sender, EventArgs e)
  331. {
  332. this.bjbServerCon.DataBaseServer = this.txtDataBaseServer.Text.Trim();
  333. this.bjbServerCon.DataBaseName = this.txtDataBaseName.Text.Trim();
  334. this.bjbServerCon.DataBaseUser = this.txtDataBaseUser.Text.Trim();
  335. this.bjbServerCon.DataBasePass = this.txtDataBasePass.Text.Trim();
  336. this.bjbServerCon.BenJi_DataBaseServer = this.txtBenJiIP.Text.Trim();
  337. this.bjbServerCon.BenJi_DataBaseUser = this.txtBenJiDataBaseUser.Text.Trim();
  338. this.bjbServerCon.BenJi_DataBasePass = this.txtBenJiDataBasePass.Text.Trim();
  339. this.bjbServerCon.DatabaseBackupPath = this.txtDBBakPath.Text.Trim();
  340. this.bjbServerCon.DatabaseInstallationPath = this.txtinstallation.Text.Trim();
  341. this.bjbServerCon.UploadFileDirPath = this.txtFileDirPath.Text.Trim();
  342. this.bjbServerCon.BakUploadFileDirPath = this.txtBakFileDirPath.Text.Trim();
  343. this.bjbServerCon.NetworkTrafficStatistics = this.chkNetworkTrafficStatistics.Checked;
  344. try
  345. {
  346. this.bjbServerCon.CurrentServerID = Convert.ToInt64(this.txtServerID.Text.Trim());
  347. }
  348. catch
  349. {
  350. MessageBoxCustom.Show("本机服务器ID输入的格式不正确");
  351. return;
  352. }
  353. this.bjbServerCon.WebAPIDirPath = this.txtWebAPIDirPath.Text.Trim();
  354. this.bjbServerCon.SiteName = this.txtSiteName.Text.Trim();
  355. this.txtAppPoolId.Text = this.bjbServerCon.AppPoolId;
  356. try
  357. {
  358. this.bjbServerCon.WebAPIPort = Convert.ToInt32(this.txtWebAPIPort.Text.Trim());
  359. }
  360. catch
  361. {
  362. MessageBoxCustom.Show("Web输入的格式不正确");
  363. return;
  364. }
  365. if (String.IsNullOrEmpty(this.txtDataBasePort.Text.Trim()))
  366. {
  367. MessageBoxCustom.Show(LYFZ.WinAPI.UserTips.GetCanNotBeEmptyTips(this.lbDataBasePort.Text));
  368. return;
  369. }
  370. try
  371. {
  372. bjbServerCon.DataBasePort = Convert.ToInt32(this.txtDataBasePort.Text.Trim());
  373. }
  374. catch
  375. {
  376. MessageBoxCustom.Show(this.lbDataBasePort.Text + "输入的格式不正确");
  377. return;
  378. }
  379. if (String.IsNullOrEmpty(this.txtBenJiDataBasePort.Text.Trim()))
  380. {
  381. MessageBoxCustom.Show("本机数据库端口号不能为空");
  382. return;
  383. }
  384. try
  385. {
  386. bjbServerCon.BenJi_DataBasePort = Convert.ToInt32(this.txtBenJiDataBasePort.Text.Trim());
  387. }
  388. catch
  389. {
  390. MessageBoxCustom.Show("本机数据库端口输入的格式不正确");
  391. return;
  392. }
  393. if (String.IsNullOrEmpty(bjbServerCon.DataBaseServer))
  394. {
  395. MessageBoxCustom.Show(LYFZ.WinAPI.UserTips.GetCanNotBeEmptyTips(this.lbDataBaseServer.Text));
  396. return;
  397. }
  398. if (String.IsNullOrEmpty(bjbServerCon.DataBaseName))
  399. {
  400. MessageBoxCustom.Show(LYFZ.WinAPI.UserTips.GetCanNotBeEmptyTips(this.lbDataBaseName.Text));
  401. return;
  402. }
  403. if (String.IsNullOrEmpty(bjbServerCon.DataBaseUser))
  404. {
  405. MessageBoxCustom.Show(LYFZ.WinAPI.UserTips.GetCanNotBeEmptyTips(this.lbDataBaseUser.Text));
  406. return;
  407. }
  408. if (String.IsNullOrEmpty(bjbServerCon.DataBasePass))
  409. {
  410. MessageBoxCustom.Show(LYFZ.WinAPI.UserTips.GetCanNotBeEmptyTips(this.lbDataBasePass.Text));
  411. return;
  412. }
  413. LYFZ.ComponentLibrary.FrmLoadHandling.LoadDoWorkMethod(delegate(object obj, BackgroundWorker backgroundWorker)
  414. {
  415. backgroundWorker.ReportProgress(0, "正在保存...");
  416. if (LYFZ.CloudServerData.SystemConfig.WriteBJBCloudServerConfig(bjbServerCon))
  417. {
  418. ServerDataReturn = new LYFZ.CloudServerData.BJBServerDataReturnProcess(this.bjbServerCon);
  419. MessageBoxCustom.Show("配置保存成功,需要重启服务器后才能生效", backgroundWorker: backgroundWorker);
  420. }
  421. else
  422. {
  423. MessageBoxCustom.Show("配置保存失败,请重新启动程序后重试", backgroundWorker: backgroundWorker);
  424. }
  425. });
  426. //this.Invoke(new LYFZ.WinAPI.DUpdateControl(delegate()
  427. //{
  428. // }));
  429. }
  430. #endregion
  431. }
  432. }