81 lines
2.1 KiB
C#
81 lines
2.1 KiB
C#
using System;
|
|
|
|
namespace NetWorkHelper.Helper
|
|
{
|
|
public class DataFrameHeader
|
|
{
|
|
private bool _fin;
|
|
private bool _rsv1;
|
|
private bool _rsv2;
|
|
private bool _rsv3;
|
|
private sbyte _opcode;
|
|
private bool _maskcode;
|
|
private sbyte _payloadlength;
|
|
|
|
public bool FIN { get { return _fin; } }
|
|
|
|
public bool RSV1 { get { return _rsv1; } }
|
|
|
|
public bool RSV2 { get { return _rsv2; } }
|
|
|
|
public bool RSV3 { get { return _rsv3; } }
|
|
|
|
public sbyte OpCode { get { return _opcode; } }
|
|
|
|
public bool HasMask { get { return _maskcode; } }
|
|
|
|
public sbyte Length { get { return _payloadlength; } }
|
|
|
|
public DataFrameHeader(byte[] buffer)
|
|
{
|
|
if (buffer.Length < 2)
|
|
throw new Exception("无效的数据头.");
|
|
|
|
//第一个字节
|
|
_fin = (buffer[0] & 0x80) == 0x80;
|
|
_rsv1 = (buffer[0] & 0x40) == 0x40;
|
|
_rsv2 = (buffer[0] & 0x20) == 0x20;
|
|
_rsv3 = (buffer[0] & 0x10) == 0x10;
|
|
_opcode = (sbyte)(buffer[0] & 0x0f);
|
|
|
|
//第二个字节
|
|
_maskcode = (buffer[1] & 0x80) == 0x80;
|
|
_payloadlength = (sbyte)(buffer[1] & 0x7f);
|
|
|
|
}
|
|
|
|
//发送封装数据
|
|
public DataFrameHeader(bool fin, bool rsv1, bool rsv2, bool rsv3, sbyte opcode, bool hasmask, int length)
|
|
{
|
|
_fin = fin;
|
|
_rsv1 = rsv1;
|
|
_rsv2 = rsv2;
|
|
_rsv3 = rsv3;
|
|
_opcode = opcode;
|
|
//第二个字节
|
|
_maskcode = hasmask;
|
|
_payloadlength = (sbyte)length;
|
|
}
|
|
|
|
//返回帧头字节
|
|
public byte[] GetBytes()
|
|
{
|
|
byte[] buffer = { 0, 0 };
|
|
|
|
if (_fin) buffer[0] ^= 0x80;
|
|
if (_rsv1) buffer[0] ^= 0x40;
|
|
if (_rsv2) buffer[0] ^= 0x20;
|
|
if (_rsv3) buffer[0] ^= 0x10;
|
|
|
|
buffer[0] ^= (byte)_opcode;
|
|
|
|
if (_maskcode) buffer[1] ^= 0x80;
|
|
|
|
buffer[1] ^= (byte)_payloadlength;
|
|
|
|
return buffer;
|
|
}
|
|
}
|
|
}
|
|
|