FixPartReader.cs 1.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Linq;
  4. using System.Text;
  5. namespace SuperWebSocket.Protocol.FramePartReader
  6. {
  7. class FixPartReader : DataFramePartReader
  8. {
  9. public override int Process(int lastLength, WebSocketDataFrame frame, out IDataFramePartReader nextPartReader)
  10. {
  11. if (frame.Length < 2)
  12. {
  13. nextPartReader = this;
  14. return -1;
  15. }
  16. if (frame.PayloadLenght < 126)
  17. {
  18. if (frame.HasMask)
  19. nextPartReader = MaskKeyReader;
  20. else
  21. {
  22. if (frame.ActualPayloadLength == 0)
  23. {
  24. nextPartReader = null;
  25. return (int)((long)frame.Length - 2);
  26. }
  27. nextPartReader = PayloadDataReader;
  28. }
  29. }
  30. else
  31. {
  32. nextPartReader = ExtendedLenghtReader;
  33. }
  34. if (frame.Length > 2)
  35. return nextPartReader.Process(2, frame, out nextPartReader);
  36. return 0;
  37. }
  38. }
  39. }