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
}
}