PageRenderTime 20ms CodeModel.GetById 14ms RepoModel.GetById 0ms app.codeStats 0ms

/js/lib/Socket.IO-node/lib/socket.io/utils.js

http://github.com/onedayitwillmake/RealtimeMultiplayerNodeJs
JavaScript | 105 lines | 42 code | 18 blank | 45 comment | 10 complexity | 5aa8f2909ab7aa1b7908ed6a83cb349b MD5 | raw file
Possible License(s): GPL-2.0, LGPL-2.1, MPL-2.0-no-copyleft-exception, BSD-3-Clause
  1. /*!
  2. * Socket.IO - utils
  3. * Copyright (c) 2010-2011 Guillermo Rauch <guillermo@learnboost.com>
  4. * MIT Licensed
  5. */
  6. /**
  7. * Object#toString.
  8. */
  9. var toString = Object.prototype.toString
  10. /**
  11. * Frame marker.
  12. */
  13. var marker = '~m~'
  14. , markerLength = marker.length;
  15. /**
  16. * Merge `src` into `dest`.
  17. *
  18. * @param {Object} dest
  19. * @param {Object} src
  20. * @return {Object} dest
  21. * @api private
  22. */
  23. exports.merge = function(dest, src){
  24. for (var k in src) dest[k] = src[k];
  25. return dest;
  26. };
  27. /**
  28. * Stringify the given `message`. when an object
  29. * is given it will be converted to JSON.
  30. *
  31. * @param {String|Object} message
  32. * @return {String}
  33. * @api private
  34. */
  35. function stringify(message){
  36. if ('[object Object]' == toString.call(message)){
  37. return '~j~' + JSON.stringify(message);
  38. } else {
  39. return String(message);
  40. }
  41. };
  42. /**
  43. * Encode the given `messages`, framed as
  44. *
  45. * <marker> <len> <marker> <data>
  46. *
  47. * @param {String|Array} messages
  48. * @return {String}
  49. * @api private
  50. */
  51. exports.encode = function(messages){
  52. var messages = Array.isArray(messages) ? messages : [messages]
  53. , len = messages.length
  54. , ret = ''
  55. , message;
  56. for (var i = 0; i < len; ++i){
  57. message = null == messages[i] ? '' : stringify(messages[i]);
  58. ret += marker + message.length + marker + message;
  59. }
  60. return ret;
  61. };
  62. /**
  63. * Decode `data`.
  64. *
  65. * @param {String} data
  66. * @return {Array}
  67. * @api private
  68. */
  69. exports.decode = function(data){
  70. var messages = []
  71. , len = data.length
  72. , bytes;
  73. for (var i = 0; i < len; ++i) {
  74. // <marker<> <len> <marker>
  75. if (i == data.indexOf(marker, i)) {
  76. i += markerLength;
  77. bytes = data.substring(i, data.indexOf(marker, i));
  78. i += bytes.length + markerLength;
  79. if (isNaN(bytes)) continue;
  80. // <data>
  81. bytes = parseInt(bytes, 10);
  82. messages.push(data.substr(i, bytes))
  83. i += bytes - 1;
  84. }
  85. }
  86. return messages;
  87. };