SerializationRequestProcessed.cs 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406
  1. using HPSocketCS.Extended;
  2. using LYFZ.DAL.N8Process;
  3. using LYFZ.Helper;
  4. using LYFZ.Model;
  5. using LYFZ.Network.FTPOperation;
  6. using System;
  7. using System.Collections.Generic;
  8. using System.Linq;
  9. using System.Text;
  10. namespace LYFZ.Network.TCPNetworkServer
  11. {
  12. /// <summary>
  13. /// 请求指令
  14. /// </summary>
  15. public enum SerializerRequestCommand
  16. {
  17. /// <summary>
  18. /// 测试指令
  19. /// </summary>
  20. TestCommand = 0,
  21. FTPCommand = 1,
  22. OSS_QueryBranch,
  23. OSS_UploadTask,
  24. N8ServerIpAddress,
  25. OSS_QueryBranchId,
  26. OSS_Status,
  27. Get_Server_Config,
  28. OSS_TASK_JSON,
  29. OSS_TASK_INFO,
  30. OSS_TASK_EXISTS
  31. }
  32. public class SerializationRequestProcessed
  33. {
  34. public SerializationRequestProcessed()
  35. {
  36. }
  37. /// <summary>
  38. /// 服务器端接收客户端发送的Serialization数据请求并处理返回结果
  39. /// </summary>
  40. /// <param name="hp_Server">网络连接对象</param>
  41. /// <param name="header">协议头</param>
  42. /// <param name="connId">连接ID</param>
  43. /// <param name="bytes">收到的数据</param>
  44. public static bool SerializationDataRequestProcessed( HPSocketCS.TcpPackServer hp_Server, TcpHeadInfo header, IntPtr connId, byte[] bytes )
  45. {
  46. bool ret = false;
  47. TransferRequestCommand Command = (TransferRequestCommand)Convert.ToInt32( header.RequestCommand );
  48. ReturnData returnData;
  49. try
  50. {
  51. RequestData requestData = (RequestData)DataSetSerializerDeserialize.ObjectDeserializeDecompress( bytes );
  52. TCP_ClientConnectInfo cInfo = new TCP_ClientConnectInfo( connId.ToInt32(), header );
  53. try
  54. {
  55. // LYFZ.BLL.BLL_FileLogs.WriteMainLogs(String.Format("接收到命令请求{0},参数{1}", Command.ToString(), recprotocol.Content));
  56. if ( Command == TransferRequestCommand.SerializationData )
  57. {
  58. returnData = SerializerRequestProcessed( cInfo, requestData );
  59. }
  60. else
  61. {
  62. returnData = new ReturnData( "非法Serializer请求指令,服务器拒绝执行..." );
  63. }
  64. }
  65. catch ( Exception ex )
  66. {
  67. returnData = new ReturnData( "处理Serializer请求指令时出错:" + ex.Message );
  68. }
  69. // LYFZ.BLL.BLL_FileLogs.WriteMainLogs("服务器端返回信息:" + returnProtocol.Content.Trim());
  70. if ( returnData == null )
  71. {
  72. returnData = new ReturnData( "Serializer请求指令失败,没有返回有效的结果" );
  73. }
  74. returnData.ServerStartTimeStamp = LYFZ.Network.TCPNetworkServer.TCP_NetworkServer.ServerStartTimeStamp;
  75. byte[] sendBytes = DataSetSerializerDeserialize.ObjectSerializerCompressionRetBytes( returnData );
  76. ret = hp_Server.AutoUnpackingAndSend( connId, sendBytes, header.TransportID, DataType.Serialization, Command );
  77. System.GC.Collect();
  78. }
  79. catch ( Exception ex )
  80. {
  81. try
  82. {
  83. returnData = new ReturnData( "服务器处理客户端Serializer请求时出错:" + ex.Message );
  84. returnData.ServerStartTimeStamp = LYFZ.Network.TCPNetworkServer.TCP_NetworkServer.ServerStartTimeStamp;
  85. LYFZ.BLL.BLL_FileLogs.WriteMainLogs( returnData.ReturnMessage );
  86. byte[] sendBytes = DataSetSerializerDeserialize.ObjectSerializerCompressionRetBytes( returnData );
  87. ret = hp_Server.AutoUnpackingAndSend( connId, sendBytes, header.TransportID, DataType.Serialization, Command );
  88. }
  89. catch
  90. {
  91. }
  92. }
  93. return ret;
  94. }
  95. /// <summary>
  96. /// 处理SQL命令请求 并返回请求结果
  97. /// </summary>
  98. /// <param name="cInfo"></param>
  99. /// <param name="requestData"></param>
  100. /// <returns></returns>
  101. static ReturnData SerializerRequestProcessed( TCP_ClientConnectInfo cInfo, RequestData requestData )
  102. {
  103. ReturnData returnData = null;
  104. SerializerRequestCommand rCommand = (SerializerRequestCommand)requestData.RequestCommand;
  105. //System.IO.File.WriteAllText("D:\\txt.txt",(System.Windows.Forms.Application.ExecutablePath) + "\\txt.txt");
  106. switch ( rCommand )
  107. {
  108. case SerializerRequestCommand.TestCommand:
  109. string jsondata = "1111";
  110. byte[] jsonBytes = HPSocketCS.Extended.DataSetSerializerDeserialize.ObjectSerializerRetBytes( jsondata );
  111. returnData = new ReturnData( "请求指令成功 ~O~", 0 );
  112. returnData.DataByte = jsonBytes;
  113. returnData.AttachedMessage = "Serializer测试请求指令成功 ~O~ 收到的附加信息为:" + requestData.AttachedMessage;
  114. break;
  115. case SerializerRequestCommand.FTPCommand:
  116. string jString = requestData.AttachedMessage;
  117. FTPDataCommand command = new FTPDataCommand();
  118. string msg = command.CommandFtpData( jString );
  119. returnData = new ReturnData( "请求指令成功 ~O~", 0 );
  120. returnData.AttachedMessage = msg;
  121. break;
  122. #region oss云传片
  123. // 客户端请求oss分店信息;
  124. case SerializerRequestCommand.OSS_QueryBranch:
  125. {
  126. List<OssBranch> osslist = OssOperation.OssProcess.GetBranchList();
  127. if ( osslist != null )
  128. {
  129. returnData = new ReturnData( "请求指令成功 ~O~", 0 );
  130. returnData.DataByte = osslist.ToSerializerRetBytes();
  131. }
  132. else
  133. {
  134. returnData = new ReturnData( "请求指令失败 ~O~", 1 );
  135. returnData.DataByte = null;
  136. }
  137. bool useOss = false;
  138. // 打开指定的xml文件;
  139. string configPath = LYFZ.WinAPI.CustomPublicMethod.GetFullDirectoryPath( LYFZ.WinAPI.CustomPublicMethod.BasePath ) + "AliyunOssClient\\lyfzAliyunOss.config";
  140. XMLHelper xmlhelper = new XMLHelper( configPath );
  141. if ( xmlhelper != null )
  142. {
  143. useOss = Convert.ToBoolean( xmlhelper.GetXmlNodeByXpath( "//sys_configuration//UseOss" ) == null ? "false" : xmlhelper.GetXmlNodeByXpath( "//sys_configuration//UseOss" ).InnerText );
  144. }
  145. // 附加数据:是否开启oss传片;
  146. returnData.AttachedMessage = useOss.ToString();
  147. }
  148. break;
  149. case SerializerRequestCommand.OSS_Status:
  150. {
  151. bool useOss = false;
  152. returnData = new ReturnData( "请求指令成功 ~O~", 0 );
  153. // 打开指定的xml文件;
  154. string configPath = LYFZ.WinAPI.CustomPublicMethod.GetFullDirectoryPath( LYFZ.WinAPI.CustomPublicMethod.BasePath ) + "AliyunOssClient\\lyfzAliyunOss.config";
  155. XMLHelper xmlhelper = new XMLHelper( configPath );
  156. if ( xmlhelper != null )
  157. {
  158. useOss = Convert.ToBoolean( xmlhelper.GetXmlNodeByXpath( "//sys_configuration//UseOss" ) == null ? "false" : xmlhelper.GetXmlNodeByXpath( "//sys_configuration//UseOss" ).InnerText );
  159. }
  160. // 附加数据:是否开启oss传片;
  161. returnData.AttachedMessage = useOss.ToString();
  162. }
  163. break;
  164. // 获取当前服务器配置的分店id;
  165. case SerializerRequestCommand.OSS_QueryBranchId:
  166. {
  167. string branchid = "";
  168. // 打开指定的xml文件;
  169. string configfile = LYFZ.WinAPI.CustomPublicMethod.GetFullDirectoryPath( LYFZ.WinAPI.CustomPublicMethod.BasePath ) + "AliyunOssClient\\lyfzAliyunOss.config";
  170. XMLHelper xml = new XMLHelper( configfile );
  171. if ( xml != null )
  172. {
  173. branchid = xml.GetXmlNodeByXpath( "//sys_configuration//LoginId" ) == null ? "" : xml.GetXmlNodeByXpath( "//sys_configuration//LoginId" ).InnerText;
  174. }
  175. // 附加数据:是否开启oss传片;
  176. returnData.AttachedMessage = branchid;
  177. }
  178. break;
  179. // 客户端发送上传任务信息;
  180. case SerializerRequestCommand.OSS_UploadTask:
  181. {
  182. HPSocketCS.Extended.RequestParameters reqParameters = requestData.AttachedDataToObject<HPSocketCS.Extended.RequestParameters>();
  183. OssOperation.OssUploadTask uploadTask = reqParameters.GetRequestParameter<OssOperation.OssUploadTask>( "uploadtask" );
  184. if ( OssOperation.OssProcess.SaveUploadTaskToFile( uploadTask ) )
  185. {
  186. returnData = new ReturnData( "请求指令成功 ~O~", 0 );
  187. }
  188. else
  189. {
  190. returnData = new ReturnData( "请求指令失败 ~O~", 1 );
  191. }
  192. }
  193. break;
  194. #endregion
  195. #region oss
  196. case SerializerRequestCommand.OSS_TASK_JSON:
  197. {
  198. HPSocketCS.Extended.RequestParameters reqParameters = requestData.AttachedDataToObject<HPSocketCS.Extended.RequestParameters>();
  199. string strTaskJson = reqParameters.GetRequestParameter<string>( "oss_task_json" );
  200. string strTaskId = requestData.AttachedMessage;
  201. string path = LYFZ.WinAPI.CustomPublicMethod.GetFullDirectoryPath( LYFZ.WinAPI.CustomPublicMethod.BasePath ) + ".OssTask\\";
  202. if ( !System.IO.Directory.Exists( path ) )
  203. {
  204. try
  205. {
  206. System.IO.Directory.CreateDirectory( path );
  207. }
  208. catch ( Exception e )
  209. {
  210. returnData = new ReturnData( "无法创建任务文件保存目录, " + e.Message, 1 );
  211. return returnData;
  212. }
  213. }
  214. // 保存文件;
  215. try
  216. {
  217. if ( strTaskId.Length == 33 )
  218. {
  219. string file = path + strTaskId.Substring( 0, 32 ) + ".json";
  220. System.IO.File.WriteAllText( file, strTaskJson );
  221. }
  222. else
  223. {
  224. string file = path + strTaskId + ".json";
  225. //if ( !System.IO.File.Exists( file ) )
  226. System.IO.File.WriteAllText( file, strTaskJson );
  227. }
  228. returnData = new ReturnData( "保存文件成功", 0 );
  229. // 判断程序是否启动;
  230. #region 单例模式运行
  231. try
  232. {
  233. bool create;
  234. System.Threading.Mutex mu = new System.Threading.Mutex( false, "lyfz.Oss.Upload.Tool", out create );
  235. if ( create )
  236. {
  237. // 退出锁;
  238. mu.ReleaseMutex();
  239. // 启动程序;
  240. System.Diagnostics.Process.Start( LYFZ.WinAPI.CustomPublicMethod.BasePath + "\\OssTool.exe" );
  241. }
  242. }
  243. catch { }
  244. #endregion
  245. }
  246. catch ( Exception e )
  247. {
  248. returnData = new ReturnData( "保存文件失败," + e.Message, 1 );
  249. return returnData;
  250. }
  251. }
  252. break;
  253. case SerializerRequestCommand.OSS_TASK_INFO:
  254. {
  255. string path = LYFZ.WinAPI.CustomPublicMethod.GetFullDirectoryPath( LYFZ.WinAPI.CustomPublicMethod.BasePath ) + "\\.OssTask\\";
  256. if ( !System.IO.Directory.Exists( path ) )
  257. {
  258. returnData = new ReturnData( "任务文件目录不存在!", 1 );
  259. return returnData;
  260. }
  261. // 遍历文件夹;
  262. string strJson;
  263. List<string> listJson = new List<string>();
  264. try
  265. {
  266. string[] files = System.IO.Directory.GetFiles( path );
  267. foreach ( string file in files )
  268. {
  269. strJson = System.IO.File.ReadAllText( file );
  270. listJson.Add( strJson );
  271. }
  272. returnData = new ReturnData( "获取任务信息成功", 0 );
  273. returnData.DataByte = listJson.ToSerializerRetBytes();
  274. }
  275. catch ( Exception e )
  276. {
  277. returnData = new ReturnData( "遍历任务文件失败," + e.Message, 1 );
  278. return returnData;
  279. }
  280. }
  281. break;
  282. case SerializerRequestCommand.OSS_TASK_EXISTS:
  283. {
  284. // 获取客户的请求参数;
  285. HPSocketCS.Extended.RequestParameters reqParameters = requestData.AttachedDataToObject<HPSocketCS.Extended.RequestParameters>();
  286. string strTaskId = reqParameters.GetRequestParameter<string>( "oss_task_id" );
  287. // 查找文件;
  288. string path = LYFZ.WinAPI.CustomPublicMethod.GetFullDirectoryPath( LYFZ.WinAPI.CustomPublicMethod.BasePath ) + "\\.OssTask\\";
  289. if ( !System.IO.Directory.Exists( path ) )
  290. {
  291. returnData = new ReturnData( "任务文件目录不存在!", 1 );
  292. return returnData;
  293. }
  294. // 遍历文件夹;
  295. try
  296. {
  297. string strJson;
  298. string filename;
  299. bool bExist = false;
  300. string[] files = System.IO.Directory.GetFiles( path, "*.json" );
  301. foreach ( string file in files )
  302. {
  303. filename = System.IO.Path.GetFileNameWithoutExtension( file );
  304. if ( filename.ToUpper() == strTaskId.ToUpper() )
  305. {
  306. bExist = true;
  307. strJson = System.IO.File.ReadAllText( file );
  308. returnData = new ReturnData( "获取任务信息成功", 0 );
  309. returnData.DataByte = strJson.ToSerializerRetBytes();
  310. break;
  311. }
  312. }
  313. if ( !bExist )
  314. {
  315. returnData = new ReturnData( "没有该任务", 1 );
  316. }
  317. }
  318. catch ( Exception e )
  319. {
  320. returnData = new ReturnData( "遍历任务文件失败," + e.Message, 1 );
  321. return returnData;
  322. }
  323. }
  324. break;
  325. #endregion
  326. // 客户端获取服务端配置信息, 用于客户端获取备份相片等操作;
  327. case SerializerRequestCommand.Get_Server_Config:
  328. {
  329. LYFZ.Model.Model_ServerConfig ConfigModel = new BLL.BLL_Config().GetModelServerSysConfig();
  330. if ( ConfigModel != null )
  331. {
  332. returnData = new ReturnData( "请求指令成功 ~O~", 0 );
  333. returnData.DataByte = ConfigModel.ToSerializerRetBytes();
  334. }
  335. else
  336. {
  337. returnData = new ReturnData( "请求指令失败 ~O~", 1 );
  338. returnData.DataByte = null;
  339. }
  340. }
  341. break;
  342. #region N8服务器IP地址;
  343. case SerializerRequestCommand.N8ServerIpAddress:
  344. {
  345. DAL_N8ServerConfig config = new DAL_N8ServerConfig();
  346. config.LoadConfig();
  347. returnData = new ReturnData( "请求指令成功 ~O~", 0 );
  348. Model.N8Process.N8ServerConfig result = new Model.N8Process.N8ServerConfig();
  349. result.N8ProductConfigDirectory = config.N8ProductConfigDirectory;
  350. result.N8ServerIpAddress = config.N8ServerIpAddress;
  351. result.N8ServerStatisticsDirectory = config.N8ServerStatisticsDirectory;
  352. result.N8ServerUserDirectory = config.N8ServerUserDirectory;
  353. returnData.DataByte = result.ToSerializerRetBytes();
  354. }
  355. break;
  356. #endregion
  357. }
  358. return returnData;
  359. }
  360. }
  361. }