encode.js 616 B

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. /**
  2. * Protocol version.
  3. */
  4. var version = 1;
  5. /**
  6. * Encode `msg` and `args`.
  7. *
  8. * @param {Array} args
  9. * @return {Buffer}
  10. * @api public
  11. */
  12. module.exports = function(args){
  13. var argc = args.length;
  14. var len = 1;
  15. var off = 0;
  16. // data length
  17. for (var i = 0; i < argc; i++) {
  18. len += 4 + args[i].length;
  19. }
  20. // buffer
  21. var buf = new Buffer(len);
  22. // pack meta
  23. buf[off++] = version << 4 | argc;
  24. // pack args
  25. for (var i = 0; i < argc; i++) {
  26. var arg = args[i];
  27. buf.writeUInt32BE(arg.length, off);
  28. off += 4;
  29. arg.copy(buf, off);
  30. off += arg.length;
  31. }
  32. return buf;
  33. };