Using npm:
$ npm install cppmsg
To run the tests:
$ node test.js
You can use this module, parse binary data from the c + +, can also be generate binary data(from json object) that c/c++ can phrase. This module provides follow function:
- Encode json data to binary data
- Decode binary data to json
- support more data type: int8/16/32/64, uint8/16/32, float,double,bool,string
- support msg nested;
You can phrase C++ binary data sturct from network to json. Note: c/c++ data struct must one bit algin.
- new cppMsg.msg()create empty cppMsg;
- new cppMsg.msg( ds )ds is data struct define Array
- new cppMsg.msg( ds, data)ds is data struct define Array. data(optional) is init json data.
- new cppMsg.msg( ds, null, opts)ds is data struct define Array. data(optional) is init json data.- opts, {useIconv: true } ,useIconv boolean, maybe use iconv-lite convert code
 
- opts, {useIconv: true } ,useIconv 
- encodeMsg( data ) : json data object;
- encodeMsg2( data ) : json data object( use msg internal buffer, return internal buffer );
- encodeMsgToBuff (data, buff, offset?) : encode to buffer
- data, object;
- buff, target buffer;
- offset, data offset, default 0;
 
- offset, data offset, default 
 
- decodeMsg( buf, offset? )  : decode Buffer to json data object;
- offset, data offset, default 0;
 
- offset, data offset, default 
next methods using stream mode:
- push_uint8
- push_int8
- push_uint16
- push_int16
- push_uint32
- push_int32
- push_string
- push_char
- encode( data ) : data is json data stream.
Assume this for all examples below
C++ Code:
//C++ struct define Must one byte algin
struct head{
	int mainType;
    int subType;
};
struct msg{
	int reg;
    int chkCode;
    int iType;
    bool bMonitor;
    char workPath[10];
    unsigned int processID;
    struct head testObj;
    long long testin64;
	float floatArray3[3];
};Nodejs code:
	var cppMsg = require('./cppMsg.js');
	var msg_def = {
		msgHead:[
					['mainType','int32'],
					['subType', 'int32']
				]
	};
	var msg = new cppMsg.msg(
		[
			['reg','int32'],
			['chkCode','int32'],
			['iType','int32'],
			['bMonitor', 'bool'],
			['workPath','string',10],
			['processID','uint32'],
			['testObj','object', msg_def.msgHead], // nested other
			['testint64','int64'],
			['floatArray3', 'float', , , 3]
		],null, {useIconv: false}
		);
	var buff = msg.encodeMsg2( {
			reg     : 2,
			chkCode : 0,
			iType   : 2,
			bMonitor : false,
			workPath : 'no 你 work',
			processID : 1234,
			testObj  :{
				mainType : 0x01020304,
				subType  : 0x0A0B0C0D
			},
			testint64 : 0xCDEF,
			floatArray3: [1.1, 2.2, 9.7]
		}  );
	console.log( buff );
	var data = msg.decodeMsg( buff );
	console.log( data );	msg.push_int32(2);  // reg
	msg.push_int32(0);  // chkCode
	msg.push_int32(2);  // iType
	msg.push_uint8(0);  // bMonitor
	msg.push_string('no worker path',10);
	msg.push_string('no worker path',20);
	msg.push_string('brnn-20',20);
	msg.push_uint32( 1234 ); // processID
	console.log( msg.encode());- Fixed encodeMsg2 using internal cache causing string dirty;
- optimize performance encodeMsg;
- add decodeMsgFromBuff
- add method encodeMsg2, Improve performance 1x
- optimize performance encodeMsg
- optimize performance decodeMsg, Improve performance 1x
- change msg construct add params opts- opts, {useIconv: true }- useIconv, boolean, true(default): use iconv-lite convert code.( false, Improve performance)
 
- useIconv, 
 
- opts, 
- Default string code,change to utf8
- Using ES6 syntax
- optimize performance encodeMsg
- fix int64 decode/encode error( Works only for numbers <= Number.MAX_SAFE_INTEGER ).
- fix object decode error.
- merge darnold79 change,add array support.
- string type add encode support(using iconv-lite).
- init.
The MIT License (MIT)
Copyright (c) 2017 Shudingbo Copyright (c) 2017 darnold79 (node-cppMsg-dynamic)