/// <summary> /// 根据具体内容初始化 /// </summary> /// <param name="packageId">packageId</param> /// <param name="ChannelName">ChannelName</param> /// <param name="ChannelData">ChannelData</param> public PackagePlugin(byte packageId, string ChannelName, byte[] ChannelData, bool is112) { //成员 this.ChannelName = ChannelName; this.ChannelData = ChannelData; byte[] channelDataLengthBytes = BitConverter.GetBytes((Int16)ChannelData.Length).Reverse(); //Data List <byte> data = new List <byte>(); data.AddRange(ProtoBufUtil.GetVarStringBytes(ChannelName)); if (!is112) { data.AddRange(channelDataLengthBytes); } data.AddRange(ChannelData); //OriginData List <byte> originData = new List <byte>(); List <byte> packageIdAndData = new List <byte>(); packageIdAndData.Add(packageId); packageIdAndData.AddRange(data); if (is112) { // 如果大于阈值 , 就压缩 if (packageIdAndData.Count > Global.CompressionThreshold) { byte[] compressData = ZLibUtil.Compress(packageIdAndData.ToArray()); byte[] compressDataLengthBytes = ProtoBufUtil.GetVarIntBytes(packageIdAndData.Count); byte[] lengthBytes = ProtoBufUtil.GetVarIntBytes(compressDataLengthBytes.Length + compressData.Length); originData.AddRange(lengthBytes); originData.AddRange(compressDataLengthBytes); originData.AddRange(compressData); } else { byte[] lengthBytes = ProtoBufUtil.GetVarIntBytes(packageIdAndData.Count + 1); originData.AddRange(lengthBytes); originData.Add(0); originData.AddRange(packageIdAndData); } } else { byte[] lengthBytes = ProtoBufUtil.GetVarIntBytes(packageIdAndData.Count); originData.AddRange(lengthBytes); originData.AddRange(packageIdAndData); } //父类成员 this.PackageId = packageId; this.Data = data.ToArray(); this.OriginData = originData.ToArray(); }
public static Package Create(byte packageId, byte[] data, bool is112) { Package package = new Package(); package.PackageId = packageId; package.Data = data; List <byte> packageIdAndData = new List <byte>(); List <byte> originData = new List <byte>(); packageIdAndData.Add(packageId); packageIdAndData.AddRange(data); if (is112) { // 如果大于阈值 , 就压缩 if (packageIdAndData.Count > Global.CompressionThreshold) { byte[] compressData = ZLibUtil.Compress(packageIdAndData.ToArray()); byte[] compressDataLengthBytes = ProtoBufUtil.GetVarIntBytes(packageIdAndData.Count); byte[] lengthBytes = ProtoBufUtil.GetVarIntBytes(compressDataLengthBytes.Length + compressData.Length); originData.AddRange(lengthBytes); originData.AddRange(compressDataLengthBytes); originData.AddRange(compressData); } else { byte[] lengthBytes = ProtoBufUtil.GetVarIntBytes(packageIdAndData.Count + 1); originData.AddRange(lengthBytes); originData.Add(0); originData.AddRange(packageIdAndData); } } else { byte[] lengthBytes = ProtoBufUtil.GetVarIntBytes(packageIdAndData.Count); originData.AddRange(lengthBytes); originData.AddRange(packageIdAndData); } package.OriginData = originData.ToArray(); return(package); }
private void onMessage(byte[] message) { MessageReader reader = new MessageReader(message); MessageReader.StreamReader stream = reader.Reader; switch (reader.MessageID) { case 0x11017: // Msg_NetCtrl_Nodebase_Name _serverName = stream.ReadString(); break; case 0x11013: // Msg_NetCtrl_User_Params { string user = stream.ReadString(); bool valid = stream.ReadInt32() != 0; if (valid) { if (!Ready) { _userStage = stream.ReadInt32(); _userRights = stream.ReadInt32(); _serverID = stream.ReadUInt64(); int len = stream.ReadInt32(); _userAuth = new ulong[len]; for (int i = 0; i < len; i++) { _userAuth[i] = stream.ReadUInt64(); } Ready = true; fireOnAuthentication(true); sendGetRealtimeMessage(); } } else { Ready = false; cancelLoginChecker(); fireOnAuthentication(false); _connection.Reconnect(); } } break; case 0x11015: // Msg_NetCtrl_ID _netctrlID = stream.ReadInt32(); break; case 0x10030: // Msg_Tree_Info break; case 0x10032: // Msg_Xml_Tree { bool up = stream.ReadInt32() != 0; int size = stream.ReadInt32(); int uncompSize = stream.ReadInt32(); byte[] compressed = stream.ReadBytes(size - sizeof(Int32)); byte[] uncompressed = ZLibUtil.Uncompress(compressed, uncompSize); string xml = Encoding.Default.GetString(uncompressed); if (xml.Last() == 0) { xml = xml.Substring(0, xml.Length - 1); } VideoParser.Node tree = null; if (xml != _lastBaseXml && VideoParser.TryParseNode(xml, out tree)) { fireOnNodeTree(tree, xml); _lastBaseXml = xml; updateTree(tree); } } break; case 0x11021: // Msg_Video_Port { ulong videoID = stream.ReadUInt64(); int oldPort = stream.ReadInt32(); int bandwidth = stream.ReadInt32(); int port = stream.ReadInt32(); fireOnVideoPort(videoID, port, bandwidth); } break; case 0x11022: // Msg_Video_Miss { ulong videoID = stream.ReadUInt64(); fireOnVideoMiss(videoID); } break; case 0x100B1: //Msg_Realtime_Info { string xml = stream.ReadString(); VideoParser.Camera camera = null; VideoParser.GPS gps = null; if (VideoParser.TryParseRealtime(xml, out camera) || VideoParser.TryParseRealtime(xml, out gps)) { fireOnRealtimeInfo(camera, gps); } } break; case 0x11028: // Msg_Video_Ctrl { ulong videoId = stream.ReadUInt64(); int msgId = stream.ReadInt32(); onFeedbackMessage(videoId, msgId, reader); } break; } }