예제 #1
0
        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);
        }
예제 #2
0
        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));
        }