public static void Test01() { // account data Account account = new Account() { name = "user1", age = 18, languages = new string[] { "en-US", "en-UK" }, serial = 0x123456781234567 }; // account schema definition var AccountSchema = @"{ type: 'object', properties: { name: {type: 'string'}, age: {type: 'uint8'}, languages: { type: 'array', items: {type: 'string'}, }, serial: {type: 'uint64le'}, }, order: ['name', 'age', 'languages', 'serial'], }"; // create Account schema BufferPlus.CreateSchema("Account", AccountSchema); // create a BufferPlus instance var bp = new BufferPlus(); // write account data with Account schema bp.WriteSchema("Account", account); // move to buffer beginning bp.MoveTo(0); // read account from buffer var decodedAccount = bp.ReadSchema("Account", new Account()); // print out buffer context BufferPlus.PrettyPrintHex(bp, "ReadSchema", decodedAccount); }
public static void Test04() { var getMd5Hash = new Func <dynamic, string>((value) => { var bytes = Encoding.UTF8.GetBytes(Convert.ToString(value)); var cryptoMD5 = System.Security.Cryptography.MD5.Create(); var hash = BitConverter.ToString(cryptoMD5.ComputeHash(bytes)) .Replace("-", String.Empty); return(hash); }); BufferPlus.AddCustomType("HashString", // Read("HashString") method (buffer) => { // read byte length of MD5 checksum from buffer var hashLen = buffer.ReadUInt32LE(); // read byte length of value from buffer var valueLen = buffer.ReadUInt32LE(); // read MD5 checksum from buffer var hash = buffer.ReadString((int)hashLen); // return a object contains MD5 checksum and value var value = buffer.ReadString((int)valueLen); // return a object contains MD5 checksum and value return(new { value = value, hash = hash }); }, // Write(value, "HashString") method (buffer, value) => { // calculate value's MD5 checksum var hash = getMd5Hash(value); // write byte length of MD5 checksum to buffer buffer.WriteUInt32LE(hash.Length); // write byte length of value to buffer buffer.WriteUInt32LE(Convert.ToString(value).Length); // write MD5 checksum to buffer buffer.WriteString(hash); // write value to buffer buffer.WriteString(Convert.ToString(value)); }, // ByteLength(value, "HashString") method (buffer, value) => { if (value is string) { var hash = getMd5Hash(value); return(8 + BufferPlus.ByteLength(value, TypeString.String) + BufferPlus.ByteLength(hash, TypeString.String)); } dynamic obj = value; return(8 + BufferPlus.ByteLength(obj.value, TypeString.String) + BufferPlus.ByteLength(obj.hash, TypeString.String)); } ); var bp = new BufferPlus(16); var str = "test hash string"; // write string into buffer with pre-defined 'HashString' custom. type. // it gets string's MD5 checksum and write MD5 checksum // and string into buffer bp.Write(str, "HashString"); // seek to beginning bp.MoveTo(0); // read buffer with with pre-defined 'HashString' custom. type. // it reads MD5 checksum and string from buffer and // returns a object contains 'hash' and 'value' properties. var hashObj = bp.Read("HashString"); BufferPlus.PrettyPrintHex(bp, "ReadHashString", (hashObj)); }