using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; using System.Drawing; using System.Linq; using System.Text; using System.Windows.Forms; using LYFZ; using HPSocketCS.Extended; namespace LYFZ.ERPCloudServer { public partial class frmMain : LYFZ.ComponentLibrary.BaseContentsFormMain { public frmMain() { InitializeComponent(); this.btnSaveSet.Click += btnSaveSet_Click; this.Load += frmMain_Load; this.btnStart.Click += btnStart_Click; this.btnStop.Click += btnStop_Click; this.TraceListenerLog = new HPSocketCS.Extended.CustomTraceListener(this.txtTraceListenerLog); this.NetServer.TraceListenerLog = this.TraceListenerLog; this.NetServer.EventSerializationDataRequest += NetServer_EventSerializationDataRequest; this.NetServer.EventFileDataRequest += NetServer_EventFileDataRequest; this.btnBrowse.Click += btnBrowse_Click; this.btnBrowseInstallation.Click += btnBrowseInstallation_Click; this.btnBrowseFileDirPath.Click += btnBrowseFileDirPath_Click; this.btnBrowseBakFileDirPath.Click += btnBrowseBakFileDirPath_Click; ServerDataReturn = new LYFZ.CloudServerData.BJBServerDataReturnProcess(this.bjbServerCon); this.btnRefreshList.Click += btnRefreshList_Click; } void btnRefreshList_Click(object sender, EventArgs e) { RefreshClientList(); } void RefreshClientList() { this.listbxClientList.Items.Clear(); if (this.NetServer.hp_Server.State == HPSocketCS.ServiceState.Started) { IntPtr[] connIDs= this.NetServer.hp_Server.GetAllConnectionIDs(); if (connIDs != null) { foreach (IntPtr ptr in connIDs) { HPSocketCS.Extended.ClientInfo ci = this.NetServer.hp_Server.GetClientInfo(ptr); ItemValue item; if (ci != null) { item = new ItemValue(ci, String.Format("[{0}]{1}:{2}{3}", ci.ConnId.ToInt64(), ci.IpAddress, ci.Port, ci.Message)); } else { item = new ItemValue(null, String.Format("[{0}]{1}", ptr.ToInt64(), "未知道连接")); } this.listbxClientList.Items.Add(item); } } } else { MessageBoxCustom.Show("服务器网络未启动"); } } LYFZ.CloudServerData.Model.DBConnection NetworkTrafficStatisticsDbConn = new CloudServerData.Model.DBConnection(); public void SetNetworkTrafficStatisticsDbConn() { NetworkTrafficStatisticsDbConn.DataBaseServer = this.bjbServerCon.BenJi_DataBaseServer; NetworkTrafficStatisticsDbConn.DataBaseName = "NetworkTrafficStatistics"; NetworkTrafficStatisticsDbConn.DataBasePort = this.bjbServerCon.BenJi_DataBasePort; NetworkTrafficStatisticsDbConn.DataBaseUser = this.bjbServerCon.BenJi_DataBaseUser; NetworkTrafficStatisticsDbConn.DataBasePass = this.bjbServerCon.BenJi_DataBasePass; } void NetServer_EventFileDataRequest(HPSocketCS.TcpPackServer hp_Server, TcpHeadInfo header, TcpTailInfo tail, IntPtr connId, byte[] bytes) { try { if (this.bjbServerCon.NetworkTrafficStatistics) { if (!String.IsNullOrEmpty(tail.FileName.Trim())) { string[] tempValues = tail.FileName.Split('|'); string _EnterpriseID = "LYFZFileNull"; if (tempValues.Length >= 2) { _EnterpriseID = tempValues[1]; } int _FlowType = 0; if ((FileRequestType)tail.RequestType == FileRequestType.Download) { _FlowType = 0; } else { _FlowType = 1; } SetNetworkTrafficStatisticsDbConn(); LYFZ.CloudServerData.DAL.NetworkTrafficRecord.AddNetworkTrafficRecordThreadPool(NetworkTrafficStatisticsDbConn, _EnterpriseID, _FlowType, CloudServerData.DAL.NetworkTrafficRecord.FlowDataType.File, bytes.LongLength, ServerDataReturn.Multiple); //SystemFileLogs.WriteLogs("文件传输流量统计已插入记录", this.TraceListenerLog); } else { SystemFileLogs.WriteLogs("文件传输流量统计时,文件名为空", this.TraceListenerLog); } } else { // SystemFileLogs.WriteLogs("未开启文件传输流量统计", this.TraceListenerLog); } } catch (Exception ex){ SystemFileLogs.WriteLogs("插入文件传输流量记录时出错:"+ex.Message, this.TraceListenerLog); } } #region 网络通信事件处理 LYFZ.CloudServerData.BJBServerDataReturnProcess ServerDataReturn = null; /// /// 接收到的客户端请求处理事件 /// /// /// /// /// void NetServer_EventSerializationDataRequest(HPSocketCS.TcpPackServer hp_Server, HPSocketCS.Extended.TcpHeadInfo header, IntPtr connId, byte[] bytes) { TransferRequestCommand Command = (TransferRequestCommand)Convert.ToInt32(header.RequestCommand); DataType MsgDataType = (DataType)header.MsgDataType; if (MsgDataType == DataType.SQLHelper) { ServerDataReturn.SQLHelperDataRequestProcessed(hp_Server, header, connId, bytes); } else { ReturnData returnData; try { SetNetworkTrafficStatisticsDbConn(); RequestData requestData = (RequestData)DataSetSerializerDeserialize.ObjectDeserializeDecompress(bytes); HPSocketCS.Extended.RequestParameters reqParameters = requestData.AttachedDataToObject(); string _EnterpriseID = reqParameters.GetRequsetEnterpriseIDParameter(); try { if (this.bjbServerCon.NetworkTrafficStatistics) { LYFZ.CloudServerData.DAL.NetworkTrafficRecord.AddNetworkTrafficRecordThreadPool(NetworkTrafficStatisticsDbConn, _EnterpriseID, 1, CloudServerData.DAL.NetworkTrafficRecord.FlowDataType.Message, bytes.LongLength, ServerDataReturn.Multiple); } if (MsgDataType == DataType.Serialization) { returnData = ServerDataReturn.SerializerRequestProcessed(hp_Server, header, connId, requestData); } else { returnData = new ReturnData("处理请求指令时失败,非法指令"); } } catch (Exception ex) { returnData = new ReturnData("处理请求指令时出错:" + ex.Message); } if (returnData == null) { returnData = new ReturnData("请求指令失败,没有返回有效的结果"); } returnData.ServerStartTimeStamp = LYFZ.Network.TCPNetworkServer.TCP_NetworkServer.ServerStartTimeStamp; byte[] sendBytes = DataSetSerializerDeserialize.ObjectSerializerCompressionRetBytes(returnData); if (this.bjbServerCon.NetworkTrafficStatistics) { LYFZ.CloudServerData.DAL.NetworkTrafficRecord.AddNetworkTrafficRecordThreadPool(NetworkTrafficStatisticsDbConn, _EnterpriseID, 0, CloudServerData.DAL.NetworkTrafficRecord.FlowDataType.Message, sendBytes.LongLength, ServerDataReturn.Multiple); } hp_Server.AutoUnpackingAndSend(connId, sendBytes, header.TransportID, MsgDataType, Command); System.GC.Collect(); } catch (Exception ex) { try { returnData = new ReturnData("服务器处理客户端请求时出错:" + ex.Message); returnData.ServerStartTimeStamp = LYFZ.Network.TCPNetworkServer.TCP_NetworkServer.ServerStartTimeStamp; HPSocketCS.Extended.SystemFileLogs.WriteLogs(returnData.ReturnMessage, this.TraceListenerLog); byte[] sendBytes = DataSetSerializerDeserialize.ObjectSerializerCompressionRetBytes(returnData); hp_Server.AutoUnpackingAndSend(connId, sendBytes, header.TransportID, MsgDataType, Command); } catch { } } } } #endregion #region 服务器网络 侦听处理 /// /// 服务器运行日志跟踪侦听器 /// HPSocketCS.Extended.CustomTraceListener TraceListenerLog = null; LYFZ.Network.TCPNetworkServer.TCP_NetworkServer NetServer = new Network.TCPNetworkServer.TCP_NetworkServer(); /// /// 开始网络侦听器 /// /// void StartNetworkServer(LYFZ.CloudServerData.Model.BJBCloudServerConfig _serverCon) { NetServer.StartRun(_serverCon.ServerIP, _serverCon.Port); } /// /// 停止侦听 /// /// /// void btnStop_Click(object sender, EventArgs e) { this.NetServer.StopRun(); this.btnStop.Enabled = this.NetServer.hp_Server.IsStarted; this.btnStart.Enabled = !this.btnStop.Enabled; } /// /// 开始侦听 /// /// /// void btnStart_Click(object sender, EventArgs e) { //测试 // ServerDataReturn.InstallationDatabase(new CloudServerData.Model.AuthorizationVerification(),null); this.bjbServerCon.ServerIP = this.txtMonitorIP.Text.Trim(); if (String.IsNullOrEmpty(this.bjbServerCon.ServerIP.Trim())) { MessageBoxCustom.Show(LYFZ.WinAPI.UserTips.GetCanNotBeEmptyTips(this.lbMonitorIP.Text)); return; } if (String.IsNullOrEmpty(this.txtMonitorPort.Text.Trim())) { MessageBoxCustom.Show(LYFZ.WinAPI.UserTips.GetCanNotBeEmptyTips(this.lbMonitorPort.Text)); return; } try { this.bjbServerCon.Port = Convert.ToUInt16(this.txtMonitorPort.Text.Trim()); } catch { MessageBoxCustom.Show(this.lbMonitorPort.Text + "输入的格式不正确"); return; } HPSocketCS.TcpServer.ServerFileDirPath = this.bjbServerCon.UploadFileDirPath; LYFZ.ComponentLibrary.FrmLoadHandling.LoadDoWorkMethod(delegate(object obj, BackgroundWorker backgroundWorker) { backgroundWorker.ReportProgress(0, "正在保存..."); if (LYFZ.CloudServerData.SystemConfig.WriteBJBCloudServerConfig(this.bjbServerCon)) { backgroundWorker.ReportProgress(0, "正在启动网络服务..."); try { ServerDataReturn.LoadEnterpriseAndCloudServer(); StartNetworkServer(this.bjbServerCon); } catch (Exception ex) { MessageBoxCustom.Show("启动网络服务失败:" + ex.Message, backgroundWorker: backgroundWorker); } } else { MessageBoxCustom.Show("配置保存失败,请重新启动程序后重试", backgroundWorker: backgroundWorker); } }); this.btnStart.Enabled = !this.NetServer.hp_Server.IsStarted; this.btnStop.Enabled = !this.btnStart.Enabled; } #endregion #region 服务器端配置 void btnBrowse_Click(object sender, EventArgs e) { FolderBrowserDialog fd = new FolderBrowserDialog(); if (fd.ShowDialog() == DialogResult.OK) { this.txtDBBakPath.Text = fd.SelectedPath; } } void btnBrowseInstallation_Click(object sender, EventArgs e) { FolderBrowserDialog fd = new FolderBrowserDialog(); if (fd.ShowDialog() == DialogResult.OK) { this.txtinstallation.Text = fd.SelectedPath; } } void btnBrowseFileDirPath_Click(object sender, EventArgs e) { FolderBrowserDialog fd = new FolderBrowserDialog(); if (fd.ShowDialog() == DialogResult.OK) { this.txtFileDirPath.Text = fd.SelectedPath; } } void btnBrowseBakFileDirPath_Click(object sender, EventArgs e) { FolderBrowserDialog fd = new FolderBrowserDialog(); if (fd.ShowDialog() == DialogResult.OK) { this.txtBakFileDirPath.Text = fd.SelectedPath; } } /// /// 当前服务器配置 /// LYFZ.CloudServerData.Model.BJBCloudServerConfig bjbServerCon = LYFZ.CloudServerData.SystemConfig.ReadBJBCloudServerConfig(); void frmMain_Load(object sender, EventArgs e) { this.txtDataBaseServer.Text = this.bjbServerCon.DataBaseServer; this.txtDataBasePort.Text = this.bjbServerCon.DataBasePort.ToString_s(); this.txtDataBaseName.Text = this.bjbServerCon.DataBaseName; this.txtDataBaseUser.Text = this.bjbServerCon.DataBaseUser; this.txtDataBasePass.Text = this.bjbServerCon.DataBasePass; this.txtBenJiIP.Text = this.bjbServerCon.BenJi_DataBaseServer; this.txtBenJiDataBasePort.Text = this.bjbServerCon.BenJi_DataBasePort.ToString_s(); this.txtBenJiDataBaseUser.Text = this.bjbServerCon.BenJi_DataBaseUser; this.txtBenJiDataBasePass.Text = this.bjbServerCon.BenJi_DataBasePass; this.txtMonitorIP.Text = this.bjbServerCon.ServerIP.Trim(); this.txtMonitorPort.Text = this.bjbServerCon.Port.ToString().Trim(); this.txtDBBakPath.Text = this.bjbServerCon.DatabaseBackupPath; this.txtinstallation.Text = this.bjbServerCon.DatabaseInstallationPath; this.txtFileDirPath.Text = this.bjbServerCon.UploadFileDirPath; this.txtBakFileDirPath.Text = this.bjbServerCon.BakUploadFileDirPath; this.chkNetworkTrafficStatistics.Checked = this.bjbServerCon.NetworkTrafficStatistics; this.txtServerID.Text = this.bjbServerCon.CurrentServerID.ToString(); this.txtWebAPIDirPath.Text = this.bjbServerCon.WebAPIDirPath; this.txtSiteName.Text = this.bjbServerCon.SiteName; this.txtAppPoolId.Text = this.bjbServerCon.AppPoolId; this.txtWebAPIPort.Text = this.bjbServerCon.WebAPIPort.ToString(); ServerDataReturn = new LYFZ.CloudServerData.BJBServerDataReturnProcess(this.bjbServerCon); } void btnSaveSet_Click(object sender, EventArgs e) { this.bjbServerCon.DataBaseServer = this.txtDataBaseServer.Text.Trim(); this.bjbServerCon.DataBaseName = this.txtDataBaseName.Text.Trim(); this.bjbServerCon.DataBaseUser = this.txtDataBaseUser.Text.Trim(); this.bjbServerCon.DataBasePass = this.txtDataBasePass.Text.Trim(); this.bjbServerCon.BenJi_DataBaseServer = this.txtBenJiIP.Text.Trim(); this.bjbServerCon.BenJi_DataBaseUser = this.txtBenJiDataBaseUser.Text.Trim(); this.bjbServerCon.BenJi_DataBasePass = this.txtBenJiDataBasePass.Text.Trim(); this.bjbServerCon.DatabaseBackupPath = this.txtDBBakPath.Text.Trim(); this.bjbServerCon.DatabaseInstallationPath = this.txtinstallation.Text.Trim(); this.bjbServerCon.UploadFileDirPath = this.txtFileDirPath.Text.Trim(); this.bjbServerCon.BakUploadFileDirPath = this.txtBakFileDirPath.Text.Trim(); this.bjbServerCon.NetworkTrafficStatistics = this.chkNetworkTrafficStatistics.Checked; try { this.bjbServerCon.CurrentServerID = Convert.ToInt64(this.txtServerID.Text.Trim()); } catch { MessageBoxCustom.Show("本机服务器ID输入的格式不正确"); return; } this.bjbServerCon.WebAPIDirPath = this.txtWebAPIDirPath.Text.Trim(); this.bjbServerCon.SiteName = this.txtSiteName.Text.Trim(); this.txtAppPoolId.Text = this.bjbServerCon.AppPoolId; try { this.bjbServerCon.WebAPIPort = Convert.ToInt32(this.txtWebAPIPort.Text.Trim()); } catch { MessageBoxCustom.Show("Web输入的格式不正确"); return; } if (String.IsNullOrEmpty(this.txtDataBasePort.Text.Trim())) { MessageBoxCustom.Show(LYFZ.WinAPI.UserTips.GetCanNotBeEmptyTips(this.lbDataBasePort.Text)); return; } try { bjbServerCon.DataBasePort = Convert.ToInt32(this.txtDataBasePort.Text.Trim()); } catch { MessageBoxCustom.Show(this.lbDataBasePort.Text + "输入的格式不正确"); return; } if (String.IsNullOrEmpty(this.txtBenJiDataBasePort.Text.Trim())) { MessageBoxCustom.Show("本机数据库端口号不能为空"); return; } try { bjbServerCon.BenJi_DataBasePort = Convert.ToInt32(this.txtBenJiDataBasePort.Text.Trim()); } catch { MessageBoxCustom.Show("本机数据库端口输入的格式不正确"); return; } if (String.IsNullOrEmpty(bjbServerCon.DataBaseServer)) { MessageBoxCustom.Show(LYFZ.WinAPI.UserTips.GetCanNotBeEmptyTips(this.lbDataBaseServer.Text)); return; } if (String.IsNullOrEmpty(bjbServerCon.DataBaseName)) { MessageBoxCustom.Show(LYFZ.WinAPI.UserTips.GetCanNotBeEmptyTips(this.lbDataBaseName.Text)); return; } if (String.IsNullOrEmpty(bjbServerCon.DataBaseUser)) { MessageBoxCustom.Show(LYFZ.WinAPI.UserTips.GetCanNotBeEmptyTips(this.lbDataBaseUser.Text)); return; } if (String.IsNullOrEmpty(bjbServerCon.DataBasePass)) { MessageBoxCustom.Show(LYFZ.WinAPI.UserTips.GetCanNotBeEmptyTips(this.lbDataBasePass.Text)); return; } LYFZ.ComponentLibrary.FrmLoadHandling.LoadDoWorkMethod(delegate(object obj, BackgroundWorker backgroundWorker) { backgroundWorker.ReportProgress(0, "正在保存..."); if (LYFZ.CloudServerData.SystemConfig.WriteBJBCloudServerConfig(bjbServerCon)) { ServerDataReturn = new LYFZ.CloudServerData.BJBServerDataReturnProcess(this.bjbServerCon); MessageBoxCustom.Show("配置保存成功,需要重启服务器后才能生效", backgroundWorker: backgroundWorker); } else { MessageBoxCustom.Show("配置保存失败,请重新启动程序后重试", backgroundWorker: backgroundWorker); } }); //this.Invoke(new LYFZ.WinAPI.DUpdateControl(delegate() //{ // })); } #endregion } }