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 Arraynew 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)