INetworkChannel.cs 4.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164
  1. //------------------------------------------------------------
  2. // Game Framework
  3. // Copyright © 2013-2021 Jiang Yin. All rights reserved.
  4. // Homepage: https://gameframework.cn/
  5. // Feedback: mailto:ellan@gameframework.cn
  6. //------------------------------------------------------------
  7. using System;
  8. using System.Net;
  9. using System.Net.Sockets;
  10. namespace GameFramework.Network
  11. {
  12. /// <summary>
  13. /// 网络频道接口。
  14. /// </summary>
  15. public interface INetworkChannel
  16. {
  17. /// <summary>
  18. /// 获取网络频道名称。
  19. /// </summary>
  20. string Name
  21. {
  22. get;
  23. }
  24. /// <summary>
  25. /// 获取网络频道所使用的 Socket。
  26. /// </summary>
  27. Socket Socket
  28. {
  29. get;
  30. }
  31. /// <summary>
  32. /// 获取是否已连接。
  33. /// </summary>
  34. bool Connected
  35. {
  36. get;
  37. }
  38. /// <summary>
  39. /// 获取网络服务类型。
  40. /// </summary>
  41. ServiceType ServiceType
  42. {
  43. get;
  44. }
  45. /// <summary>
  46. /// 获取网络地址类型。
  47. /// </summary>
  48. AddressFamily AddressFamily
  49. {
  50. get;
  51. }
  52. /// <summary>
  53. /// 获取要发送的消息包数量。
  54. /// </summary>
  55. int SendPacketCount
  56. {
  57. get;
  58. }
  59. /// <summary>
  60. /// 获取累计发送的消息包数量。
  61. /// </summary>
  62. int SentPacketCount
  63. {
  64. get;
  65. }
  66. /// <summary>
  67. /// 获取已接收未处理的消息包数量。
  68. /// </summary>
  69. int ReceivePacketCount
  70. {
  71. get;
  72. }
  73. /// <summary>
  74. /// 获取累计已接收的消息包数量。
  75. /// </summary>
  76. int ReceivedPacketCount
  77. {
  78. get;
  79. }
  80. /// <summary>
  81. /// 获取或设置当收到消息包时是否重置心跳流逝时间。
  82. /// </summary>
  83. bool ResetHeartBeatElapseSecondsWhenReceivePacket
  84. {
  85. get;
  86. set;
  87. }
  88. /// <summary>
  89. /// 获取丢失心跳的次数。
  90. /// </summary>
  91. int MissHeartBeatCount
  92. {
  93. get;
  94. }
  95. /// <summary>
  96. /// 获取或设置心跳间隔时长,以秒为单位。
  97. /// </summary>
  98. float HeartBeatInterval
  99. {
  100. get;
  101. set;
  102. }
  103. /// <summary>
  104. /// 获取心跳等待时长,以秒为单位。
  105. /// </summary>
  106. float HeartBeatElapseSeconds
  107. {
  108. get;
  109. }
  110. /// <summary>
  111. /// 注册网络消息包处理函数。
  112. /// </summary>
  113. /// <param name="handler">要注册的网络消息包处理函数。</param>
  114. void RegisterHandler(IPacketHandler handler);
  115. /// <summary>
  116. /// 设置默认事件处理函数。
  117. /// </summary>
  118. /// <param name="handler">要设置的默认事件处理函数。</param>
  119. void SetDefaultHandler(EventHandler<Packet> handler);
  120. /// <summary>
  121. /// 连接到远程主机。
  122. /// </summary>
  123. /// <param name="ipAddress">远程主机的 IP 地址。</param>
  124. /// <param name="port">远程主机的端口号。</param>
  125. void Connect(IPAddress ipAddress, int port);
  126. /// <summary>
  127. /// 连接到远程主机。
  128. /// </summary>
  129. /// <param name="ipAddress">远程主机的 IP 地址。</param>
  130. /// <param name="port">远程主机的端口号。</param>
  131. /// <param name="userData">用户自定义数据。</param>
  132. void Connect(IPAddress ipAddress, int port, object userData);
  133. /// <summary>
  134. /// 关闭网络频道。
  135. /// </summary>
  136. void Close();
  137. /// <summary>
  138. /// 向远程主机发送消息包。
  139. /// </summary>
  140. /// <typeparam name="T">消息包类型。</typeparam>
  141. /// <param name="packet">要发送的消息包。</param>
  142. void Send<T>(T packet) where T : Packet;
  143. }
  144. }