DataFrameHeader.cs 2.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081
  1. using System;
  2. using System.Collections.Generic;
  3. using System.Text;
  4. namespace WebSocketServer
  5. {
  6. public class DataFrameHeader
  7. {
  8. private bool _fin;
  9. private bool _rsv1;
  10. private bool _rsv2;
  11. private bool _rsv3;
  12. private sbyte _opcode;
  13. private bool _maskcode;
  14. private sbyte _payloadlength;
  15. public bool FIN { get { return _fin; } }
  16. public bool RSV1 { get { return _rsv1; } }
  17. public bool RSV2 { get { return _rsv2; } }
  18. public bool RSV3 { get { return _rsv3; } }
  19. public sbyte OpCode { get { return _opcode; } }
  20. public bool HasMask { get { return _maskcode; } }
  21. public sbyte Length { get { return _payloadlength; } }
  22. public DataFrameHeader(byte[] buffer)
  23. {
  24. if(buffer.Length<2)
  25. throw new Exception("无效的数据头.");
  26. //第一个字节
  27. _fin = (buffer[0] & 0x80) == 0x80;
  28. _rsv1 = (buffer[0] & 0x40) == 0x40;
  29. _rsv2 = (buffer[0] & 0x20) == 0x20;
  30. _rsv3 = (buffer[0] & 0x10) == 0x10;
  31. _opcode = (sbyte)(buffer[0] & 0x0f);
  32. //第二个字节
  33. _maskcode = (buffer[1] & 0x80) == 0x80;
  34. _payloadlength = (sbyte)(buffer[1] & 0x7f);
  35. }
  36. //发送封装数据
  37. public DataFrameHeader(bool fin,bool rsv1,bool rsv2,bool rsv3,sbyte opcode,bool hasmask,int length)
  38. {
  39. _fin = fin;
  40. _rsv1 = rsv1;
  41. _rsv2 = rsv2;
  42. _rsv3 = rsv3;
  43. _opcode = opcode;
  44. //第二个字节
  45. _maskcode = hasmask;
  46. _payloadlength = (sbyte)length;
  47. }
  48. //返回帧头字节
  49. public byte[] GetBytes()
  50. {
  51. byte[] buffer = new byte[2]{0,0};
  52. if (_fin) buffer[0] ^= 0x80;
  53. if (_rsv1) buffer[0] ^= 0x40;
  54. if (_rsv2) buffer[0] ^= 0x20;
  55. if (_rsv3) buffer[0] ^= 0x10;
  56. buffer[0] ^= (byte)_opcode;
  57. if (_maskcode) buffer[1] ^= 0x80;
  58. buffer[1] ^= (byte)_payloadlength;
  59. return buffer;
  60. }
  61. }
  62. }