KcpTrace.cs 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980
  1. using Fort23.UTool;
  2. namespace System.Net.Sockets.Kcp
  3. {
  4. public partial class KcpCore<Segment>
  5. {
  6. public KcpLogMask LogMask { get; set; } = KcpLogMask.IKCP_LOG_PARSE_DATA | KcpLogMask.IKCP_LOG_NEED_SEND |
  7. KcpLogMask.IKCP_LOG_DEAD_LINK;
  8. public virtual bool CanLog(KcpLogMask mask)
  9. {
  10. // return true;
  11. if ((mask & LogMask) == 0)
  12. {
  13. return false;
  14. }
  15. #if NETSTANDARD2_0_OR_GREATER || NET5_0_OR_GREATER
  16. if (TraceListener != null)
  17. {
  18. return true;
  19. }
  20. #endif
  21. return false;
  22. }
  23. #if NETSTANDARD2_0_OR_GREATER || NET5_0_OR_GREATER
  24. public System.Diagnostics.TraceListener TraceListener { get; set; }
  25. #endif
  26. public virtual void LogFail(string message)
  27. {
  28. LogTool.Log(message);
  29. #if NETSTANDARD2_0_OR_GREATER || NET5_0_OR_GREATER
  30. TraceListener?.Fail(message);
  31. #endif
  32. }
  33. public virtual void LogWriteLine(string message, string category)
  34. {
  35. LogTool.Error(message);
  36. #if NETSTANDARD2_0_OR_GREATER || NET5_0_OR_GREATER
  37. TraceListener?.WriteLine(message, category);
  38. #endif
  39. }
  40. [Obsolete("一定要先判断CanLog 内部判断是否存在TraceListener,避免在没有TraceListener时生成字符串", true)]
  41. public virtual void LogWriteLine(string message, KcpLogMask mask)
  42. {
  43. LogTool.Error(message);
  44. #if NETSTANDARD2_0_OR_GREATER || NET5_0_OR_GREATER
  45. if (CanLog(mask))
  46. {
  47. LogWriteLine(message, mask.ToString());
  48. }
  49. #endif
  50. }
  51. }
  52. [Flags]
  53. public enum KcpLogMask
  54. {
  55. IKCP_LOG_OUTPUT = 1 << 0,
  56. IKCP_LOG_INPUT = 1 << 1,
  57. IKCP_LOG_SEND = 1 << 2,
  58. IKCP_LOG_RECV = 1 << 3,
  59. IKCP_LOG_IN_DATA = 1 << 4,
  60. IKCP_LOG_IN_ACK = 1 << 5,
  61. IKCP_LOG_IN_PROBE = 1 << 6,
  62. IKCP_LOG_IN_WINS = 1 << 7,
  63. IKCP_LOG_OUT_DATA = 1 << 8,
  64. IKCP_LOG_OUT_ACK = 1 << 9,
  65. IKCP_LOG_OUT_PROBE = 1 << 10,
  66. IKCP_LOG_OUT_WINS = 1 << 11,
  67. IKCP_LOG_PARSE_DATA = 1 << 12,
  68. IKCP_LOG_NEED_SEND = 1 << 13,
  69. IKCP_LOG_DEAD_LINK = 1 << 14,
  70. }
  71. }