public void Processor(IExtData extData) { extData.Data.Add(nameof(JT808_0x0200_DT1_0x82.Gender1), jT808_0X0200_DT1_0X82.Gender1); }
public void Processor(IExtData extData) { extData.Data.Add(nameof(JT808_0x0200_DT1_0x81.Age), jT808_0X0200_DT1_0X81.Age); extData.Data.Add(nameof(JT808_0x0200_DT1_0x81.UserName), jT808_0X0200_DT1_0X81.UserName); extData.Data.Add(nameof(JT808_0x0200_DT1_0x81.Gender), jT808_0X0200_DT1_0X81.Gender); }
public static void SetExtData(this IExtData extData, string key, object value) { extData.GetExtData()[key] = JToken.FromObject(value); }
public static void RemoveExtData(this IExtData extData, string key) { extData.GetExtData().Remove(key); }
public static object GetExtData(this IExtData extData, string key, object ifNotFound = null) { return(extData.GetExtData().ContainsKey(key) ? extData.GetExtData()[key] : ifNotFound); }
public static bool ContainsExtData(this IExtData extData, string key) { return(extData.GetExtData().ContainsKey(key)); }
public static IEnumerable <string> GetExtDataKeys(this IExtData extData) { return(extData.GetExtData().Keys); }
public static int GetExtDataCount(this IExtData extData) { return(extData.GetExtData().Count); }
public void Deserialize(System.IO.Stream ms) { //参考源码来自 // https://github.com/neo-project/neo // Transaction.cs // 源码采用c#序列化技术 //参考源码2 // https://github.com/AntSharesSDK/antshares-ts // Transaction.ts // 采用typescript开发 this.type = (TransactionType)ms.ReadByte(); //读一个字节,交易类型 this.version = (byte)ms.ReadByte(); if (this.type == TransactionType.ContractTransaction) //每个交易类型有一些自己独特的处理 { //ContractTransaction 就是最常见的合约交易, //他没有自己的独特处理 extdata = null; } else if (this.type == TransactionType.InvocationTransaction) { extdata = new InvokeTransData(); } else { throw new Exception("未编写针对这个交易类型的代码"); } if (extdata != null) { extdata.Deserialize(this, ms); } //attributes var countAttributes = readVarInt(ms); this.attributes = new Attribute[countAttributes]; Console.WriteLine("countAttributes:" + countAttributes); for (UInt64 i = 0; i < countAttributes; i++) { //读取attributes byte[] attributeData; var Usage = (TransactionAttributeUsage)ms.ReadByte(); if (Usage == TransactionAttributeUsage.ContractHash || Usage == TransactionAttributeUsage.Vote || (Usage >= TransactionAttributeUsage.Hash1 && Usage <= TransactionAttributeUsage.Hash15)) { attributeData = new byte[32]; ms.Read(attributeData, 0, 32); } else if (Usage == TransactionAttributeUsage.ECDH02 || Usage == TransactionAttributeUsage.ECDH03) { attributeData = new byte[33]; attributeData[0] = (byte)Usage; ms.Read(attributeData, 1, 32); } else if (Usage == TransactionAttributeUsage.Script) { attributeData = new byte[20]; ms.Read(attributeData, 0, 20); } else if (Usage == TransactionAttributeUsage.DescriptionUrl) { var len = (byte)ms.ReadByte(); attributeData = new byte[len]; ms.Read(attributeData, 0, len); } else if (Usage == TransactionAttributeUsage.Description || Usage >= TransactionAttributeUsage.Remark) { var len = (int)readVarInt(ms, 65535); attributeData = new byte[len]; ms.Read(attributeData, 0, len); } else { throw new FormatException(); } } //inputs 输入表示基于哪些交易 var countInputs = readVarInt(ms); Console.WriteLine("countInputs:" + countInputs); this.inputs = new TransactionInput[countInputs]; for (UInt64 i = 0; i < countInputs; i++) { this.inputs[i] = new TransactionInput(); this.inputs[i].hash = new byte[32]; byte[] buf = new byte[2]; ms.Read(this.inputs[i].hash, 0, 32); ms.Read(buf, 0, 2); UInt16 index = (UInt16)(buf[1] * 256 + buf[0]); this.inputs[i].index = index; } //outputes 输出表示最后有哪几个地址得到多少钱,肯定有一个是自己的地址,因为每笔交易都会把之前交易的余额清空,刨除自己,就是要转给谁多少钱 //这个机制叫做UTXO var countOutputs = readVarInt(ms); Console.WriteLine("countOutputs:" + countOutputs); this.outputs = new TransactionOutput[countOutputs]; for (UInt64 i = 0; i < countOutputs; i++) { this.outputs[i] = new TransactionOutput(); TransactionOutput outp = this.outputs[i]; //资产种类 var assetid = new byte[32]; ms.Read(assetid, 0, 32); byte[] buf = new byte[8]; ms.Read(buf, 0, 8); var value = Fixed8.FromBytes(buf, 0); //资产数量 var scripthash = new byte[20]; ms.Read(scripthash, 0, 20); outp.assetId = assetid; outp.value = value; outp.toAddress = scripthash; this.outputs[i] = outp; } }