Utility.cs 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. using System.Buffers;
  2. using System.Runtime.CompilerServices;
  3. //[assembly: InternalsVisibleTo("UnitTestProject1")]
  4. namespace System.Net.Sockets.Kcp
  5. {
  6. public static class KcpExtension_FDF71D0BC31D49C48EEA8FAA51F017D4
  7. {
  8. private static readonly DateTime utc_time = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc);
  9. private static readonly DateTimeOffset utc1970 = new DateTimeOffset(1970, 1, 1, 0, 0, 0, TimeSpan.Zero);
  10. [Obsolete("", true)]
  11. [MethodImpl(MethodImplOptions.AggressiveInlining)]
  12. public static uint ConvertTime(this in DateTime time)
  13. {
  14. return (uint)(Convert.ToInt64(time.Subtract(utc_time).TotalMilliseconds) & 0xffffffff);
  15. }
  16. [MethodImpl(MethodImplOptions.AggressiveInlining)]
  17. public static uint ConvertTimeOld(this in DateTimeOffset time)
  18. {
  19. return (uint)(Convert.ToInt64(time.Subtract(utc1970).TotalMilliseconds) & 0xffffffff);
  20. }
  21. [MethodImpl(MethodImplOptions.AggressiveInlining)]
  22. public static uint ConvertTime2(this in DateTimeOffset time)
  23. {
  24. #if NETSTANDARD2_0_OR_GREATER || NET5_0_OR_GREATER
  25. return (uint)(time.ToUnixTimeMilliseconds() & 0xffffffff);
  26. #else
  27. return (uint)(Convert.ToInt64(time.Subtract(utc1970).TotalMilliseconds) & 0xffffffff);
  28. #endif
  29. }
  30. [MethodImpl(MethodImplOptions.AggressiveInlining)]
  31. public static uint ConvertTime(this in DateTimeOffset time)
  32. {
  33. #if NETSTANDARD2_0_OR_GREATER || NET5_0_OR_GREATER
  34. return (uint)(time.ToUnixTimeMilliseconds());
  35. #else
  36. return (uint)(Convert.ToInt64(time.Subtract(utc1970).TotalMilliseconds) & 0xffffffff);
  37. #endif
  38. }
  39. [MethodImpl(MethodImplOptions.AggressiveInlining)]
  40. public static string ToLogString<T>(this T segment, bool local = false)
  41. where T : IKcpSegment
  42. {
  43. if (local)
  44. {
  45. return
  46. $"sn:{segment.sn,2} una:{segment.una,2} frg:{segment.frg,2} cmd:{segment.cmd,2} len:{segment.len,2} wnd:{segment.wnd} [ LocalValue: xmit:{segment.xmit} fastack:{segment.fastack} rto:{segment.rto} ]";
  47. }
  48. else
  49. {
  50. return
  51. $"sn:{segment.sn,2} una:{segment.una,2} frg:{segment.frg,2} cmd:{segment.cmd,2} len:{segment.len,2} wnd:{segment.wnd}";
  52. }
  53. }
  54. [MethodImpl(MethodImplOptions.AggressiveInlining)]
  55. public static int Encode<T>(this T Seg, IBufferWriter<byte> writer)
  56. where T : IKcpSegment
  57. {
  58. var totalLength = (int)(KcpSegment.HeadOffset + Seg.len);
  59. var span = writer.GetSpan(totalLength);
  60. Seg.Encode(span);
  61. writer.Advance(totalLength);
  62. return totalLength;
  63. }
  64. }
  65. }