TCP_NetworkServer.cs 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. using System.Net;
  5. using System.Net.Sockets;
  6. using System.Threading;
  7. using System.Management;
  8. using HPSocketCS.Extended;
  9. using System.Runtime.InteropServices;
  10. namespace LYFZ.Network.TCPNetworkServer
  11. {
  12. /// <summary>
  13. /// TCP网络通信服务端
  14. /// </summary>
  15. public class TCP_NetworkServer
  16. {
  17. public TCP_NetworkServer()
  18. {
  19. }
  20. public TCP_NetworkServer(HPSocketCS.Extended.CustomTraceListener _traceListenerLog)
  21. {
  22. this.TraceListenerLog = _traceListenerLog;
  23. }
  24. #region 网络程序处理代码
  25. private AppState appState = AppState.Stoped;
  26. public HPSocketCS.TcpPackServer hp_Server = new HPSocketCS.TcpPackServer();
  27. HPSocketCS.Extended.CustomTraceListener _TraceListenerLog = null;
  28. /// <summary>
  29. /// 服务器运行日志跟踪侦听器
  30. /// </summary>
  31. public HPSocketCS.Extended.CustomTraceListener TraceListenerLog
  32. {
  33. get { return _TraceListenerLog; }
  34. set { _TraceListenerLog = value; }
  35. }
  36. /// <summary>
  37. /// 启动网络
  38. /// </summary>
  39. /// <param name="ip"></param>
  40. /// <param name="port"></param>
  41. public void StartRun(string ip = "0.0.0.0", ushort port = 8500)
  42. {
  43. try
  44. {
  45. if (!this.isInitializesNetwork)
  46. {
  47. this.InitializesNetwork();
  48. }
  49. ServerStartTimeStamp = "1492583059892";//DateTime.Now.ToString("yyyyMMddHHmmsss");
  50. // 写在这个位置是上面可能会异常
  51. SetAppState(AppState.Starting);
  52. hp_Server.IpAddress = ip;
  53. hp_Server.Port = port;
  54. // 启动服务
  55. if (hp_Server.Start())
  56. {
  57. SetAppState(AppState.Started);
  58. SystemFileLogs.WriteLogs("服务器网络启动成功 IP:" + ip + ":" + port.ToString(), this.TraceListenerLog);
  59. }
  60. else
  61. {
  62. SetAppState(AppState.Stoped);
  63. throw new Exception(string.Format("$绑定套接字失败(套接字绑定),可能是端口“" + port.ToString() + "”被占用 -> {0}({1})", hp_Server.ErrorMessage, hp_Server.ErrorCode));
  64. }
  65. }
  66. catch (Exception ex)
  67. {
  68. SystemFileLogs.WriteLogs("服务器网络启动失败:" + ex.Message, this.TraceListenerLog);
  69. }
  70. }
  71. public void StopRun()
  72. {
  73. try
  74. {
  75. if (this.IsInitializesNetwork)
  76. {
  77. SetAppState(AppState.Stoping);
  78. // 停止服务
  79. SystemFileLogs.WriteLogs("服务器网络停止服务", this.TraceListenerLog);
  80. if (hp_Server.Stop())
  81. {
  82. SetAppState(AppState.Stoped);
  83. }
  84. else
  85. {
  86. SystemFileLogs.WriteLogs("服务器网络停止服务时出错:" + hp_Server.ErrorMessage + "(" + hp_Server.ErrorCode + ")", this.TraceListenerLog);
  87. }
  88. }
  89. }
  90. catch { }
  91. }
  92. bool isInitializesNetwork = false;
  93. /// <summary>
  94. /// 网络服务是否已初始化
  95. /// </summary>
  96. public bool IsInitializesNetwork
  97. {
  98. get { return isInitializesNetwork; }
  99. set { isInitializesNetwork = value; }
  100. }
  101. /// <summary>
  102. /// 初始化网络
  103. /// </summary>
  104. void InitializesNetwork()
  105. {
  106. try
  107. {
  108. // 设置服务器事件
  109. hp_Server.OnPrepareListen += new HPSocketCS.TcpServerEvent.OnPrepareListenEventHandler(OnPrepareListen);
  110. hp_Server.OnAccept += new HPSocketCS.TcpServerEvent.OnAcceptEventHandler(OnAccept);
  111. hp_Server.OnSend += new HPSocketCS.TcpServerEvent.OnSendEventHandler(OnSend);
  112. hp_Server.OnReceive += new HPSocketCS.TcpServerEvent.OnReceiveEventHandler(OnReceive);
  113. hp_Server.OnClose += new HPSocketCS.TcpServerEvent.OnCloseEventHandler(OnClose);
  114. hp_Server.OnShutdown += new HPSocketCS.TcpServerEvent.OnShutdownEventHandler(OnShutdown);
  115. // 设置包头标识,与对端设置保证一致性
  116. hp_Server.PackHeaderFlag = 0x1ff;
  117. // 设置最大封包大小
  118. hp_Server.MaxPackSize = 0x2000 * 32;
  119. hp_Server.SocketBufferSize = 512 * 1024;//hp_Server.MaxPackSize;
  120. this.isInitializesNetwork = true;
  121. SystemFileLogs.WriteLogs("服务器初始化网络成功", this.TraceListenerLog);
  122. SetAppState(AppState.Stoped);
  123. }
  124. catch (Exception ex)
  125. {
  126. SetAppState(AppState.Error);
  127. SystemFileLogs.WriteLogs("服务器初始化网络时出错:" + ex.Message, this.TraceListenerLog);
  128. }
  129. }
  130. /// <summary>
  131. /// 准备监听了事件
  132. /// </summary>
  133. /// <param name="soListen"></param>
  134. /// <returns></returns>
  135. HPSocketCS.HandleResult OnPrepareListen(IntPtr soListen)
  136. {
  137. // 监听事件到达了,一般没什么用吧?
  138. SystemFileLogs.WriteLogs("服务器已成功开始网络侦听...", this.TraceListenerLog);
  139. return HPSocketCS.HandleResult.Ok;
  140. }
  141. /// <summary>
  142. /// 连接到达事件
  143. /// </summary>
  144. /// <param name="connId"></param>
  145. /// <param name="pClient"></param>
  146. /// <returns></returns>
  147. HPSocketCS.HandleResult OnAccept(IntPtr connId, IntPtr pClient)
  148. {
  149. // 客户进入了
  150. // 获取客户端ip和端口
  151. string ip = string.Empty;
  152. ushort port = 0;
  153. if (hp_Server.GetRemoteAddress(connId, ref ip, ref port))
  154. {
  155. SystemFileLogs.WriteLogs("收接连接请求:" + ip + ":" + port.ToString(), this.TraceListenerLog);
  156. }
  157. else
  158. {
  159. SystemFileLogs.WriteLogs("获取某个连接的ip和端口时出错", this.TraceListenerLog);
  160. return HPSocketCS.HandleResult.Error;
  161. }
  162. // 设置附加数据
  163. HPSocketCS.Extended.ClientInfo ci = new HPSocketCS.Extended.ClientInfo();
  164. ci.ConnId = connId;
  165. ci.IpAddress = ip;
  166. ci.Port = port;
  167. if (hp_Server.SetConnectionExtra(connId, ci) == false)
  168. {
  169. SystemFileLogs.WriteLogs("设置连接的附加数据失败,IP地址为 " + ip + ":" + port.ToString(), this.TraceListenerLog);
  170. return HPSocketCS.HandleResult.Error;
  171. }
  172. return HPSocketCS.HandleResult.Ok;
  173. }
  174. /// <summary>
  175. /// 数据包发送事件
  176. /// </summary>
  177. /// <param name="connId"></param>
  178. /// <param name="bytes"></param>
  179. /// <returns></returns>
  180. HPSocketCS.HandleResult OnSend(IntPtr connId, byte[] bytes)
  181. {
  182. // 服务器发数据了
  183. return HPSocketCS.HandleResult.Ok;
  184. }
  185. /// <summary>
  186. /// 数据到达
  187. /// </summary>
  188. /// <param name="connId"></param>
  189. /// <param name="bytes"></param>
  190. /// <returns></returns>
  191. HPSocketCS.HandleResult OnReceive(IntPtr connId, byte[] bytes)
  192. {
  193. // 数据到达了
  194. try
  195. {
  196. bool retProcessed = true;//处理情况
  197. //收到的数据
  198. byte[] receiveBytes = new byte[0];
  199. TcpHeadInfo header = hp_Server.BytesToStruct<TcpHeadInfo>(bytes);
  200. DataType dType = (DataType)header.MsgDataType;
  201. int headSize = Marshal.SizeOf(header);
  202. TcpTailInfo tail = new TcpTailInfo();
  203. if (header.IsTail)
  204. {
  205. //有附加尾数据时
  206. int tailSize = Marshal.SizeOf(tail);
  207. byte[] tailBytes = new byte[tailSize];
  208. Array.ConstrainedCopy(bytes, bytes.Length - tailSize, tailBytes, 0, tailBytes.Length);
  209. tail = hp_Server.BytesToStruct<TcpTailInfo>(tailBytes);
  210. receiveBytes = new byte[bytes.Length - headSize - tailSize];
  211. Array.ConstrainedCopy(bytes, headSize, receiveBytes, 0, receiveBytes.Length);
  212. tailBytes = null;
  213. }
  214. else
  215. {
  216. // 因为没有附加尾数据,所以大小可以用length - objSize
  217. receiveBytes = new byte[bytes.Length - headSize];
  218. Array.ConstrainedCopy(bytes, headSize, receiveBytes, 0, receiveBytes.Length);
  219. }
  220. bytes = null;
  221. //接收到的客户端发送来的数据
  222. byte[] recbytes = null;
  223. try
  224. {
  225. if (header.TransportStart && header.TransportEnd)
  226. {
  227. recbytes = receiveBytes;
  228. receiveBytes = null;
  229. }
  230. else
  231. {
  232. ReceiveData rData = hp_Server.SCommonLibrary.GetReceiveData(header);
  233. if (rData == null)
  234. {
  235. rData = new ReceiveData();
  236. hp_Server.SCommonLibrary.AddReceiveData(rData);
  237. }
  238. rData.ReceiveRemoteClientInfo = header;
  239. rData.ReceiveDataMstream.Write(receiveBytes, 0, receiveBytes.Length);
  240. if (header.TransportEnd)
  241. {
  242. rData.ReceiveDataMstream.Position = 0;
  243. //recbytes = rData.ReceiveDataMstream.ToArray();
  244. recbytes = new byte[rData.ReceiveDataMstream.Length];
  245. rData.ReceiveDataMstream.Read(recbytes, 0, recbytes.Length);
  246. hp_Server.SCommonLibrary.RemoveReceiveDataData(rData);
  247. }
  248. }
  249. if (recbytes != null)
  250. {
  251. recbytes = HPSocketCS.Extended.DataSetSerializerDeserialize.DataDecompressRetBytes(recbytes);
  252. switch (dType)
  253. {
  254. case DataType.Text:
  255. retProcessed = this.DataTypeTextProcessed(header, connId, recbytes);
  256. break;
  257. case DataType.File:
  258. FileRequestType RequestType = (FileRequestType)tail.RequestType;
  259. if (this.EventFileDataRequest != null)
  260. {
  261. this.EventFileDataRequest(hp_Server, header, tail, connId, recbytes);
  262. }
  263. switch (RequestType)
  264. {
  265. case FileRequestType.Upload:
  266. //接收文件
  267. retProcessed = hp_Server.ReceiveFileToServerRootDirectory(tail, recbytes);
  268. break;
  269. case FileRequestType.Download:
  270. //发送文件
  271. retProcessed = hp_Server.SenFileToClient(header, tail, connId);
  272. break;
  273. }
  274. break;
  275. case DataType.SQLHelper:
  276. case DataType.Serialization:
  277. if (this.EventSerializationDataRequest != null)
  278. {
  279. this.EventSerializationDataRequest(hp_Server, header, connId, recbytes);
  280. }
  281. break;
  282. case DataType.List:
  283. break;
  284. case DataType.Array:
  285. break;
  286. case DataType.None:
  287. break;
  288. }
  289. }
  290. }
  291. finally
  292. {
  293. try
  294. {
  295. System.Array.Clear(recbytes, 0, recbytes.Length);
  296. }
  297. catch { }
  298. recbytes = null;
  299. }
  300. /* if (hp_Server.Send(connId, bytes, bytes.Length))
  301. {
  302. return HPSocketCS.HandleResult.Ok;
  303. }*/
  304. if (retProcessed)
  305. {
  306. return HPSocketCS.HandleResult.Ok;
  307. }
  308. else
  309. {
  310. //return HandleResult.Error;
  311. return HPSocketCS.HandleResult.Ignore;
  312. }
  313. }
  314. catch (Exception ex)
  315. {
  316. SystemFileLogs.WriteLogs("接收数据时出错:" + ex.Message, this.TraceListenerLog);
  317. return HPSocketCS.HandleResult.Ignore;
  318. }
  319. finally
  320. {
  321. System.GC.Collect();
  322. }
  323. }
  324. /// <summary>
  325. /// 连接关闭事件
  326. /// </summary>
  327. /// <param name="connId"></param>
  328. /// <param name="enOperation"></param>
  329. /// <param name="errorCode"></param>
  330. /// <returns></returns>
  331. HPSocketCS.HandleResult OnClose(IntPtr connId, HPSocketCS.SocketOperation enOperation, int errorCode)
  332. {
  333. if (errorCode == 0)
  334. {
  335. HPSocketCS.Extended.ClientInfo cInfo = hp_Server.GetClientInfo(connId);
  336. if (cInfo != null)
  337. {
  338. SystemFileLogs.WriteLogs(String.Format("ID为{0}的连接已关闭,IP:{1}:{2}", connId, cInfo.IpAddress, cInfo.Port), this.TraceListenerLog);
  339. }
  340. else {
  341. SystemFileLogs.WriteLogs(String.Format("ID为{0}的连接已关闭", connId), this.TraceListenerLog);
  342. }
  343. }
  344. else if (enOperation == HPSocketCS.SocketOperation.Close)
  345. {
  346. SystemFileLogs.WriteLogs(String.Format("客户端已关闭连接 > [{0},OnError] -> OP:{1},CODE:{2}", connId, enOperation, errorCode), this.TraceListenerLog);
  347. }
  348. else
  349. {
  350. SystemFileLogs.WriteLogs(String.Format("连接出错 > [{0},OnError] -> OP:{1},CODE:{2}", connId, enOperation, errorCode), this.TraceListenerLog);
  351. // return HPSocketSdk.HandleResult.Ok;
  352. return HPSocketCS.HandleResult.Error;
  353. }
  354. hp_Server.SCommonLibrary.ClearInvalidConnectionResource(connId);
  355. if (hp_Server.SetConnectionExtra(connId, null) == false)
  356. {
  357. SystemFileLogs.WriteLogs("清除连接的附加数据失败:" + errorCode, this.TraceListenerLog);
  358. }
  359. TCPNetworkServer.TCP_NetworkServer.AddOrSetClientList(new TCP_ClientConnectInfo(connId.ToInt32(), false));
  360. ClientRequestObject requestObject = new ClientRequestObject();
  361. try
  362. {
  363. requestObject.ConnID = connId.ToInt32();
  364. TCP_RemoteDataHandlerPassiveMode.RemoveGenerateThumbnailsRequest(requestObject);
  365. }
  366. catch { }
  367. finally
  368. {
  369. requestObject = null;
  370. }
  371. return HPSocketCS.HandleResult.Ok;
  372. }
  373. /// <summary>
  374. /// 服务器关闭事件
  375. /// </summary>
  376. /// <returns></returns>
  377. HPSocketCS.HandleResult OnShutdown()
  378. {
  379. // 服务关闭了
  380. hp_Server.SCommonLibrary.ClearAllInvalidResource();
  381. return HPSocketCS.HandleResult.Ok;
  382. }
  383. /// <summary>
  384. /// 设置程序状态
  385. /// </summary>
  386. /// <param name="state"></param>
  387. void SetAppState(AppState state)
  388. {
  389. appState = state;
  390. }
  391. /// <summary>
  392. /// 服务器端接收客户端发送的文本数据请求并处理返回结果
  393. /// </summary>
  394. /// <param name="header">协议头</param>
  395. /// <param name="connId">连接ID</param>
  396. /// <param name="bytes">收到的数据</param>
  397. public bool DataTypeTextProcessed(TcpHeadInfo header, IntPtr connId, byte[] bytes)
  398. {
  399. bool ret = false;
  400. TCP_RemoteDataHandlerPassiveMode RDHandler = new TCP_RemoteDataHandlerPassiveMode();
  401. TransferRequestCommand Command = (TransferRequestCommand)Convert.ToInt32(header.RequestCommand);
  402. try
  403. {
  404. string ReceiveInfo = Encoding.UTF8.GetString(bytes, 0, bytes.Length);
  405. TCP_ProtocolHelperXML pXml = new TCP_ProtocolHelperXML(ReceiveInfo);
  406. TCP_FileProtocol returnProtocol = new TCP_FileProtocol();
  407. TCP_FileProtocol recprotocol = pXml.GetProtocol();
  408. TCP_ClientConnectInfo cInfo = new TCP_ClientConnectInfo(connId.ToInt32(), header);
  409. recprotocol.ClientInfo = cInfo.ToString();
  410. try
  411. {
  412. switch (Command)
  413. {
  414. case TransferRequestCommand.Message:
  415. returnProtocol = new TCP_FileProtocol("服务器已接收到:" + recprotocol.Content + "...");
  416. break;
  417. case TransferRequestCommand.DeleteFile:
  418. returnProtocol = RDHandler.DeleteFile(recprotocol);
  419. break;
  420. case TransferRequestCommand.GeTFileList:
  421. returnProtocol = RDHandler.GeTFileList(recprotocol);
  422. break;
  423. case TransferRequestCommand.GetDirectoryList:
  424. returnProtocol = RDHandler.GetDirectoryList(recprotocol);
  425. break;
  426. case TransferRequestCommand.DeleteDirectory:
  427. returnProtocol = RDHandler.DeleteDirectory(recprotocol);
  428. break;
  429. case TransferRequestCommand.GetFileInfo:
  430. returnProtocol = RDHandler.GetFileInfo(recprotocol);
  431. break;
  432. case TransferRequestCommand.GetBackupRecords:
  433. returnProtocol = RDHandler.GetBackupRecords(recprotocol);
  434. break;
  435. case TransferRequestCommand.GetMainShopBackupRecords:
  436. returnProtocol = RDHandler.GetMainShopBackupRecords(recprotocol);
  437. break;
  438. default:
  439. returnProtocol = new TCP_FileProtocol("非法指令,服务器拒绝执行...");
  440. break;
  441. }
  442. }
  443. catch (Exception ex)
  444. {
  445. returnProtocol = new TCP_FileProtocol("网络请求处理失败,原因:" + ex.Message);
  446. }
  447. byte[] sendBytes = null;
  448. if (returnProtocol.InfoType == EnumerateLibrary.InformationType.Data)
  449. {
  450. sendBytes = returnProtocol.DataArray;
  451. }
  452. else
  453. {
  454. sendBytes = Encoding.UTF8.GetBytes(returnProtocol.ToString());
  455. }
  456. ret = hp_Server.AutoUnpackingAndSend(connId, sendBytes, header.TransportID, DataType.Text, Command);
  457. RDHandler = null;
  458. System.GC.Collect();
  459. }
  460. catch (Exception ex)
  461. {
  462. try
  463. {
  464. SystemFileLogs.WriteLogs("服务器处理客户端请求时出错:" + ex.Message, this.TraceListenerLog);
  465. byte[] sendBytes = Encoding.UTF8.GetBytes(new TCP_FileProtocol("服务器处理客户端请求时出错:" + ex.Message).ToString());
  466. ret = hp_Server.AutoUnpackingAndSend(connId, sendBytes, header.TransportID, DataType.Text, Command);
  467. RDHandler = null;
  468. }
  469. catch
  470. {
  471. }
  472. }
  473. return ret;
  474. }
  475. static List<TCP_ClientConnectInfo> _ClientConnList = new List<TCP_ClientConnectInfo>();
  476. /// <summary>
  477. /// 获取客户端连接集合 用于管理客户端成功连接座席数
  478. /// </summary>
  479. public static List<TCP_ClientConnectInfo> ClientConnList
  480. {
  481. get { return _ClientConnList; }
  482. }
  483. /// <summary>
  484. /// 添加和设置客户端连接
  485. /// </summary>
  486. /// <param name="connInfo"></param>
  487. /// <param name="isRefresh">是否为刷新客户端连接,刷新客户端时不做客户端添加(一搬用于已满座席时)</param>
  488. public static void AddOrSetClientList(TCP_ClientConnectInfo connInfo, bool isRefresh = false)
  489. {
  490. if (connInfo.HostIdentity.Trim().ToLower() == "ServerHosts".ToLower())
  491. {
  492. return;
  493. }
  494. lock (ClientConnList)
  495. {
  496. bool isConnInfo = false;
  497. connInfo.ConnectionTime = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
  498. foreach (TCP_ClientConnectInfo cinfo in ClientConnList)
  499. {
  500. try
  501. {
  502. if (cinfo.ConnId == connInfo.ConnId)
  503. {
  504. cinfo.ConnStatus = connInfo.ConnStatus;
  505. cinfo.ConnectionTime = connInfo.ConnectionTime;
  506. }
  507. }
  508. catch { }
  509. try
  510. {
  511. if (connInfo.ConnStatus && cinfo.HostIdentity.Trim().Length > 0)
  512. {
  513. if (cinfo.HostIdentity.Trim().ToLower() == connInfo.HostIdentity.Trim().ToLower())
  514. {
  515. cinfo.ConnId = connInfo.ConnId;
  516. cinfo.ConnStatus = connInfo.ConnStatus;
  517. cinfo.ConnectionTime = connInfo.ConnectionTime;
  518. cinfo.IP = connInfo.IP;
  519. cinfo.Port = connInfo.Port;
  520. cinfo.LoginUsername = connInfo.LoginUsername;
  521. isConnInfo = true;
  522. break;
  523. }
  524. }
  525. }
  526. catch { }
  527. }
  528. if (!isConnInfo && connInfo.ConnStatus && !isRefresh)
  529. {
  530. ClientConnList.Add(connInfo);
  531. }
  532. }
  533. }
  534. static string _ServerStartTimeStamp = "";
  535. /// <summary>
  536. /// 服务器启动时间标识
  537. /// </summary>
  538. public static string ServerStartTimeStamp
  539. {
  540. get { return TCP_NetworkServer._ServerStartTimeStamp; }
  541. set { TCP_NetworkServer._ServerStartTimeStamp = value; }
  542. }
  543. /// <summary>
  544. /// 申明委托
  545. /// </summary>
  546. /// <param name="e"></param>
  547. /// <returns></returns>
  548. // public delegate void EventLockVerifiedHandler(EventLockVerified e);
  549. /// <summary>
  550. /// EventClientLockVerified事件
  551. /// </summary>
  552. // public event EventLockVerifiedHandler EventClientLockVerified;
  553. #endregion
  554. #region 客户端请求处理事件
  555. /// <summary>
  556. /// 申明客户端请求处理事件委托
  557. /// </summary>
  558. /// <param name="hp_Server"></param>
  559. /// <param name="header"></param>
  560. /// <param name="connId"></param>
  561. /// <param name="bytes"></param>
  562. public delegate void EventSerializationDataRequestHandler(HPSocketCS.TcpPackServer hp_Server, TcpHeadInfo header, IntPtr connId, byte[] bytes);
  563. /// <summary>
  564. /// 申明客户端请求处理事件
  565. /// </summary>
  566. public event EventSerializationDataRequestHandler EventSerializationDataRequest;
  567. /// <summary>
  568. /// 申明客户端请求文件传输处理事件委托
  569. /// </summary>
  570. /// <param name="hp_Server"></param>
  571. /// <param name="header"></param>
  572. /// <param name="connId"></param>
  573. /// <param name="bytes"></param>
  574. public delegate void EventFileDataRequestHandler(HPSocketCS.TcpPackServer hp_Server, TcpHeadInfo header, TcpTailInfo tail, IntPtr connId, byte[] bytes);
  575. /// <summary>
  576. /// 申明客户端请求文件传输处理事件
  577. /// </summary>
  578. public event EventFileDataRequestHandler EventFileDataRequest;
  579. #endregion
  580. }
  581. /// <summary>
  582. /// EventLockVerified 客户端连接事件对象
  583. /// </summary>
  584. public class EventLockVerified : EventArgs
  585. {
  586. public EventLockVerified()
  587. {
  588. }
  589. HPSocketCS.Extended.ClientInfo _CInfo;
  590. /// <summary>
  591. /// 客户端信息
  592. /// </summary>
  593. public HPSocketCS.Extended.ClientInfo CInfo
  594. {
  595. get { return _CInfo; }
  596. set { _CInfo = value; }
  597. }
  598. }
  599. }