using System; using System.Collections.Generic; using System.Text; using System.IO; using System.Net; using System.Net.Sockets; using System.Threading; using LYFZ.Network.EnumerateLibrary; namespace LYFZ.Network { /// <summary> /// 远程数据处理类 被动模式 /// </summary> public class TCP_RemoteDataHandlerPassiveMode { #region 服务端接收到客户端指令后的处理程序 public TCP_RemoteDataHandlerPassiveMode() { } HPSocketCS.TcpPackClient hpClient; /// <summary> /// 新的网络对象 /// </summary> public HPSocketCS.TcpPackClient HpClient { get { return hpClient; } set { hpClient = value; } } public TCP_RemoteDataHandlerPassiveMode(HPSocketCS.TcpPackClient client) { this.hpClient = client; } static string _ServerBasePath = LYFZ.WinAPI.CustomPublicMethod.BasePath; /// <summary> /// 服务器端根目录 /// </summary> public static string ServerBasePath { get { return _ServerBasePath; } set { _ServerBasePath = value; } } /// <summary> /// 获取客户端发送的参数 /// </summary> /// <param name="ParametersString"></param> /// <returns></returns> string[] GetParameters(string ParametersString) { string[] mParameters = ParametersString.Split('|'); return mParameters; } static string BackupRecordsDateDay = ""; static string BackupRecordsStringText = ""; /// <summary> /// 获取备份记录 /// </summary> /// <param name="protocol"></param> /// <returns></returns> public TCP_FileProtocol GetBackupRecords(TCP_FileProtocol protocol) { TCP_FileProtocol returnProtocol = new TCP_FileProtocol(); returnProtocol = GetToClientFileProtocol("GetOK&"+false.ToString()); if (BackupRecordsDateDay == DateTime.Now.ToString("yyyy-MM-dd")) { returnProtocol = GetToClientFileProtocol(BackupRecordsStringText); } else { try { string BackupRecordsDir = LYFZ.WinAPI.CustomPublicMethod.GetFullDirectoryPath(LYFZ.WinAPI.CustomPublicMethod.BasePath) + "DB\\BackupRecords\\"; string PhotoBackupRecordsPath = BackupRecordsDir + "PhotoBackupRecords.txt";//相片 //相片备份记录 string PhotoBackupRecords = ""; string PhotoBackupRecordsText = ""; if (System.IO.File.Exists(PhotoBackupRecordsPath)) { PhotoBackupRecordsText = System.IO.File.ReadAllText(PhotoBackupRecordsPath, Encoding.UTF8); } bool isBackupOK = true; for (int i = 1; i <= 7; i++) { string tempBackupText = "OK|"; if (PhotoBackupRecordsText.Contains(DateTime.Now.AddDays(-i).ToString("yyyy-MM-dd") + "|原片|备份成功|")) { if (PhotoBackupRecordsText.Contains(DateTime.Now.AddDays(-i).ToString("yyyy-MM-dd") + "|原片|备份成功|已备份到:")) { tempBackupText = "OK|"; } else { tempBackupText = "No|"; } PhotoBackupRecords += DateTime.Now.AddDays(-i).ToString("yyyy-MM-dd") + "|原片|备份成功|" + tempBackupText + "#"; } else { if (i == 1) { isBackupOK = false; } } if (PhotoBackupRecordsText.Contains(DateTime.Now.AddDays(-i).ToString("yyyy-MM-dd") + "|初修片|备份成功|")) { if (PhotoBackupRecordsText.Contains(DateTime.Now.AddDays(-i).ToString("yyyy-MM-dd") + "|初修片|备份成功|已备份到:")) { tempBackupText = "OK|"; } else { tempBackupText = "No|"; } PhotoBackupRecords += DateTime.Now.AddDays(-i).ToString("yyyy-MM-dd") + "|初修片|备份成功|" + tempBackupText + "#"; } else { if (i == 1) { isBackupOK = false; } } if (PhotoBackupRecordsText.Contains(DateTime.Now.AddDays(-i).ToString("yyyy-MM-dd") + "|精修片|备份成功|")) { if (PhotoBackupRecordsText.Contains(DateTime.Now.AddDays(-i).ToString("yyyy-MM-dd") + "|精修片|备份成功|已备份到:")) { tempBackupText = "OK|"; } else { tempBackupText = "No|"; } PhotoBackupRecords += DateTime.Now.AddDays(-i).ToString("yyyy-MM-dd") + "|精修片|备份成功|" + tempBackupText + "#"; } else { if (i == 1) { isBackupOK = false; } } if (PhotoBackupRecordsText.Contains(DateTime.Now.AddDays(-i).ToString("yyyy-MM-dd") + "|设计片|备份成功|")) { if (PhotoBackupRecordsText.Contains(DateTime.Now.AddDays(-i).ToString("yyyy-MM-dd") + "|设计片|备份成功|已备份到:")) { tempBackupText = "OK|"; } else { tempBackupText = "No|"; } PhotoBackupRecords += DateTime.Now.AddDays(-i).ToString("yyyy-MM-dd") + "|设计片|备份成功|" + tempBackupText + "#"; } else { if (i == 1) { isBackupOK = false; } } } returnProtocol = GetToClientFileProtocol("GetOK&"+isBackupOK.ToString() + "&" + PhotoBackupRecords); BackupRecordsDateDay = DateTime.Now.ToString("yyyy-MM-dd"); BackupRecordsStringText = returnProtocol.Content; } catch { } } return returnProtocol; } static string MainShopBackupRecordsDateDay = ""; static string MainShopBackupRecordsStringText = ""; /// <summary> /// 获取总店数据库备份记录 /// </summary> /// <param name="protocol"></param> /// <returns></returns> public TCP_FileProtocol GetMainShopBackupRecords(TCP_FileProtocol protocol) { TCP_FileProtocol returnProtocol = new TCP_FileProtocol(); returnProtocol = GetToClientFileProtocol("GetOK&" + false.ToString()); /* if (MainShopBackupRecordsDateDay == DateTime.Now.ToString("yyyy-MM-dd")) { returnProtocol = GetToClientFileProtocol(MainShopBackupRecordsStringText); } else*/ { try { string BackupRecordsDir = LYFZ.WinAPI.CustomPublicMethod.GetFullDirectoryPath(LYFZ.WinAPI.CustomPublicMethod.BasePath) + "DB\\BackupRecords\\"; string DataBaseBackupRecordsPath = BackupRecordsDir + "DataBaseBackupRecords.txt";//数据库 string DataFileBackupRecordsPath = BackupRecordsDir + "DataFileBackupRecords.txt";//资料文件 //资料文件备份记录 string DataFileBackupRecords = ""; string DataFileBackupRecordsText = ""; if (System.IO.File.Exists(DataFileBackupRecordsPath)) { DataFileBackupRecordsText = System.IO.File.ReadAllText(DataFileBackupRecordsPath, Encoding.UTF8); } //数据库备份记录信息 string DataBaseBackupRecords = ""; string DataBaseBackupRecordsText = ""; if (System.IO.File.Exists(DataBaseBackupRecordsPath)) { DataBaseBackupRecordsText = System.IO.File.ReadAllText(DataBaseBackupRecordsPath, Encoding.UTF8); } bool isBackupOK = true; for (int i = 1; i <= 7; i++) { if (DataBaseBackupRecordsText.Contains(DateTime.Now.AddDays(-i).ToString("yyyy-MM-dd") + "|数据库|备份成功|")) { DataBaseBackupRecords += DateTime.Now.AddDays(-i).ToString("yyyy-MM-dd") + "|数据库|备份成功|#"; } else { if (i == 1) { isBackupOK = false; } } if (DataFileBackupRecordsText.Contains(DateTime.Now.AddDays(-i).ToString("yyyy-MM-dd") + "|资料文件|备份成功|")) { DataFileBackupRecords += DateTime.Now.AddDays(-i).ToString("yyyy-MM-dd") + "|资料文件|备份成功|#"; } else { if (i == 1) { isBackupOK = false; } } } returnProtocol = GetToClientFileProtocol("GetOK&" + isBackupOK.ToString() + "&" + DataBaseBackupRecords+"&" + DataFileBackupRecords); MainShopBackupRecordsDateDay = DateTime.Now.ToString("yyyy-MM-dd"); MainShopBackupRecordsStringText = returnProtocol.Content; } catch { } } return returnProtocol; } /// <summary> /// 获取返回到客户端的TCP_FileProtocol对象 /// </summary> /// <param name="value">要返回的内容</param> /// <param name="extraInfo">附加信息</param> /// <returns></returns> public TCP_FileProtocol GetToClientFileProtocol(string value, string extraInfo = "") { return new Network.TCP_FileProtocol(value, extraInfo); } #region 服务器端命令处理方法 public static string _UserAvatarSaveFilePath = ""; /// <summary> /// 服务器端用户头像保存目录 /// </summary> public static string UserAvatarSaveFilePath { get { return ServerBasePath + "\\Resources\\Avatar\\User\\"; } set { _UserAvatarSaveFilePath = value; } } /// <summary> /// 删除服务器上的文件 /// </summary> /// <returns></returns> public TCP_FileProtocol DeleteFile(TCP_FileProtocol protocol) { TCP_FileProtocol returnProtocol = new TCP_FileProtocol(); string[] tempValues = protocol.Content.Split('?'); string[] delFiles = tempValues[0].Split('|'); //服务器端文件路径 string saveFilePath = ""; try { foreach (string delfile in delFiles) { if (delfile.Trim().Length > 0) { saveFilePath = delfile; if (delfile.Contains(":")) { saveFilePath = delfile; } else { saveFilePath = ServerBasePath + "\\" + delfile.TrimStart('\\'); } if (System.IO.File.Exists(saveFilePath)) { System.IO.File.Delete(saveFilePath); } } } returnProtocol = GetToClientFileProtocol("删除成功"); // returnProtocol = GetToClientFileProtocol("删除失败,服务器上找不到“" + protocol.FileName + "”文件!"); } catch (Exception ex) { returnProtocol = GetToClientFileProtocol("删除失败,原因:“" + ex.Message + "”"); } return returnProtocol; } /// <summary> /// 获取服务器上指定目录下的文件列表 /// </summary> /// <returns></returns> public TCP_FileProtocol GeTFileList(TCP_FileProtocol protocol) { TCP_FileProtocol returnProtocol = new TCP_FileProtocol(); string[] Parameters = protocol.Content.Split('|'); if (Parameters.Length >= 3) { string dirPath = Parameters[0]; if (!dirPath.Contains(":")) { dirPath = ServerBasePath + "\\" + dirPath.TrimStart('\\'); } bool isSearchSubfolder = false;//是否搜索子目录 try { isSearchSubfolder = Convert.ToBoolean(Parameters[1]); } catch { } string searchPattern = Parameters[2]; try { if (System.IO.Directory.Exists(dirPath)) { string[] retFiles = null; if (isSearchSubfolder) { retFiles = System.IO.Directory.GetFiles(dirPath, searchPattern, SearchOption.AllDirectories); } else { retFiles = System.IO.Directory.GetFiles(dirPath, searchPattern, SearchOption.TopDirectoryOnly); } StringBuilder retFilesString = new StringBuilder(); foreach (string file in retFiles) { retFilesString.Append(file.Replace(ServerBasePath, "") + "|"); } returnProtocol = GetToClientFileProtocol("获取成功", retFilesString.ToString()); retFilesString.Clear(); } else { returnProtocol = GetToClientFileProtocol("指定的目录“" + dirPath + "”在服务器上不存在。"); } } catch (Exception ex) { returnProtocol = GetToClientFileProtocol("获取失败,原因:“" + ex.Message + "”"); } } else { returnProtocol = GetToClientFileProtocol("参数不正确"); } return returnProtocol; } /// <summary> /// 获取服务器上指定目录下的目录列表 /// </summary> /// <returns></returns> public TCP_FileProtocol GetDirectoryList(TCP_FileProtocol protocol) { TCP_FileProtocol returnProtocol = new TCP_FileProtocol(); string[] Parameters = protocol.Content.Split('|'); if (Parameters.Length >= 3) { string dirPath = Parameters[0]; if (!dirPath.Contains(":")) { dirPath = ServerBasePath + "\\" + dirPath.TrimStart('\\'); } bool isSearchSubfolder = false;//是否搜索子目录 try { isSearchSubfolder = Convert.ToBoolean(Parameters[1]); } catch { } string searchPattern = Parameters[2]; try { if (System.IO.Directory.Exists(dirPath)) { string[] retDirs = null; if (isSearchSubfolder) { retDirs = System.IO.Directory.GetDirectories(dirPath, searchPattern, SearchOption.AllDirectories); } else { retDirs = System.IO.Directory.GetDirectories(dirPath, searchPattern, SearchOption.TopDirectoryOnly); } StringBuilder retDirString = new StringBuilder(); foreach (string dir in retDirs) { retDirString.Append(dir.Replace(ServerBasePath, "") + "|"); } returnProtocol = GetToClientFileProtocol("获取成功", retDirString.ToString()); retDirString.Clear(); } else { returnProtocol = GetToClientFileProtocol("获取失败,指定的目录“" + dirPath + "”在服务器上不存在。"); } } catch (Exception ex) { returnProtocol = GetToClientFileProtocol("获取失败,原因:“" + ex.Message + "”"); } } else { returnProtocol = GetToClientFileProtocol("获取失败,参数不正确"); } return returnProtocol; } /// <summary> /// 删除服务器上的目录 /// </summary> /// <returns></returns> public TCP_FileProtocol DeleteDirectory(TCP_FileProtocol protocol) { TCP_FileProtocol returnProtocol = new TCP_FileProtocol(); string[] Parameters = protocol.Content.Split('|'); if (Parameters.Length >= 2) { string dirPath = Parameters[0]; if (!dirPath.Contains(":")) { dirPath = ServerBasePath + "\\" + dirPath.TrimStart('\\'); } bool isDelAllFiles = false;//是否删除目录下的所以文件 try { isDelAllFiles = Convert.ToBoolean(Parameters[1]); } catch { } try { if (System.IO.Directory.Exists(dirPath)) { try { System.IO.Directory.Delete(dirPath); returnProtocol = GetToClientFileProtocol("删除成功"); } catch (Exception ex) { returnProtocol = GetToClientFileProtocol("删除失败,原因:" + ex.Message); } } else { returnProtocol = GetToClientFileProtocol("指定的目录“" + dirPath + "”在服务器上不存在。"); } } catch (Exception ex) { returnProtocol = GetToClientFileProtocol("获取失败,原因:“" + ex.Message + "”"); } } else { returnProtocol = GetToClientFileProtocol("参数不正确"); } return returnProtocol; } /// <summary> /// 获取服务器指定文件的信息 /// </summary> /// <returns></returns> public TCP_FileProtocol GetFileInfo(TCP_FileProtocol protocol) { TCP_FileProtocol returnProtocol = new TCP_FileProtocol(); //服务器端文件路径 string saveFilePath = protocol.Content; if (!protocol.Content.Contains(":")) { saveFilePath = HPSocketCS.Extended.CommonLibrary.GetFullDirectoryPath(HPSocketCS.Extended.CommonLibrary.BasePath) + protocol.Content; } ServerFileInfo retfileInfo = new ServerFileInfo(); if (!retfileInfo.IsExists&&System.IO.File.Exists(saveFilePath)) { System.IO.FileInfo fInfo = new FileInfo(saveFilePath); retfileInfo.GetMsg = "成功获取指定文件信息"; retfileInfo.FileName = fInfo.FullName; retfileInfo.FileSize = fInfo.Length; retfileInfo.IsExists = true; retfileInfo.CreateDatetime = fInfo.CreationTime; retfileInfo.UpdateDatetime = fInfo.LastWriteTime; if (retfileInfo.FileSize < HPSocketCS.Sdk.FileMD5VerifySize) { retfileInfo.FileMd5 = LYFZ.WinAPI.SDKSecurity.GetMD5HashFromFile(fInfo.FullName); } } else if (!retfileInfo.IsExists) { retfileInfo.GetMsg = "服务器上没有找到你请求的“" + protocol.Content + "”文件"; } returnProtocol = GetToClientFileProtocol(retfileInfo.ToString()); return returnProtocol; } //Import Photos static List<ClientRequestObject> _ImportPhotosRequestList = new List<ClientRequestObject>(); /// <summary> /// 客户端导入相片请求集合 /// </summary> public static List<ClientRequestObject> ImportPhotosRequestList { get { return TCP_RemoteDataHandlerPassiveMode._ImportPhotosRequestList; } set { TCP_RemoteDataHandlerPassiveMode._ImportPhotosRequestList = value; } } /// <summary> /// 检查对象在集合中是否存在 /// </summary> /// <param name="requestObject"></param> /// <returns></returns> bool ImportPhotosRequestExist(ClientRequestObject requestObject) { bool bl = false; foreach (ClientRequestObject obj in ImportPhotosRequestList) { if (obj.Key == requestObject.Key) { bl = true; break; } } return bl; } /// <summary> /// 开始导入相片 /// </summary> /// <param name="protocol"></param> /// <returns></returns> public TCP_FileProtocol StartImportPhotos(TCP_FileProtocol protocol) { TCP_FileProtocol returnProtocol = new TCP_FileProtocol(); ClientRequestObject requestObject = new ClientRequestObject(protocol.Content); TCP_ClientConnectInfo cInfo = new TCP_ClientConnectInfo(protocol.ClientInfo); requestObject.IP = cInfo.IP; requestObject.Prot = cInfo.Port; requestObject.HostIdentity = cInfo.HostIdentity; requestObject.ConnID = cInfo.ConnId; if (!ImportPhotosRequestExist(requestObject)) { } returnProtocol = GetToClientFileProtocol("Start"); return returnProtocol; } static List<ClientRequestObject> _GenerateThumbnailsRequestList = new List<ClientRequestObject>(); /// <summary> /// 生成缩略图请求集合 /// </summary> public static List<ClientRequestObject> GenerateThumbnailsRequestList { get { return TCP_RemoteDataHandlerPassiveMode._GenerateThumbnailsRequestList; } set { TCP_RemoteDataHandlerPassiveMode._GenerateThumbnailsRequestList = value; } } /// <summary> /// 检查对象在生成缩略图请求集合中是否存在 /// </summary> /// <param name="requestObject"></param> /// <returns></returns> bool GenerateThumbnailsRequestExist(ClientRequestObject requestObject) { bool bl = false; lock (GenerateThumbnailsRequestList) { foreach (ClientRequestObject obj in GenerateThumbnailsRequestList) { if (obj.Key == requestObject.Key) { bl = true; break; } } } return bl; } public static void RemoveGenerateThumbnailsRequest(ClientRequestObject requestObject) { lock (GenerateThumbnailsRequestList) { List<ClientRequestObject> delObjList = new List<ClientRequestObject>(); foreach (ClientRequestObject obj in GenerateThumbnailsRequestList) { if (obj.ConnID == requestObject.ConnID) { delObjList.Add(obj); } } foreach (ClientRequestObject obj in delObjList) { GenerateThumbnailsRequestList.Remove(obj); } } } static int _RegConnCount = 0; /// <summary> /// 客户端坐席注册数 /// </summary> public static int RegConnCount { get { return TCP_RemoteDataHandlerPassiveMode._RegConnCount; } set { TCP_RemoteDataHandlerPassiveMode._RegConnCount = value; } } private static string _ServerGlobalIDKey = ""; public static string ServerGlobalIDKey { get { return TCP_RemoteDataHandlerPassiveMode._ServerGlobalIDKey; } set { TCP_RemoteDataHandlerPassiveMode._ServerGlobalIDKey = value; } } #endregion #endregion #region 客户端发送指令到服务端处理方法 /// <summary> /// 发送SQL数据库请求命令到服务器并返回请求结果 (测试用) /// </summary> /// <param name="requestData">请求的SQL命令数据类</param> /// <param name="millisecondsTimeout"></param> /// <returns></returns> public HPSocketCS.Extended.SQLHelperReturnData HP_SendSqlCommandToServer(HPSocketCS.Extended.SQLHelperRequestData requestData, int millisecondsTimeout = 1000*90) { HPSocketCS.Extended.SQLHelperReturnData retData = null; try { byte[] tempSendBuffer = HPSocketCS.Extended.DataSetSerializerDeserialize.ObjectSerializerCompressionRetBytes(requestData); using (System.IO.MemoryStream retMstream = this.HpClient.AutoUnpackingSendAndReturnResult(tempSendBuffer, HPSocketCS.Extended.DataType.SQLHelper, HPSocketCS.Extended.TransferRequestCommand.SQLHelperData, millisecondsTimeout)) { if (retMstream != null && retMstream.Length > 0) { retData = (HPSocketCS.Extended.SQLHelperReturnData)HPSocketCS.Extended.DataSetSerializerDeserialize.ObjectDeserializeDecompress(retMstream.GetBuffer()); LYFZ.Network.TCPNetworkClient.TCP_NetworkClient.FromServerStartTimeStamp = retData.ServerStartTimeStamp; retData.DataSize = retMstream.Length; } if (retMstream != null) { retMstream.Close(); } } } catch (Exception ex) { retData = new HPSocketCS.Extended.SQLHelperReturnData("SQL请求处理出错:"+ex.Message); HPSocketCS.Extended.SystemFileLogs.WriteLogs(retData.ReturnMessage); } return retData; } /// <summary> /// 发送指令到服务端并返回服务器的处理结果 /// </summary> /// <param name="type">本次传输类型</param> /// <param name="command">要发送到服务器的指令</param> /// <param name="msgOrParameters">发送到服务器指令的参数或是说明,注:多个参数用 “|”分隔</param> /// <returns></returns> public TCP_FileProtocol HP_SendCommandToServer(InformationType type, HPSocketCS.Extended.TransferRequestCommand command, string msgOrParameters, int millisecondsTimeout = 1000*90) { TCP_FileProtocol protocol = new TCP_FileProtocol(); try { LYFZ.Network.TCP_FileProtocol msgXML = new Network.TCP_FileProtocol(msgOrParameters); byte[] tempSendBuffer = Encoding.UTF8.GetBytes(msgXML.ToString()); // 获得缓存 using (System.IO.MemoryStream retMstream = this.HpClient.AutoUnpackingSendAndReturnResult(tempSendBuffer, HPSocketCS.Extended.DataType.Text, command, millisecondsTimeout)) { if (retMstream != null && retMstream.Length > 0) { if (type == InformationType.Data) { protocol = new TCP_FileProtocol("return"); protocol.DataArray = retMstream.GetBuffer(); protocol.ReceiveFileSize = retMstream.Length; } else { string ReceiveInfo = Encoding.UTF8.GetString(retMstream.GetBuffer()); TCP_ProtocolHelperXML helper = new TCP_ProtocolHelperXML(ReceiveInfo.Trim()); protocol = helper.GetProtocol(); protocol.ReceiveFileSize = retMstream.Length; LYFZ.Network.TCPNetworkClient.TCP_NetworkClient.FromServerStartTimeStamp = protocol.ServerStartTimeStamp; } } } } catch (Exception ex) { HPSocketCS.Extended.SystemFileLogs.WriteLogs("连接错误:" + ex.Message); } return protocol; } /// <summary> /// 发送指令到服务端并返回服务器的处理结果 /// </summary> /// <param name="command">要发送到服务器的指令</param> /// <param name="msgOrParameters">发送到服务器指令的参数或是说明,注:多个参数用 “|”分隔</param> /// <returns></returns> public string SendCommandToServerRetMessage(HPSocketCS.Extended.TransferRequestCommand command, string msgOrParameters = "Hello", int millisecondsTimeout = 1000*90) { string tempMsg = ""; TCP_FileProtocol protocol = HP_SendCommandToServer(InformationType.Message, command, msgOrParameters, millisecondsTimeout); if (protocol.InfoType == InformationType.Message) { tempMsg = protocol.Content; } return tempMsg; } #endregion } }