StateObject.cs 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. using System;
  2. using System.IO;
  3. using System.Net.Sockets;
  4. class StateObject
  5. {
  6. public uint CmdId = 0;
  7. public uint BuffLength = 0;
  8. public uint BodyLength = 0;
  9. public byte[] buffer = new byte[Connector.RECV_BUFF_SIZE];
  10. public MemoryStream stream;
  11. public MemoryStream swapStream = null;
  12. //是否收到包体
  13. public bool ReceiveBody = false;
  14. public long StreamLength
  15. {
  16. get { return stream.Length; }
  17. }
  18. public long StreamPosition
  19. {
  20. set
  21. {
  22. stream.Position = value;
  23. }
  24. get
  25. {
  26. return stream.Position;
  27. }
  28. }
  29. public StateObject()
  30. {
  31. stream = new MemoryStream();
  32. swapStream = new MemoryStream();
  33. }
  34. public void Write(byte[] buffer, int len)
  35. {
  36. stream.Seek(0, SeekOrigin.End);
  37. stream.Write(buffer, 0, len);
  38. stream.Seek(0, SeekOrigin.Begin);
  39. }
  40. public void Read(byte[] bytes, int offset, int count)
  41. {
  42. stream.Read(bytes, offset, count);
  43. }
  44. public void Reset()
  45. {
  46. int remain_len = (int)(stream.Length - stream.Position);
  47. swapStream.Position = 0;
  48. swapStream.SetLength(0);
  49. if (remain_len != 0)
  50. {
  51. swapStream.Write(stream.GetBuffer(), (int)stream.Position, remain_len);
  52. swapStream.Flush();
  53. swapStream.Seek(0, SeekOrigin.Begin);
  54. }
  55. stream.Position = 0;
  56. stream.SetLength(0);
  57. swapStream.WriteTo(stream);
  58. stream.Flush();
  59. stream.Seek(0, SeekOrigin.Begin);
  60. CmdId = 0;
  61. BodyLength = 0;
  62. BuffLength = 0;
  63. ReceiveBody = false;
  64. }
  65. public void Dispose()
  66. {
  67. stream.Dispose();
  68. stream = null;
  69. swapStream.Dispose();
  70. swapStream = null;
  71. CmdId = 0;
  72. BodyLength = 0;
  73. BuffLength = 0;
  74. ReceiveBody = false;
  75. }
  76. }