private static void Static_PacketResponseDataStream(NetworkStream writer, WebMessageData data) { if (writer == null) { throw new ArgumentNullException(nameof(writer)); } #if ADDMSGID //消息组包协议(我们规定消息总长度是消息编号1位+数组长度) var dataLen = data.Data.Length + 1; #else var dataLen = data.Data.Length; #endif if (dataLen == 0) { return; } byte b = 0x80; b = (byte)(b | ((byte)data.OpCode & 0xF)); //写入opcode writer.WriteByte(b); if (dataLen <= 125) { writer.WriteByte((byte)(dataLen & 0x7F)); } else if (dataLen < ushort.MaxValue) { writer.WriteByte(126 & 0x7F); BigEndianPrimitiveTypeSerializer.Instance.WriteValue(writer, (ushort)dataLen); } else { writer.WriteByte(127 & 0x7F); BigEndianPrimitiveTypeSerializer.Instance.WriteValue(writer, (uint)dataLen); } #if ADDMSGID //写入消息编号 writer.WriteByte(data.MessageId); //写入消息数据 writer.Write(data.Data, 0, dataLen - 1); #else //写入消息数据 writer.Write(data.Data, 0, dataLen); #endif }
static byte[] Static_PacketResponseData(WebMessageData data) { //消息组包协议 var dataLen = data.Data.Length; switch (data.OpCode) { case WebSocketOpcode.Text: case WebSocketOpcode.Binary: if (dataLen == 0) { return(new byte[0]); } break; } using (var stream = new NetworkStream()) { Static_PacketResponseDataStream(stream, data); return(stream.ToArray()); } }
public void SendData(WebMessageData msg) { var send_data = PacketResponseData(msg); this.webSocketSession?.SendDataToClient(send_data); }
protected override byte[] PacketResponseData(WebMessageData data) { return(Static_PacketResponseData(data)); }
protected virtual byte[] PacketResponseData(WebMessageData webMessageData) { return(new byte[0]); }