@bigtyphoon/melo 1.7.6

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (296) hide show
  1. package/LICENSE +22 -0
  2. package/README.md +55 -0
  3. package/bin/commadtest.ts +10 -0
  4. package/bin/commands/add.ts +43 -0
  5. package/bin/commands/init.ts +292 -0
  6. package/bin/commands/kill.ts +21 -0
  7. package/bin/commands/list.ts +60 -0
  8. package/bin/commands/masterha.ts +40 -0
  9. package/bin/commands/restart.ts +48 -0
  10. package/bin/commands/start.ts +65 -0
  11. package/bin/commands/stop.ts +26 -0
  12. package/bin/melo.ts +30 -0
  13. package/bin/utils/constants.ts +27 -0
  14. package/bin/utils/utils.ts +130 -0
  15. package/dist/bin/commadtest.js +9 -0
  16. package/dist/bin/commands/add.js +40 -0
  17. package/dist/bin/commands/init.js +279 -0
  18. package/dist/bin/commands/kill.js +21 -0
  19. package/dist/bin/commands/list.js +65 -0
  20. package/dist/bin/commands/masterha.js +36 -0
  21. package/dist/bin/commands/restart.js +45 -0
  22. package/dist/bin/commands/start.js +58 -0
  23. package/dist/bin/commands/stop.js +20 -0
  24. package/dist/bin/melo.js +26 -0
  25. package/dist/bin/utils/constants.js +28 -0
  26. package/dist/bin/utils/utils.js +134 -0
  27. package/dist/lib/application.js +888 -0
  28. package/dist/lib/common/manager/appManager.js +112 -0
  29. package/dist/lib/common/manager/taskManager.js +39 -0
  30. package/dist/lib/common/remote/backend/msgRemote.js +63 -0
  31. package/dist/lib/common/remote/frontend/channelRemote.js +78 -0
  32. package/dist/lib/common/remote/frontend/sessionRemote.js +76 -0
  33. package/dist/lib/common/service/backendSessionService.js +337 -0
  34. package/dist/lib/common/service/channelService.js +514 -0
  35. package/dist/lib/common/service/connectionService.js +95 -0
  36. package/dist/lib/common/service/filterService.js +112 -0
  37. package/dist/lib/common/service/handlerService.js +187 -0
  38. package/dist/lib/common/service/sessionService.js +610 -0
  39. package/dist/lib/components/backendSession.js +14 -0
  40. package/dist/lib/components/channel.js +13 -0
  41. package/dist/lib/components/connection.js +12 -0
  42. package/dist/lib/components/connector.js +437 -0
  43. package/dist/lib/components/dictionary.js +93 -0
  44. package/dist/lib/components/master.js +39 -0
  45. package/dist/lib/components/monitor.js +25 -0
  46. package/dist/lib/components/protobuf.js +156 -0
  47. package/dist/lib/components/proxy.js +236 -0
  48. package/dist/lib/components/pushScheduler.js +62 -0
  49. package/dist/lib/components/remote.js +127 -0
  50. package/dist/lib/components/server.js +63 -0
  51. package/dist/lib/components/session.js +20 -0
  52. package/dist/lib/connectors/commands/handshake.js +119 -0
  53. package/dist/lib/connectors/commands/heartbeat.js +67 -0
  54. package/dist/lib/connectors/commands/kick.js +15 -0
  55. package/dist/lib/connectors/common/coder.js +90 -0
  56. package/dist/lib/connectors/common/handler.js +57 -0
  57. package/dist/lib/connectors/hybrid/IHybridSocket.js +3 -0
  58. package/dist/lib/connectors/hybrid/switcher.js +100 -0
  59. package/dist/lib/connectors/hybrid/tcpprocessor.js +40 -0
  60. package/dist/lib/connectors/hybrid/tcpsocket.js +171 -0
  61. package/dist/lib/connectors/hybrid/wsprocessor.js +49 -0
  62. package/dist/lib/connectors/hybridconnector.js +89 -0
  63. package/dist/lib/connectors/hybridsocket.js +139 -0
  64. package/dist/lib/connectors/mqtt/generate.js +113 -0
  65. package/dist/lib/connectors/mqtt/mqttadaptor.js +81 -0
  66. package/dist/lib/connectors/mqtt/protocol.js +48 -0
  67. package/dist/lib/connectors/mqttconnector.js +107 -0
  68. package/dist/lib/connectors/mqttsocket.js +59 -0
  69. package/dist/lib/connectors/sioconnector.js +135 -0
  70. package/dist/lib/connectors/siosocket.js +69 -0
  71. package/dist/lib/connectors/udpconnector.js +76 -0
  72. package/dist/lib/connectors/udpsocket.js +93 -0
  73. package/dist/lib/filters/handler/serial.js +44 -0
  74. package/dist/lib/filters/handler/time.js +32 -0
  75. package/dist/lib/filters/handler/timeout.js +45 -0
  76. package/dist/lib/filters/handler/toobusy.js +36 -0
  77. package/dist/lib/filters/rpc/rpcLog.js +43 -0
  78. package/dist/lib/filters/rpc/toobusy.js +41 -0
  79. package/dist/lib/index.js +81 -0
  80. package/dist/lib/interfaces/IComponent.js +3 -0
  81. package/dist/lib/interfaces/IConnector.js +3 -0
  82. package/dist/lib/interfaces/IHandlerFilter.js +3 -0
  83. package/dist/lib/interfaces/ILifeCycle.js +3 -0
  84. package/dist/lib/interfaces/IPlugin.js +3 -0
  85. package/dist/lib/interfaces/IPushScheduler.js +3 -0
  86. package/dist/lib/interfaces/ISocket.js +3 -0
  87. package/dist/lib/interfaces/IStore.js +3 -0
  88. package/dist/lib/interfaces/define.js +3 -0
  89. package/dist/lib/master/master.js +129 -0
  90. package/dist/lib/master/starter.js +236 -0
  91. package/dist/lib/master/watchdog.js +120 -0
  92. package/dist/lib/melo.js +125 -0
  93. package/dist/lib/modules/console.js +436 -0
  94. package/dist/lib/modules/masterwatcher.js +98 -0
  95. package/dist/lib/modules/monitorwatcher.js +124 -0
  96. package/dist/lib/modules/onlineUser.js +69 -0
  97. package/dist/lib/modules/restartNotifyModule.js +107 -0
  98. package/dist/lib/modules/watchServer.js +737 -0
  99. package/dist/lib/monitor/monitor.js +80 -0
  100. package/dist/lib/pushSchedulers/buffer.js +96 -0
  101. package/dist/lib/pushSchedulers/direct.js +58 -0
  102. package/dist/lib/pushSchedulers/multi.js +80 -0
  103. package/dist/lib/server/server.js +500 -0
  104. package/dist/lib/util/appUtil.js +306 -0
  105. package/dist/lib/util/constants.js +117 -0
  106. package/dist/lib/util/countDownLatch.js +51 -0
  107. package/dist/lib/util/events.js +20 -0
  108. package/dist/lib/util/handlerHelper.js +8 -0
  109. package/dist/lib/util/log.js +14 -0
  110. package/dist/lib/util/moduleUtil.js +101 -0
  111. package/dist/lib/util/pathUtil.js +134 -0
  112. package/dist/lib/util/remoterHelper.js +8 -0
  113. package/dist/lib/util/utils.js +358 -0
  114. package/dist/test/application.js +522 -0
  115. package/dist/test/config/log4js.json +28 -0
  116. package/dist/test/config/master.json +9 -0
  117. package/dist/test/config/servers.json +6 -0
  118. package/dist/test/filters/handler/serial.js +41 -0
  119. package/dist/test/filters/handler/time.js +41 -0
  120. package/dist/test/filters/handler/timeout.js +41 -0
  121. package/dist/test/filters/handler/toobusy.js +57 -0
  122. package/dist/test/filters/rpc/rpcLog.js +22 -0
  123. package/dist/test/filters/rpc/toobusy.js +39 -0
  124. package/dist/test/manager/mockChannelManager.js +77 -0
  125. package/dist/test/manager/taskManager.js +68 -0
  126. package/dist/test/mock-base/app/servers/other-file +0 -0
  127. package/dist/test/mock-plugin/components/mockPlugin.js +10 -0
  128. package/dist/test/mock-plugin/events/mockEvent.js +12 -0
  129. package/dist/test/modules/console.js +242 -0
  130. package/dist/test/pomelo.js +19 -0
  131. package/dist/test/remote/channelRemote.js +159 -0
  132. package/dist/test/service/channel.js +134 -0
  133. package/dist/test/service/channelService.js +216 -0
  134. package/dist/test/service/connectionService.js +114 -0
  135. package/dist/test/service/filterService.js +144 -0
  136. package/dist/test/service/handlerService.js +65 -0
  137. package/dist/test/service/sessionService.js +387 -0
  138. package/dist/test/util/countDownLatch.js +70 -0
  139. package/dist/test/util/pathUtil.js +108 -0
  140. package/dist/test/util/utils.js +140 -0
  141. package/lib/application.ts +1240 -0
  142. package/lib/common/manager/appManager.ts +118 -0
  143. package/lib/common/manager/taskManager.ts +50 -0
  144. package/lib/common/remote/backend/msgRemote.ts +134 -0
  145. package/lib/common/remote/frontend/channelRemote.ts +91 -0
  146. package/lib/common/remote/frontend/sessionRemote.ts +91 -0
  147. package/lib/common/service/backendSessionService.ts +388 -0
  148. package/lib/common/service/channelService.ts +609 -0
  149. package/lib/common/service/connectionService.ts +112 -0
  150. package/lib/common/service/filterService.ts +118 -0
  151. package/lib/common/service/handlerService.ts +224 -0
  152. package/lib/common/service/sessionService.ts +731 -0
  153. package/lib/components/backendSession.ts +14 -0
  154. package/lib/components/channel.ts +11 -0
  155. package/lib/components/connection.ts +13 -0
  156. package/lib/components/connector.ts +533 -0
  157. package/lib/components/dictionary.ts +121 -0
  158. package/lib/components/master.ts +41 -0
  159. package/lib/components/monitor.ts +30 -0
  160. package/lib/components/protobuf.ts +208 -0
  161. package/lib/components/proxy.ts +282 -0
  162. package/lib/components/pushScheduler.ts +70 -0
  163. package/lib/components/remote.ts +166 -0
  164. package/lib/components/server.ts +71 -0
  165. package/lib/components/session.ts +22 -0
  166. package/lib/connectors/commands/handshake.ts +155 -0
  167. package/lib/connectors/commands/heartbeat.ts +83 -0
  168. package/lib/connectors/commands/kick.ts +11 -0
  169. package/lib/connectors/common/coder.ts +93 -0
  170. package/lib/connectors/common/handler.ts +62 -0
  171. package/lib/connectors/hybrid/IHybridSocket.ts +9 -0
  172. package/lib/connectors/hybrid/switcher.ts +142 -0
  173. package/lib/connectors/hybrid/tcpprocessor.ts +43 -0
  174. package/lib/connectors/hybrid/tcpsocket.ts +223 -0
  175. package/lib/connectors/hybrid/wsprocessor.ts +57 -0
  176. package/lib/connectors/hybridconnector.ts +134 -0
  177. package/lib/connectors/hybridsocket.ts +168 -0
  178. package/lib/connectors/mqtt/generate.ts +103 -0
  179. package/lib/connectors/mqtt/mqttadaptor.ts +114 -0
  180. package/lib/connectors/mqtt/protocol.ts +49 -0
  181. package/lib/connectors/mqttconnector.ts +134 -0
  182. package/lib/connectors/mqttsocket.ts +79 -0
  183. package/lib/connectors/sioconnector.ts +161 -0
  184. package/lib/connectors/siosocket.ts +85 -0
  185. package/lib/connectors/udpconnector.ts +113 -0
  186. package/lib/connectors/udpsocket.ts +110 -0
  187. package/lib/filters/handler/serial.ts +46 -0
  188. package/lib/filters/handler/time.ts +35 -0
  189. package/lib/filters/handler/timeout.ts +50 -0
  190. package/lib/filters/handler/toobusy.ts +37 -0
  191. package/lib/filters/rpc/rpcLog.ts +42 -0
  192. package/lib/filters/rpc/toobusy.ts +41 -0
  193. package/lib/index.ts +74 -0
  194. package/lib/interfaces/IComponent.ts +47 -0
  195. package/lib/interfaces/IConnector.ts +20 -0
  196. package/lib/interfaces/IHandlerFilter.ts +15 -0
  197. package/lib/interfaces/ILifeCycle.ts +16 -0
  198. package/lib/interfaces/IPlugin.ts +65 -0
  199. package/lib/interfaces/IPushScheduler.ts +52 -0
  200. package/lib/interfaces/ISocket.ts +26 -0
  201. package/lib/interfaces/IStore.ts +10 -0
  202. package/lib/interfaces/define.ts +15 -0
  203. package/lib/master/master.ts +148 -0
  204. package/lib/master/starter.ts +234 -0
  205. package/lib/master/watchdog.ts +135 -0
  206. package/lib/melo.ts +152 -0
  207. package/lib/modules/console.ts +465 -0
  208. package/lib/modules/masterwatcher.ts +120 -0
  209. package/lib/modules/monitorwatcher.ts +151 -0
  210. package/lib/modules/onlineUser.ts +78 -0
  211. package/lib/modules/restartNotifyModule.ts +128 -0
  212. package/lib/modules/watchServer.ts +766 -0
  213. package/lib/monitor/monitor.ts +99 -0
  214. package/lib/pushSchedulers/buffer.ts +117 -0
  215. package/lib/pushSchedulers/direct.ts +65 -0
  216. package/lib/pushSchedulers/multi.ts +94 -0
  217. package/lib/server/server.ts +554 -0
  218. package/lib/util/appUtil.ts +313 -0
  219. package/lib/util/constants.ts +154 -0
  220. package/lib/util/countDownLatch.ts +72 -0
  221. package/lib/util/events.ts +15 -0
  222. package/lib/util/handlerHelper.ts +5 -0
  223. package/lib/util/log.ts +11 -0
  224. package/lib/util/moduleUtil.ts +110 -0
  225. package/lib/util/pathUtil.ts +132 -0
  226. package/lib/util/remoterHelper.ts +68 -0
  227. package/lib/util/utils.ts +365 -0
  228. package/package.json +93 -0
  229. package/template/game-server/.vscode/launch.json +27 -0
  230. package/template/game-server/app/servers/connector/handler/entryHandler.ts +50 -0
  231. package/template/game-server/app/servers/connector/remote/authRemoter.ts +36 -0
  232. package/template/game-server/app.ts +30 -0
  233. package/template/game-server/app.ts.mqtt +32 -0
  234. package/template/game-server/app.ts.sio +36 -0
  235. package/template/game-server/app.ts.sio.wss +34 -0
  236. package/template/game-server/app.ts.udp +31 -0
  237. package/template/game-server/app.ts.wss +40 -0
  238. package/template/game-server/config/adminServer.json +5 -0
  239. package/template/game-server/config/adminUser.json +22 -0
  240. package/template/game-server/config/clientProtos.json +1 -0
  241. package/template/game-server/config/dictionary.json +1 -0
  242. package/template/game-server/config/log4js.json +150 -0
  243. package/template/game-server/config/master.json +8 -0
  244. package/template/game-server/config/serverProtos.json +1 -0
  245. package/template/game-server/config/servers.json +12 -0
  246. package/template/game-server/copy.js +5 -0
  247. package/template/game-server/package.json +28 -0
  248. package/template/game-server/preload.ts +40 -0
  249. package/template/game-server/tsconfig.json +36 -0
  250. package/template/npm-install.bat +4 -0
  251. package/template/npm-install.sh +5 -0
  252. package/template/readme.md +31 -0
  253. package/template/shared/server.crt +15 -0
  254. package/template/shared/server.key +15 -0
  255. package/template/web-server/app.js +25 -0
  256. package/template/web-server/app.js.https +36 -0
  257. package/template/web-server/bin/component.bat +1 -0
  258. package/template/web-server/bin/component.sh +1 -0
  259. package/template/web-server/package.json +10 -0
  260. package/template/web-server/public/css/base.css +76 -0
  261. package/template/web-server/public/image/logo.png +0 -0
  262. package/template/web-server/public/image/sp.png +0 -0
  263. package/template/web-server/public/index.html +57 -0
  264. package/template/web-server/public/index.html.sio +58 -0
  265. package/template/web-server/public/js/lib/build/build.js +1730 -0
  266. package/template/web-server/public/js/lib/build/build.js.wss +1721 -0
  267. package/template/web-server/public/js/lib/component.json +6 -0
  268. package/template/web-server/public/js/lib/local/boot/component.json +11 -0
  269. package/template/web-server/public/js/lib/local/boot/index.js +11 -0
  270. package/template/web-server/public/js/lib/meloclient.js +456 -0
  271. package/template/web-server/public/js/lib/meloclient.js.wss +456 -0
  272. package/template/web-server/public/js/lib/socket.io.js +3 -0
  273. package/test/application.ts +607 -0
  274. package/test/filters/handler/serial.ts +47 -0
  275. package/test/filters/handler/time.ts +47 -0
  276. package/test/filters/handler/timeout.ts +46 -0
  277. package/test/filters/handler/toobusy.ts +59 -0
  278. package/test/filters/rpc/rpcLog.ts +20 -0
  279. package/test/filters/rpc/toobusy.ts +40 -0
  280. package/test/manager/mockChannelManager.ts +92 -0
  281. package/test/manager/taskManager.ts +78 -0
  282. package/test/mock-base/app/servers/other-file +0 -0
  283. package/test/mock-plugin/components/mockPlugin.ts +8 -0
  284. package/test/mock-plugin/events/mockEvent.ts +12 -0
  285. package/test/modules/console.ts +264 -0
  286. package/test/pomelo.ts +18 -0
  287. package/test/remote/channelRemote.ts +176 -0
  288. package/test/service/channel.ts +161 -0
  289. package/test/service/channelService.ts +243 -0
  290. package/test/service/connectionService.ts +142 -0
  291. package/test/service/filterService.ts +165 -0
  292. package/test/service/handlerService.ts +77 -0
  293. package/test/service/sessionService.ts +464 -0
  294. package/test/util/countDownLatch.ts +81 -0
  295. package/test/util/pathUtil.ts +122 -0
  296. package/test/util/utils.ts +165 -0
@@ -0,0 +1,1721 @@
1
+
2
+
3
+ /**
4
+ * hasOwnProperty.
5
+ */
6
+
7
+ var has = Object.prototype.hasOwnProperty;
8
+
9
+ /**
10
+ * Require the given path.
11
+ *
12
+ * @param {String} path
13
+ * @return {Object} exports
14
+ * @api public
15
+ */
16
+
17
+ function require(path, parent, orig) {
18
+ var resolved = require.resolve(path);
19
+
20
+ // lookup failed
21
+ if (null == resolved) {
22
+ orig = orig || path;
23
+ parent = parent || 'root';
24
+ var err = new Error('Failed to require "' + orig + '" from "' + parent + '"');
25
+ err.path = orig;
26
+ err.parent = parent;
27
+ err.require = true;
28
+ throw err;
29
+ }
30
+
31
+ var module = require.modules[resolved];
32
+
33
+ // perform real require()
34
+ // by invoking the module's
35
+ // registered function
36
+ if (!module.exports) {
37
+ module.exports = {};
38
+ module.client = module.component = true;
39
+ module.call(this, module.exports, require.relative(resolved), module);
40
+ }
41
+
42
+ return module.exports;
43
+ }
44
+
45
+ /**
46
+ * Registered modules.
47
+ */
48
+
49
+ require.modules = {};
50
+
51
+ /**
52
+ * Registered aliases.
53
+ */
54
+
55
+ require.aliases = {};
56
+
57
+ /**
58
+ * Resolve `path`.
59
+ *
60
+ * Lookup:
61
+ *
62
+ * - PATH/index.js
63
+ * - PATH.js
64
+ * - PATH
65
+ *
66
+ * @param {String} path
67
+ * @return {String} path or null
68
+ * @api private
69
+ */
70
+
71
+ require.resolve = function(path) {
72
+ if (path.charAt(0) === '/') path = path.slice(1);
73
+ var index = path + '/index.js';
74
+
75
+ var paths = [
76
+ path,
77
+ path + '.js',
78
+ path + '.json',
79
+ path + '/index.js',
80
+ path + '/index.json'
81
+ ];
82
+
83
+ for (var i = 0; i < paths.length; i++) {
84
+ var path = paths[i];
85
+ if (has.call(require.modules, path)) return path;
86
+ }
87
+
88
+ if (has.call(require.aliases, index)) {
89
+ return require.aliases[index];
90
+ }
91
+ };
92
+
93
+ /**
94
+ * Normalize `path` relative to the current path.
95
+ *
96
+ * @param {String} curr
97
+ * @param {String} path
98
+ * @return {String}
99
+ * @api private
100
+ */
101
+
102
+ require.normalize = function(curr, path) {
103
+ var segs = [];
104
+
105
+ if ('.' != path.charAt(0)) return path;
106
+
107
+ curr = curr.split('/');
108
+ path = path.split('/');
109
+
110
+ for (var i = 0; i < path.length; ++i) {
111
+ if ('..' == path[i]) {
112
+ curr.pop();
113
+ } else if ('.' != path[i] && '' != path[i]) {
114
+ segs.push(path[i]);
115
+ }
116
+ }
117
+
118
+ return curr.concat(segs).join('/');
119
+ };
120
+
121
+ /**
122
+ * Register module at `path` with callback `definition`.
123
+ *
124
+ * @param {String} path
125
+ * @param {Function} definition
126
+ * @api private
127
+ */
128
+
129
+ require.register = function(path, definition) {
130
+ require.modules[path] = definition;
131
+ };
132
+
133
+ /**
134
+ * Alias a module definition.
135
+ *
136
+ * @param {String} from
137
+ * @param {String} to
138
+ * @api private
139
+ */
140
+
141
+ require.alias = function(from, to) {
142
+ if (!has.call(require.modules, from)) {
143
+ throw new Error('Failed to alias "' + from + '", it does not exist');
144
+ }
145
+ require.aliases[to] = from;
146
+ };
147
+
148
+ /**
149
+ * Return a require function relative to the `parent` path.
150
+ *
151
+ * @param {String} parent
152
+ * @return {Function}
153
+ * @api private
154
+ */
155
+
156
+ require.relative = function(parent) {
157
+ var p = require.normalize(parent, '..');
158
+
159
+ /**
160
+ * lastIndexOf helper.
161
+ */
162
+
163
+ function lastIndexOf(arr, obj) {
164
+ var i = arr.length;
165
+ while (i--) {
166
+ if (arr[i] === obj) return i;
167
+ }
168
+ return -1;
169
+ }
170
+
171
+ /**
172
+ * The relative require() itself.
173
+ */
174
+
175
+ function localRequire(path) {
176
+ var resolved = localRequire.resolve(path);
177
+ return require(resolved, parent, path);
178
+ }
179
+
180
+ /**
181
+ * Resolve relative to the parent.
182
+ */
183
+
184
+ localRequire.resolve = function(path) {
185
+ var c = path.charAt(0);
186
+ if ('/' == c) return path.slice(1);
187
+ if ('.' == c) return require.normalize(p, path);
188
+
189
+ // resolve deps by returning
190
+ // the dep in the nearest "deps"
191
+ // directory
192
+ var segs = parent.split('/');
193
+ var i = lastIndexOf(segs, 'deps') + 1;
194
+ if (!i) i = 0;
195
+ path = segs.slice(0, i + 1).join('/') + '/deps/' + path;
196
+ return path;
197
+ };
198
+
199
+ /**
200
+ * Check if module is defined at `path`.
201
+ */
202
+
203
+ localRequire.exists = function(path) {
204
+ return has.call(require.modules, localRequire.resolve(path));
205
+ };
206
+
207
+ return localRequire;
208
+ };
209
+ require.register("component-indexof/index.js", function(exports, require, module){
210
+
211
+ var indexOf = [].indexOf;
212
+
213
+ module.exports = function(arr, obj){
214
+ if (indexOf) return arr.indexOf(obj);
215
+ for (var i = 0; i < arr.length; ++i) {
216
+ if (arr[i] === obj) return i;
217
+ }
218
+ return -1;
219
+ };
220
+ });
221
+ require.register("component-emitter/index.js", function(exports, require, module){
222
+
223
+ /**
224
+ * Module dependencies.
225
+ */
226
+
227
+ var index = require('indexof');
228
+
229
+ /**
230
+ * Expose `Emitter`.
231
+ */
232
+
233
+ module.exports = Emitter;
234
+
235
+ /**
236
+ * Initialize a new `Emitter`.
237
+ *
238
+ * @api public
239
+ */
240
+
241
+ function Emitter(obj) {
242
+ if (obj) return mixin(obj);
243
+ };
244
+
245
+ /**
246
+ * Mixin the emitter properties.
247
+ *
248
+ * @param {Object} obj
249
+ * @return {Object}
250
+ * @api private
251
+ */
252
+
253
+ function mixin(obj) {
254
+ for (var key in Emitter.prototype) {
255
+ obj[key] = Emitter.prototype[key];
256
+ }
257
+ return obj;
258
+ }
259
+
260
+ /**
261
+ * Listen on the given `event` with `fn`.
262
+ *
263
+ * @param {String} event
264
+ * @param {Function} fn
265
+ * @return {Emitter}
266
+ * @api public
267
+ */
268
+
269
+ Emitter.prototype.on = function(event, fn){
270
+ this._callbacks = this._callbacks || {};
271
+ (this._callbacks[event] = this._callbacks[event] || [])
272
+ .push(fn);
273
+ return this;
274
+ };
275
+
276
+ /**
277
+ * Adds an `event` listener that will be invoked a single
278
+ * time then automatically removed.
279
+ *
280
+ * @param {String} event
281
+ * @param {Function} fn
282
+ * @return {Emitter}
283
+ * @api public
284
+ */
285
+
286
+ Emitter.prototype.once = function(event, fn){
287
+ var self = this;
288
+ this._callbacks = this._callbacks || {};
289
+
290
+ function on() {
291
+ self.off(event, on);
292
+ fn.apply(this, arguments);
293
+ }
294
+
295
+ fn._off = on;
296
+ this.on(event, on);
297
+ return this;
298
+ };
299
+
300
+ /**
301
+ * Remove the given callback for `event` or all
302
+ * registered callbacks.
303
+ *
304
+ * @param {String} event
305
+ * @param {Function} fn
306
+ * @return {Emitter}
307
+ * @api public
308
+ */
309
+
310
+ Emitter.prototype.off =
311
+ Emitter.prototype.removeListener =
312
+ Emitter.prototype.removeAllListeners = function(event, fn){
313
+ this._callbacks = this._callbacks || {};
314
+
315
+ // all
316
+ if (0 == arguments.length) {
317
+ this._callbacks = {};
318
+ return this;
319
+ }
320
+
321
+ // specific event
322
+ var callbacks = this._callbacks[event];
323
+ if (!callbacks) return this;
324
+
325
+ // remove all handlers
326
+ if (1 == arguments.length) {
327
+ delete this._callbacks[event];
328
+ return this;
329
+ }
330
+
331
+ // remove specific handler
332
+ var i = index(callbacks, fn._off || fn);
333
+ if (~i) callbacks.splice(i, 1);
334
+ return this;
335
+ };
336
+
337
+ /**
338
+ * Emit `event` with the given args.
339
+ *
340
+ * @param {String} event
341
+ * @param {Mixed} ...
342
+ * @return {Emitter}
343
+ */
344
+
345
+ Emitter.prototype.emit = function(event){
346
+ this._callbacks = this._callbacks || {};
347
+ var args = [].slice.call(arguments, 1)
348
+ , callbacks = this._callbacks[event];
349
+
350
+ if (callbacks) {
351
+ callbacks = callbacks.slice(0);
352
+ for (var i = 0, len = callbacks.length; i < len; ++i) {
353
+ callbacks[i].apply(this, args);
354
+ }
355
+ }
356
+
357
+ return this;
358
+ };
359
+
360
+ /**
361
+ * Return array of callbacks for `event`.
362
+ *
363
+ * @param {String} event
364
+ * @return {Array}
365
+ * @api public
366
+ */
367
+
368
+ Emitter.prototype.listeners = function(event){
369
+ this._callbacks = this._callbacks || {};
370
+ return this._callbacks[event] || [];
371
+ };
372
+
373
+ /**
374
+ * Check if this emitter has `event` handlers.
375
+ *
376
+ * @param {String} event
377
+ * @return {Boolean}
378
+ * @api public
379
+ */
380
+
381
+ Emitter.prototype.hasListeners = function(event){
382
+ return !! this.listeners(event).length;
383
+ };
384
+
385
+ });
386
+ require.register("node-melo-melo-protocol/lib/protocol.js", function(exports, require, module){
387
+ (function (exports, ByteArray, global) {
388
+ var Protocol = exports;
389
+
390
+ var PKG_HEAD_BYTES = 4;
391
+ var MSG_FLAG_BYTES = 1;
392
+ var MSG_ROUTE_CODE_BYTES = 2;
393
+ var MSG_ID_MAX_BYTES = 5;
394
+ var MSG_ROUTE_LEN_BYTES = 1;
395
+
396
+ var MSG_ROUTE_CODE_MAX = 0xffff;
397
+
398
+ var MSG_COMPRESS_ROUTE_MASK = 0x1;
399
+ var MSG_TYPE_MASK = 0x7;
400
+
401
+ var Package = Protocol.Package = {};
402
+ var Message = Protocol.Message = {};
403
+
404
+ Package.TYPE_HANDSHAKE = 1;
405
+ Package.TYPE_HANDSHAKE_ACK = 2;
406
+ Package.TYPE_HEARTBEAT = 3;
407
+ Package.TYPE_DATA = 4;
408
+ Package.TYPE_KICK = 5;
409
+
410
+ Message.TYPE_REQUEST = 0;
411
+ Message.TYPE_NOTIFY = 1;
412
+ Message.TYPE_RESPONSE = 2;
413
+ Message.TYPE_PUSH = 3;
414
+
415
+ /**
416
+ * pomele client encode
417
+ * id message id;
418
+ * route message route
419
+ * msg message body
420
+ * socketio current support string
421
+ */
422
+ Protocol.strencode = function(str) {
423
+ var byteArray = new ByteArray(str.length * 3);
424
+ var offset = 0;
425
+ for(var i = 0; i < str.length; i++){
426
+ var charCode = str.charCodeAt(i);
427
+ var codes = null;
428
+ if(charCode <= 0x7f){
429
+ codes = [charCode];
430
+ }else if(charCode <= 0x7ff){
431
+ codes = [0xc0|(charCode>>6), 0x80|(charCode & 0x3f)];
432
+ }else{
433
+ codes = [0xe0|(charCode>>12), 0x80|((charCode & 0xfc0)>>6), 0x80|(charCode & 0x3f)];
434
+ }
435
+ for(var j = 0; j < codes.length; j++){
436
+ byteArray[offset] = codes[j];
437
+ ++offset;
438
+ }
439
+ }
440
+ var _buffer = new ByteArray(offset);
441
+ copyArray(_buffer, 0, byteArray, 0, offset);
442
+ return _buffer;
443
+ };
444
+
445
+ /**
446
+ * client decode
447
+ * msg String data
448
+ * return Message Object
449
+ */
450
+ Protocol.strdecode = function(buffer) {
451
+ var bytes = new ByteArray(buffer);
452
+ var array = [];
453
+ var offset = 0;
454
+ var charCode = 0;
455
+ var end = bytes.length;
456
+ while(offset < end){
457
+ if(bytes[offset] < 128){
458
+ charCode = bytes[offset];
459
+ offset += 1;
460
+ }else if(bytes[offset] < 224){
461
+ charCode = ((bytes[offset] & 0x3f)<<6) + (bytes[offset+1] & 0x3f);
462
+ offset += 2;
463
+ }else{
464
+ charCode = ((bytes[offset] & 0x0f)<<12) + ((bytes[offset+1] & 0x3f)<<6) + (bytes[offset+2] & 0x3f);
465
+ offset += 3;
466
+ }
467
+ array.push(charCode);
468
+ }
469
+ return String.fromCharCode.apply(null, array);
470
+ };
471
+
472
+ /**
473
+ * Package protocol encode.
474
+ *
475
+ * Melo package format:
476
+ * +------+-------------+------------------+
477
+ * | type | body length | body |
478
+ * +------+-------------+------------------+
479
+ *
480
+ * Head: 4bytes
481
+ * 0: package type,
482
+ * 1 - handshake,
483
+ * 2 - handshake ack,
484
+ * 3 - heartbeat,
485
+ * 4 - data
486
+ * 5 - kick
487
+ * 1 - 3: big-endian body length
488
+ * Body: body length bytes
489
+ *
490
+ * @param {Number} type package type
491
+ * @param {ByteArray} body body content in bytes
492
+ * @return {ByteArray} new byte array that contains encode result
493
+ */
494
+ Package.encode = function(type, body){
495
+ var length = body ? body.length : 0;
496
+ var buffer = new ByteArray(PKG_HEAD_BYTES + length);
497
+ var index = 0;
498
+ buffer[index++] = type & 0xff;
499
+ buffer[index++] = (length >> 16) & 0xff;
500
+ buffer[index++] = (length >> 8) & 0xff;
501
+ buffer[index++] = length & 0xff;
502
+ if(body) {
503
+ copyArray(buffer, index, body, 0, length);
504
+ }
505
+ return buffer;
506
+ };
507
+
508
+ /**
509
+ * Package protocol decode.
510
+ * See encode for package format.
511
+ *
512
+ * @param {ByteArray} buffer byte array containing package content
513
+ * @return {Object} {type: package type, buffer: body byte array}
514
+ */
515
+ Package.decode = function(buffer){
516
+ var bytes = new ByteArray(buffer);
517
+ var type = bytes[0];
518
+ var index = 1;
519
+ var length = ((bytes[index++]) << 16 | (bytes[index++]) << 8 | bytes[index++]) >>> 0;
520
+ var body = length ? new ByteArray(length) : null;
521
+ copyArray(body, 0, bytes, PKG_HEAD_BYTES, length);
522
+ return {'type': type, 'body': body};
523
+ };
524
+
525
+ /**
526
+ * Message protocol encode.
527
+ *
528
+ * @param {Number} id message id
529
+ * @param {Number} type message type
530
+ * @param {Number} compressRoute whether compress route
531
+ * @param {Number|String} route route code or route string
532
+ * @param {Buffer} msg message body bytes
533
+ * @return {Buffer} encode result
534
+ */
535
+ Message.encode = function(id, type, compressRoute, route, msg){
536
+ // caculate message max length
537
+ var idBytes = msgHasId(type) ? caculateMsgIdBytes(id) : 0;
538
+ var msgLen = MSG_FLAG_BYTES + idBytes;
539
+
540
+ if(msgHasRoute(type)) {
541
+ if(compressRoute) {
542
+ if(typeof route !== 'number'){
543
+ throw new Error('error flag for number route!');
544
+ }
545
+ msgLen += MSG_ROUTE_CODE_BYTES;
546
+ } else {
547
+ msgLen += MSG_ROUTE_LEN_BYTES;
548
+ if(route) {
549
+ route = Protocol.strencode(route);
550
+ if(route.length>255) {
551
+ throw new Error('route maxlength is overflow');
552
+ }
553
+ msgLen += route.length;
554
+ }
555
+ }
556
+ }
557
+
558
+ if(msg) {
559
+ msgLen += msg.length;
560
+ }
561
+
562
+ var buffer = new ByteArray(msgLen);
563
+ var offset = 0;
564
+
565
+ // add flag
566
+ offset = encodeMsgFlag(type, compressRoute, buffer, offset);
567
+
568
+ // add message id
569
+ if(msgHasId(type)) {
570
+ offset = encodeMsgId(id, idBytes, buffer, offset);
571
+ }
572
+
573
+ // add route
574
+ if(msgHasRoute(type)) {
575
+ offset = encodeMsgRoute(compressRoute, route, buffer, offset);
576
+ }
577
+
578
+ // add body
579
+ if(msg) {
580
+ offset = encodeMsgBody(msg, buffer, offset);
581
+ }
582
+
583
+ return buffer;
584
+ };
585
+
586
+ /**
587
+ * Message protocol decode.
588
+ *
589
+ * @param {Buffer|Uint8Array} buffer message bytes
590
+ * @return {Object} message object
591
+ */
592
+ Message.decode = function(buffer) {
593
+ var bytes = new ByteArray(buffer);
594
+ var bytesLen = bytes.length || bytes.byteLength;
595
+ var offset = 0;
596
+ var id = 0;
597
+ var route = null;
598
+
599
+ // parse flag
600
+ var flag = bytes[offset++];
601
+ var compressRoute = flag & MSG_COMPRESS_ROUTE_MASK;
602
+ var type = (flag >> 1) & MSG_TYPE_MASK;
603
+
604
+ // parse id
605
+ if(msgHasId(type)) {
606
+ var byte = bytes[offset++];
607
+ id = byte & 0x7f;
608
+ while(byte & 0x80) {
609
+ id <<= 7;
610
+ byte = bytes[offset++];
611
+ id |= byte & 0x7f;
612
+ }
613
+ }
614
+
615
+ // parse route
616
+ if(msgHasRoute(type)) {
617
+ if(compressRoute) {
618
+ route = (bytes[offset++]) << 8 | bytes[offset++];
619
+ } else {
620
+ var routeLen = bytes[offset++];
621
+ if(routeLen) {
622
+ route = new ByteArray(routeLen);
623
+ copyArray(route, 0, bytes, offset, routeLen);
624
+ route = Protocol.strdecode(route);
625
+ } else {
626
+ route = '';
627
+ }
628
+ offset += routeLen;
629
+ }
630
+ }
631
+
632
+ // parse body
633
+ var bodyLen = bytesLen - offset;
634
+ var body = new ByteArray(bodyLen);
635
+
636
+ copyArray(body, 0, bytes, offset, bodyLen);
637
+
638
+ return {'id': id, 'type': type, 'compressRoute': compressRoute,
639
+ 'route': route, 'body': body};
640
+ };
641
+
642
+ var copyArray = function(dest, doffset, src, soffset, length) {
643
+ if('function' === typeof src.copy) {
644
+ // Buffer
645
+ src.copy(dest, doffset, soffset, soffset + length);
646
+ } else {
647
+ // Uint8Array
648
+ for(var index=0; index<length; index++){
649
+ dest[doffset++] = src[soffset++];
650
+ }
651
+ }
652
+ };
653
+
654
+ var msgHasId = function(type) {
655
+ return type === Message.TYPE_REQUEST || type === Message.TYPE_RESPONSE;
656
+ };
657
+
658
+ var msgHasRoute = function(type) {
659
+ return type === Message.TYPE_REQUEST || type === Message.TYPE_NOTIFY ||
660
+ type === Message.TYPE_PUSH;
661
+ };
662
+
663
+ var caculateMsgIdBytes = function(id) {
664
+ var len = 0;
665
+ do {
666
+ len += 1;
667
+ id >>= 7;
668
+ } while(id > 0);
669
+ return len;
670
+ };
671
+
672
+ var encodeMsgFlag = function(type, compressRoute, buffer, offset) {
673
+ if(type !== Message.TYPE_REQUEST && type !== Message.TYPE_NOTIFY &&
674
+ type !== Message.TYPE_RESPONSE && type !== Message.TYPE_PUSH) {
675
+ throw new Error('unkonw message type: ' + type);
676
+ }
677
+
678
+ buffer[offset] = (type << 1) | (compressRoute ? 1 : 0);
679
+
680
+ return offset + MSG_FLAG_BYTES;
681
+ };
682
+
683
+ var encodeMsgId = function(id, idBytes, buffer, offset) {
684
+ var index = offset + idBytes - 1;
685
+ buffer[index--] = id & 0x7f;
686
+ while(index >= offset) {
687
+ id >>= 7;
688
+ buffer[index--] = id & 0x7f | 0x80;
689
+ }
690
+ return offset + idBytes;
691
+ };
692
+
693
+ var encodeMsgRoute = function(compressRoute, route, buffer, offset) {
694
+ if (compressRoute) {
695
+ if(route > MSG_ROUTE_CODE_MAX){
696
+ throw new Error('route number is overflow');
697
+ }
698
+
699
+ buffer[offset++] = (route >> 8) & 0xff;
700
+ buffer[offset++] = route & 0xff;
701
+ } else {
702
+ if(route) {
703
+ buffer[offset++] = route.length & 0xff;
704
+ copyArray(buffer, offset, route, 0, route.length);
705
+ offset += route.length;
706
+ } else {
707
+ buffer[offset++] = 0;
708
+ }
709
+ }
710
+
711
+ return offset;
712
+ };
713
+
714
+ var encodeMsgBody = function(msg, buffer, offset) {
715
+ copyArray(buffer, offset, msg, 0, msg.length);
716
+ return offset + msg.length;
717
+ };
718
+
719
+ module.exports = Protocol;
720
+ })('object' === typeof module ? module.exports : (this.Protocol = {}),'object' === typeof module ? Buffer : Uint8Array, this);
721
+
722
+ });
723
+ require.register("melonode-melo-protobuf/lib/client/protobuf.js", function(exports, require, module){
724
+ /* ProtocolBuffer client 0.1.0*/
725
+
726
+ /**
727
+ * melo-protobuf
728
+ * @author <zhang0935@gmail.com>
729
+ */
730
+
731
+ /**
732
+ * Protocol buffer root
733
+ * In browser, it will be window.protbuf
734
+ */
735
+ (function (exports, global){
736
+ var Protobuf = exports;
737
+
738
+ Protobuf.init = function(opts){
739
+ //On the serverside, use serverProtos to encode messages send to client
740
+ Protobuf.encoder.init(opts.encoderProtos);
741
+
742
+ //On the serverside, user clientProtos to decode messages receive from clients
743
+ Protobuf.decoder.init(opts.decoderProtos);
744
+ };
745
+
746
+ Protobuf.encode = function(key, msg){
747
+ return Protobuf.encoder.encode(key, msg);
748
+ };
749
+
750
+ Protobuf.decode = function(key, msg){
751
+ return Protobuf.decoder.decode(key, msg);
752
+ };
753
+
754
+ // exports to support for components
755
+ module.exports = Protobuf;
756
+ })('object' === typeof module ? module.exports : (this.protobuf = {}), this);
757
+
758
+ /**
759
+ * constants
760
+ */
761
+ (function (exports, global){
762
+ var constants = exports.constants = {};
763
+
764
+ constants.TYPES = {
765
+ uInt32 : 0,
766
+ sInt32 : 0,
767
+ int32 : 0,
768
+ double : 1,
769
+ string : 2,
770
+ message : 2,
771
+ float : 5
772
+ };
773
+
774
+ })('undefined' !== typeof protobuf ? protobuf : module.exports, this);
775
+
776
+ /**
777
+ * util module
778
+ */
779
+ (function (exports, global){
780
+
781
+ var Util = exports.util = {};
782
+
783
+ Util.isSimpleType = function(type){
784
+ return ( type === 'uInt32' ||
785
+ type === 'sInt32' ||
786
+ type === 'int32' ||
787
+ type === 'uInt64' ||
788
+ type === 'sInt64' ||
789
+ type === 'float' ||
790
+ type === 'double' );
791
+ };
792
+
793
+ })('undefined' !== typeof protobuf ? protobuf : module.exports, this);
794
+
795
+ /**
796
+ * codec module
797
+ */
798
+ (function (exports, global){
799
+
800
+ var Codec = exports.codec = {};
801
+
802
+ var buffer = new ArrayBuffer(8);
803
+ var float32Array = new Float32Array(buffer);
804
+ var float64Array = new Float64Array(buffer);
805
+ var uInt8Array = new Uint8Array(buffer);
806
+
807
+ Codec.encodeUInt32 = function(n){
808
+ var n = parseInt(n);
809
+ if(isNaN(n) || n < 0){
810
+ return null;
811
+ }
812
+
813
+ var result = [];
814
+ do{
815
+ var tmp = n % 128;
816
+ var next = Math.floor(n/128);
817
+
818
+ if(next !== 0){
819
+ tmp = tmp + 128;
820
+ }
821
+ result.push(tmp);
822
+ n = next;
823
+ }while(n !== 0);
824
+
825
+ return result;
826
+ };
827
+
828
+ Codec.encodeSInt32 = function(n){
829
+ var n = parseInt(n);
830
+ if(isNaN(n)){
831
+ return null;
832
+ }
833
+ n = n<0?(Math.abs(n)*2-1):n*2;
834
+
835
+ return Codec.encodeUInt32(n);
836
+ };
837
+
838
+ Codec.decodeUInt32 = function(bytes){
839
+ var n = 0;
840
+
841
+ for(var i = 0; i < bytes.length; i++){
842
+ var m = parseInt(bytes[i]);
843
+ n = n + ((m & 0x7f) * Math.pow(2,(7*i)));
844
+ if(m < 128){
845
+ return n;
846
+ }
847
+ }
848
+
849
+ return n;
850
+ };
851
+
852
+
853
+ Codec.decodeSInt32 = function(bytes){
854
+ var n = this.decodeUInt32(bytes);
855
+ var flag = ((n%2) === 1)?-1:1;
856
+
857
+ n = ((n%2 + n)/2)*flag;
858
+
859
+ return n;
860
+ };
861
+
862
+ Codec.encodeFloat = function(float){
863
+ float32Array[0] = float;
864
+ return uInt8Array;
865
+ };
866
+
867
+ Codec.decodeFloat = function(bytes, offset){
868
+ if(!bytes || bytes.length < (offset +4)){
869
+ return null;
870
+ }
871
+
872
+ for(var i = 0; i < 4; i++){
873
+ uInt8Array[i] = bytes[offset + i];
874
+ }
875
+
876
+ return float32Array[0];
877
+ };
878
+
879
+ Codec.encodeDouble = function(double){
880
+ float64Array[0] = double;
881
+ return uInt8Array.subarray(0, 8);
882
+ };
883
+
884
+ Codec.decodeDouble = function(bytes, offset){
885
+ if(!bytes || bytes.length < (8 + offset)){
886
+ return null;
887
+ }
888
+
889
+ for(var i = 0; i < 8; i++){
890
+ uInt8Array[i] = bytes[offset + i];
891
+ }
892
+
893
+ return float64Array[0];
894
+ };
895
+
896
+ Codec.encodeStr = function(bytes, offset, str){
897
+ for(var i = 0; i < str.length; i++){
898
+ var code = str.charCodeAt(i);
899
+ var codes = encode2UTF8(code);
900
+
901
+ for(var j = 0; j < codes.length; j++){
902
+ bytes[offset] = codes[j];
903
+ offset++;
904
+ }
905
+ }
906
+
907
+ return offset;
908
+ };
909
+
910
+ /**
911
+ * Decode string from utf8 bytes
912
+ */
913
+ Codec.decodeStr = function(bytes, offset, length){
914
+ var array = [];
915
+ var end = offset + length;
916
+
917
+ while(offset < end){
918
+ var code = 0;
919
+
920
+ if(bytes[offset] < 128){
921
+ code = bytes[offset];
922
+
923
+ offset += 1;
924
+ }else if(bytes[offset] < 224){
925
+ code = ((bytes[offset] & 0x3f)<<6) + (bytes[offset+1] & 0x3f);
926
+ offset += 2;
927
+ }else{
928
+ code = ((bytes[offset] & 0x0f)<<12) + ((bytes[offset+1] & 0x3f)<<6) + (bytes[offset+2] & 0x3f);
929
+ offset += 3;
930
+ }
931
+
932
+ array.push(code);
933
+
934
+ }
935
+
936
+ var str = '';
937
+ for(var i = 0; i < array.length;){
938
+ str += String.fromCharCode.apply(null, array.slice(i, i + 10000));
939
+ i += 10000;
940
+ }
941
+
942
+ return str;
943
+ };
944
+
945
+ /**
946
+ * Return the byte length of the str use utf8
947
+ */
948
+ Codec.byteLength = function(str){
949
+ if(typeof(str) !== 'string'){
950
+ return -1;
951
+ }
952
+
953
+ var length = 0;
954
+
955
+ for(var i = 0; i < str.length; i++){
956
+ var code = str.charCodeAt(i);
957
+ length += codeLength(code);
958
+ }
959
+
960
+ return length;
961
+ };
962
+
963
+ /**
964
+ * Encode a unicode16 char code to utf8 bytes
965
+ */
966
+ function encode2UTF8(charCode){
967
+ if(charCode <= 0x7f){
968
+ return [charCode];
969
+ }else if(charCode <= 0x7ff){
970
+ return [0xc0|(charCode>>6), 0x80|(charCode & 0x3f)];
971
+ }else{
972
+ return [0xe0|(charCode>>12), 0x80|((charCode & 0xfc0)>>6), 0x80|(charCode & 0x3f)];
973
+ }
974
+ }
975
+
976
+ function codeLength(code){
977
+ if(code <= 0x7f){
978
+ return 1;
979
+ }else if(code <= 0x7ff){
980
+ return 2;
981
+ }else{
982
+ return 3;
983
+ }
984
+ }
985
+ })('undefined' !== typeof protobuf ? protobuf : module.exports, this);
986
+
987
+ /**
988
+ * encoder module
989
+ */
990
+ (function (exports, global){
991
+
992
+ var protobuf = exports;
993
+ var MsgEncoder = exports.encoder = {};
994
+
995
+ var codec = protobuf.codec;
996
+ var constant = protobuf.constants;
997
+ var util = protobuf.util;
998
+
999
+ MsgEncoder.init = function(protos){
1000
+ this.protos = protos || {};
1001
+ };
1002
+
1003
+ MsgEncoder.encode = function(route, msg){
1004
+ //Get protos from protos map use the route as key
1005
+ var protos = this.protos[route];
1006
+
1007
+ //Check msg
1008
+ if(!checkMsg(msg, protos)){
1009
+ return null;
1010
+ }
1011
+
1012
+ //Set the length of the buffer 2 times bigger to prevent overflow
1013
+ var length = codec.byteLength(JSON.stringify(msg));
1014
+
1015
+ //Init buffer and offset
1016
+ var buffer = new ArrayBuffer(length);
1017
+ var uInt8Array = new Uint8Array(buffer);
1018
+ var offset = 0;
1019
+
1020
+ if(!!protos){
1021
+ offset = encodeMsg(uInt8Array, offset, protos, msg);
1022
+ if(offset > 0){
1023
+ return uInt8Array.subarray(0, offset);
1024
+ }
1025
+ }
1026
+
1027
+ return null;
1028
+ };
1029
+
1030
+ /**
1031
+ * Check if the msg follow the defination in the protos
1032
+ */
1033
+ function checkMsg(msg, protos){
1034
+ if(!protos){
1035
+ return false;
1036
+ }
1037
+
1038
+ for(var name in protos){
1039
+ var proto = protos[name];
1040
+
1041
+ //All required element must exist
1042
+ switch(proto.option){
1043
+ case 'required' :
1044
+ if(typeof(msg[name]) === 'undefined'){
1045
+ return false;
1046
+ }
1047
+ case 'optional' :
1048
+ if(typeof(msg[name]) !== 'undefined'){
1049
+ if(!!protos.__messages[proto.type]){
1050
+ checkMsg(msg[name], protos.__messages[proto.type]);
1051
+ }
1052
+ }
1053
+ break;
1054
+ case 'repeated' :
1055
+ //Check nest message in repeated elements
1056
+ if(!!msg[name] && !!protos.__messages[proto.type]){
1057
+ for(var i = 0; i < msg[name].length; i++){
1058
+ if(!checkMsg(msg[name][i], protos.__messages[proto.type])){
1059
+ return false;
1060
+ }
1061
+ }
1062
+ }
1063
+ break;
1064
+ }
1065
+ }
1066
+
1067
+ return true;
1068
+ }
1069
+
1070
+ function encodeMsg(buffer, offset, protos, msg){
1071
+ for(var name in msg){
1072
+ if(!!protos[name]){
1073
+ var proto = protos[name];
1074
+
1075
+ switch(proto.option){
1076
+ case 'required' :
1077
+ case 'optional' :
1078
+ offset = writeBytes(buffer, offset, encodeTag(proto.type, proto.tag));
1079
+ offset = encodeProp(msg[name], proto.type, offset, buffer, protos);
1080
+ break;
1081
+ case 'repeated' :
1082
+ if(msg[name].length > 0){
1083
+ offset = encodeArray(msg[name], proto, offset, buffer, protos);
1084
+ }
1085
+ break;
1086
+ }
1087
+ }
1088
+ }
1089
+
1090
+ return offset;
1091
+ }
1092
+
1093
+ function encodeProp(value, type, offset, buffer, protos){
1094
+ switch(type){
1095
+ case 'uInt32':
1096
+ offset = writeBytes(buffer, offset, codec.encodeUInt32(value));
1097
+ break;
1098
+ case 'int32' :
1099
+ case 'sInt32':
1100
+ offset = writeBytes(buffer, offset, codec.encodeSInt32(value));
1101
+ break;
1102
+ case 'float':
1103
+ writeBytes(buffer, offset, codec.encodeFloat(value));
1104
+ offset += 4;
1105
+ break;
1106
+ case 'double':
1107
+ writeBytes(buffer, offset, codec.encodeDouble(value));
1108
+ offset += 8;
1109
+ break;
1110
+ case 'string':
1111
+ var length = codec.byteLength(value);
1112
+
1113
+ //Encode length
1114
+ offset = writeBytes(buffer, offset, codec.encodeUInt32(length));
1115
+ //write string
1116
+ codec.encodeStr(buffer, offset, value);
1117
+ offset += length;
1118
+ break;
1119
+ default :
1120
+ if(!!protos.__messages[type]){
1121
+ //Use a tmp buffer to build an internal msg
1122
+ var tmpBuffer = new ArrayBuffer(codec.byteLength(JSON.stringify(value)));
1123
+ var length = 0;
1124
+
1125
+ length = encodeMsg(tmpBuffer, length, protos.__messages[type], value);
1126
+ //Encode length
1127
+ offset = writeBytes(buffer, offset, codec.encodeUInt32(length));
1128
+ //contact the object
1129
+ for(var i = 0; i < length; i++){
1130
+ buffer[offset] = tmpBuffer[i];
1131
+ offset++;
1132
+ }
1133
+ }
1134
+ break;
1135
+ }
1136
+
1137
+ return offset;
1138
+ }
1139
+
1140
+ /**
1141
+ * Encode reapeated properties, simple msg and object are decode differented
1142
+ */
1143
+ function encodeArray(array, proto, offset, buffer, protos){
1144
+ var i = 0;
1145
+
1146
+ if(util.isSimpleType(proto.type)){
1147
+ offset = writeBytes(buffer, offset, encodeTag(proto.type, proto.tag));
1148
+ offset = writeBytes(buffer, offset, codec.encodeUInt32(array.length));
1149
+ for(i = 0; i < array.length; i++){
1150
+ offset = encodeProp(array[i], proto.type, offset, buffer);
1151
+ }
1152
+ }else{
1153
+ for(i = 0; i < array.length; i++){
1154
+ offset = writeBytes(buffer, offset, encodeTag(proto.type, proto.tag));
1155
+ offset = encodeProp(array[i], proto.type, offset, buffer, protos);
1156
+ }
1157
+ }
1158
+
1159
+ return offset;
1160
+ }
1161
+
1162
+ function writeBytes(buffer, offset, bytes){
1163
+ for(var i = 0; i < bytes.length; i++, offset++){
1164
+ buffer[offset] = bytes[i];
1165
+ }
1166
+
1167
+ return offset;
1168
+ }
1169
+
1170
+ function encodeTag(type, tag){
1171
+ var value = constant.TYPES[type]||2;
1172
+ return codec.encodeUInt32((tag<<3)|value);
1173
+ }
1174
+ })('undefined' !== typeof protobuf ? protobuf : module.exports, this);
1175
+
1176
+ /**
1177
+ * decoder module
1178
+ */
1179
+ (function (exports, global){
1180
+ var protobuf = exports;
1181
+ var MsgDecoder = exports.decoder = {};
1182
+
1183
+ var codec = protobuf.codec;
1184
+ var util = protobuf.util;
1185
+
1186
+ var buffer;
1187
+ var offset = 0;
1188
+
1189
+ MsgDecoder.init = function(protos){
1190
+ this.protos = protos || {};
1191
+ };
1192
+
1193
+ MsgDecoder.setProtos = function(protos){
1194
+ if(!!protos){
1195
+ this.protos = protos;
1196
+ }
1197
+ };
1198
+
1199
+ MsgDecoder.decode = function(route, buf){
1200
+ var protos = this.protos[route];
1201
+
1202
+ buffer = buf;
1203
+ offset = 0;
1204
+
1205
+ if(!!protos){
1206
+ return decodeMsg({}, protos, buffer.length);
1207
+ }
1208
+
1209
+ return null;
1210
+ };
1211
+
1212
+ function decodeMsg(msg, protos, length){
1213
+ while(offset<length){
1214
+ var head = getHead();
1215
+ var type = head.type;
1216
+ var tag = head.tag;
1217
+ var name = protos.__tags[tag];
1218
+
1219
+ switch(protos[name].option){
1220
+ case 'optional' :
1221
+ case 'required' :
1222
+ msg[name] = decodeProp(protos[name].type, protos);
1223
+ break;
1224
+ case 'repeated' :
1225
+ if(!msg[name]){
1226
+ msg[name] = [];
1227
+ }
1228
+ decodeArray(msg[name], protos[name].type, protos);
1229
+ break;
1230
+ }
1231
+ }
1232
+
1233
+ return msg;
1234
+ }
1235
+
1236
+ /**
1237
+ * Test if the given msg is finished
1238
+ */
1239
+ function isFinish(msg, protos){
1240
+ return (!protos.__tags[peekHead().tag]);
1241
+ }
1242
+ /**
1243
+ * Get property head from protobuf
1244
+ */
1245
+ function getHead(){
1246
+ var tag = codec.decodeUInt32(getBytes());
1247
+
1248
+ return {
1249
+ type : tag&0x7,
1250
+ tag : tag>>3
1251
+ };
1252
+ }
1253
+
1254
+ /**
1255
+ * Get tag head without move the offset
1256
+ */
1257
+ function peekHead(){
1258
+ var tag = codec.decodeUInt32(peekBytes());
1259
+
1260
+ return {
1261
+ type : tag&0x7,
1262
+ tag : tag>>3
1263
+ };
1264
+ }
1265
+
1266
+ function decodeProp(type, protos){
1267
+ switch(type){
1268
+ case 'uInt32':
1269
+ return codec.decodeUInt32(getBytes());
1270
+ case 'int32' :
1271
+ case 'sInt32' :
1272
+ return codec.decodeSInt32(getBytes());
1273
+ case 'float' :
1274
+ var float = codec.decodeFloat(buffer, offset);
1275
+ offset += 4;
1276
+ return float;
1277
+ case 'double' :
1278
+ var double = codec.decodeDouble(buffer, offset);
1279
+ offset += 8;
1280
+ return double;
1281
+ case 'string' :
1282
+ var length = codec.decodeUInt32(getBytes());
1283
+
1284
+ var str = codec.decodeStr(buffer, offset, length);
1285
+ offset += length;
1286
+
1287
+ return str;
1288
+ default :
1289
+ if(!!protos && !!protos.__messages[type]){
1290
+ var length = codec.decodeUInt32(getBytes());
1291
+ var msg = {};
1292
+ decodeMsg(msg, protos.__messages[type], offset+length);
1293
+ return msg;
1294
+ }
1295
+ break;
1296
+ }
1297
+ }
1298
+
1299
+ function decodeArray(array, type, protos){
1300
+ if(util.isSimpleType(type)){
1301
+ var length = codec.decodeUInt32(getBytes());
1302
+
1303
+ for(var i = 0; i < length; i++){
1304
+ array.push(decodeProp(type));
1305
+ }
1306
+ }else{
1307
+ array.push(decodeProp(type, protos));
1308
+ }
1309
+ }
1310
+
1311
+ function getBytes(flag){
1312
+ var bytes = [];
1313
+ var pos = offset;
1314
+ flag = flag || false;
1315
+
1316
+ var b;
1317
+
1318
+ do{
1319
+ b = buffer[pos];
1320
+ bytes.push(b);
1321
+ pos++;
1322
+ }while(b >= 128);
1323
+
1324
+ if(!flag){
1325
+ offset = pos;
1326
+ }
1327
+ return bytes;
1328
+ }
1329
+
1330
+ function peekBytes(){
1331
+ return getBytes(true);
1332
+ }
1333
+
1334
+ })('undefined' !== typeof protobuf ? protobuf : module.exports, this);
1335
+
1336
+
1337
+ });
1338
+ require.register("pinusnode-pinus-jsclient-websocket/lib/melo-client.js", function(exports, require, module){
1339
+ (function() {
1340
+ var JS_WS_CLIENT_TYPE = 'js-websocket';
1341
+ var JS_WS_CLIENT_VERSION = '0.0.1';
1342
+
1343
+ var Protocol = window.Protocol;
1344
+ var Package = Protocol.Package;
1345
+ var Message = Protocol.Message;
1346
+ var EventEmitter = window.EventEmitter;
1347
+
1348
+ var RES_OK = 200;
1349
+ var RES_FAIL = 500;
1350
+ var RES_OLD_CLIENT = 501;
1351
+
1352
+ if (typeof Object.create !== 'function') {
1353
+ Object.create = function (o) {
1354
+ function F() {}
1355
+ F.prototype = o;
1356
+ return new F();
1357
+ };
1358
+ }
1359
+
1360
+ var root = window;
1361
+ var melo = Object.create(EventEmitter.prototype); // object extend from object
1362
+ root.melo = melo;
1363
+ var socket = null;
1364
+ var reqId = 0;
1365
+ var callbacks = {};
1366
+ var handlers = {};
1367
+ //Map from request id to route
1368
+ var routeMap = {};
1369
+
1370
+ var heartbeatInterval = 0;
1371
+ var heartbeatTimeout = 0;
1372
+ var nextHeartbeatTimeout = 0;
1373
+ var gapThreshold = 100; // heartbeat gap threashold
1374
+ var heartbeatId = null;
1375
+ var heartbeatTimeoutId = null;
1376
+
1377
+ var handshakeCallback = null;
1378
+
1379
+ var handshakeBuffer = {
1380
+ 'sys': {
1381
+ type: JS_WS_CLIENT_TYPE,
1382
+ version: JS_WS_CLIENT_VERSION
1383
+ },
1384
+ 'user': {
1385
+ }
1386
+ };
1387
+
1388
+ var initCallback = null;
1389
+
1390
+ melo.init = function(params, cb){
1391
+ initCallback = cb;
1392
+ var host = params.host;
1393
+ var port = params.port;
1394
+
1395
+ var url = 'wss://' + host;
1396
+ if(port) {
1397
+ url += ':' + port;
1398
+ }
1399
+
1400
+ handshakeBuffer.user = params.user;
1401
+ handshakeCallback = params.handshakeCallback;
1402
+ initWebSocket(url, cb);
1403
+ };
1404
+
1405
+ var initWebSocket = function(url,cb) {
1406
+ console.log('connect to ' + url);
1407
+ var onopen = function(event){
1408
+ var obj = Package.encode(Package.TYPE_HANDSHAKE, Protocol.strencode(JSON.stringify(handshakeBuffer)));
1409
+ send(obj);
1410
+ };
1411
+ var onmessage = function(event) {
1412
+ processPackage(Package.decode(event.data), cb);
1413
+ // new package arrived, update the heartbeat timeout
1414
+ if(heartbeatTimeout) {
1415
+ nextHeartbeatTimeout = Date.now() + heartbeatTimeout;
1416
+ }
1417
+ };
1418
+ var onerror = function(event) {
1419
+ melo.emit('io-error', event);
1420
+ console.error('socket error: ', event);
1421
+ };
1422
+ var onclose = function(event){
1423
+ melo.emit('close',event);
1424
+ console.error('socket close: ', event);
1425
+ };
1426
+ socket = new WebSocket(url);
1427
+ socket.binaryType = 'arraybuffer';
1428
+ socket.onopen = onopen;
1429
+ socket.onmessage = onmessage;
1430
+ socket.onerror = onerror;
1431
+ socket.onclose = onclose;
1432
+ };
1433
+
1434
+ melo.disconnect = function() {
1435
+ if(socket) {
1436
+ if(socket.disconnect) socket.disconnect();
1437
+ if(socket.close) socket.close();
1438
+ console.log('disconnect');
1439
+ socket = null;
1440
+ }
1441
+
1442
+ if(heartbeatId) {
1443
+ clearTimeout(heartbeatId);
1444
+ heartbeatId = null;
1445
+ }
1446
+ if(heartbeatTimeoutId) {
1447
+ clearTimeout(heartbeatTimeoutId);
1448
+ heartbeatTimeoutId = null;
1449
+ }
1450
+ };
1451
+
1452
+ melo.request = function(route, msg, cb) {
1453
+ if(arguments.length === 2 && typeof msg === 'function') {
1454
+ cb = msg;
1455
+ msg = {};
1456
+ } else {
1457
+ msg = msg || {};
1458
+ }
1459
+ route = route || msg.route;
1460
+ if(!route) {
1461
+ return;
1462
+ }
1463
+
1464
+ reqId++;
1465
+ sendMessage(reqId, route, msg);
1466
+
1467
+ callbacks[reqId] = cb;
1468
+ routeMap[reqId] = route;
1469
+ };
1470
+
1471
+ melo.notify = function(route, msg) {
1472
+ msg = msg || {};
1473
+ sendMessage(0, route, msg);
1474
+ };
1475
+
1476
+ var sendMessage = function(reqId, route, msg) {
1477
+ var type = reqId ? Message.TYPE_REQUEST : Message.TYPE_NOTIFY;
1478
+
1479
+ //compress message by protobuf
1480
+ var protos = !!melo.data.protos?melo.data.protos.client:{};
1481
+ if(!!protos[route]){
1482
+ msg = protobuf.encode(route, msg);
1483
+ }else{
1484
+ msg = Protocol.strencode(JSON.stringify(msg));
1485
+ }
1486
+
1487
+
1488
+ var compressRoute = 0;
1489
+ if(melo.dict && melo.dict[route]){
1490
+ route = melo.dict[route];
1491
+ compressRoute = 1;
1492
+ }
1493
+
1494
+ msg = Message.encode(reqId, type, compressRoute, route, msg);
1495
+ var packet = Package.encode(Package.TYPE_DATA, msg);
1496
+ send(packet);
1497
+ };
1498
+
1499
+ var send = function(packet){
1500
+ socket.send(packet.buffer);
1501
+ };
1502
+
1503
+
1504
+ var handler = {};
1505
+
1506
+ var heartbeat = function(data) {
1507
+ if(!heartbeatInterval) {
1508
+ // no heartbeat
1509
+ return;
1510
+ }
1511
+
1512
+ var obj = Package.encode(Package.TYPE_HEARTBEAT);
1513
+ if(heartbeatTimeoutId) {
1514
+ clearTimeout(heartbeatTimeoutId);
1515
+ heartbeatTimeoutId = null;
1516
+ }
1517
+
1518
+ if(heartbeatId) {
1519
+ // already in a heartbeat interval
1520
+ return;
1521
+ }
1522
+
1523
+ heartbeatId = setTimeout(function() {
1524
+ heartbeatId = null;
1525
+ send(obj);
1526
+
1527
+ nextHeartbeatTimeout = Date.now() + heartbeatTimeout;
1528
+ heartbeatTimeoutId = setTimeout(heartbeatTimeoutCb, heartbeatTimeout);
1529
+ }, heartbeatInterval);
1530
+ };
1531
+
1532
+ var heartbeatTimeoutCb = function() {
1533
+ var gap = nextHeartbeatTimeout - Date.now();
1534
+ if(gap > gapThreshold) {
1535
+ heartbeatTimeoutId = setTimeout(heartbeatTimeoutCb, gap);
1536
+ } else {
1537
+ console.error('server heartbeat timeout');
1538
+ melo.emit('heartbeat timeout');
1539
+ melo.disconnect();
1540
+ }
1541
+ };
1542
+
1543
+ var handshake = function(data){
1544
+ data = JSON.parse(Protocol.strdecode(data));
1545
+ if(data.code === RES_OLD_CLIENT) {
1546
+ melo.emit('error', 'client version not fullfill');
1547
+ return;
1548
+ }
1549
+
1550
+ if(data.code !== RES_OK) {
1551
+ melo.emit('error', 'handshake fail');
1552
+ return;
1553
+ }
1554
+
1555
+ handshakeInit(data);
1556
+
1557
+ var obj = Package.encode(Package.TYPE_HANDSHAKE_ACK);
1558
+ send(obj);
1559
+ if(initCallback) {
1560
+ initCallback(socket);
1561
+ initCallback = null;
1562
+ }
1563
+ };
1564
+
1565
+ var onData = function(data){
1566
+ //probuff decode
1567
+ var msg = Message.decode(data);
1568
+
1569
+ if(msg.id > 0){
1570
+ msg.route = routeMap[msg.id];
1571
+ delete routeMap[msg.id];
1572
+ if(!msg.route){
1573
+ return;
1574
+ }
1575
+ }
1576
+
1577
+ msg.body = deCompose(msg);
1578
+
1579
+ processMessage(melo, msg);
1580
+ };
1581
+
1582
+ var onKick = function(data) {
1583
+ melo.emit('onKick');
1584
+ };
1585
+
1586
+ handlers[Package.TYPE_HANDSHAKE] = handshake;
1587
+ handlers[Package.TYPE_HEARTBEAT] = heartbeat;
1588
+ handlers[Package.TYPE_DATA] = onData;
1589
+ handlers[Package.TYPE_KICK] = onKick;
1590
+
1591
+ var processPackage = function(msg) {
1592
+ handlers[msg.type](msg.body);
1593
+ };
1594
+
1595
+ var processMessage = function(melo, msg) {
1596
+ if(!msg.id) {
1597
+ // server push message
1598
+ melo.emit(msg.route, msg.body);
1599
+ return;
1600
+ }
1601
+
1602
+ //if have a id then find the callback function with the request
1603
+ var cb = callbacks[msg.id];
1604
+
1605
+ delete callbacks[msg.id];
1606
+ if(typeof cb !== 'function') {
1607
+ return;
1608
+ }
1609
+
1610
+ cb(msg.body);
1611
+ return;
1612
+ };
1613
+
1614
+ var processMessageBatch = function(melo, msgs) {
1615
+ for(var i=0, l=msgs.length; i<l; i++) {
1616
+ processMessage(melo, msgs[i]);
1617
+ }
1618
+ };
1619
+
1620
+ var deCompose = function(msg){
1621
+ var protos = !!melo.data.protos?melo.data.protos.server:{};
1622
+ var abbrs = melo.data.abbrs;
1623
+ var route = msg.route;
1624
+
1625
+ //Decompose route from dict
1626
+ if(msg.compressRoute) {
1627
+ if(!abbrs[route]){
1628
+ return {};
1629
+ }
1630
+
1631
+ route = msg.route = abbrs[route];
1632
+ }
1633
+ if(!!protos[route]){
1634
+ return protobuf.decode(route, msg.body);
1635
+ }else{
1636
+ return JSON.parse(Protocol.strdecode(msg.body));
1637
+ }
1638
+
1639
+ return msg;
1640
+ };
1641
+
1642
+ var handshakeInit = function(data){
1643
+ if(data.sys && data.sys.heartbeat) {
1644
+ heartbeatInterval = data.sys.heartbeat * 1000; // heartbeat interval
1645
+ heartbeatTimeout = heartbeatInterval * 2; // max heartbeat timeout
1646
+ } else {
1647
+ heartbeatInterval = 0;
1648
+ heartbeatTimeout = 0;
1649
+ }
1650
+
1651
+ initData(data);
1652
+
1653
+ if(typeof handshakeCallback === 'function') {
1654
+ handshakeCallback(data.user);
1655
+ }
1656
+ };
1657
+
1658
+ //Initilize data used in melo client
1659
+ var initData = function(data){
1660
+ if(!data || !data.sys) {
1661
+ return;
1662
+ }
1663
+ melo.data = melo.data || {};
1664
+ var dict = data.sys.dict;
1665
+ var protos = data.sys.protos;
1666
+
1667
+ //Init compress dict
1668
+ if(dict){
1669
+ melo.data.dict = dict;
1670
+ melo.data.abbrs = {};
1671
+
1672
+ for(var route in dict){
1673
+ melo.data.abbrs[dict[route]] = route;
1674
+ }
1675
+ }
1676
+
1677
+ //Init protobuf protos
1678
+ if(protos){
1679
+ melo.data.protos = {
1680
+ server : protos.server || {},
1681
+ client : protos.client || {}
1682
+ };
1683
+ if(!!protobuf){
1684
+ protobuf.init({encoderProtos: protos.client, decoderProtos: protos.server});
1685
+ }
1686
+ }
1687
+ };
1688
+
1689
+ module.exports = melo;
1690
+ })();
1691
+
1692
+ });
1693
+ require.register("boot/index.js", function(exports, require, module){
1694
+ var Emitter = require('emitter');
1695
+ window.EventEmitter = Emitter;
1696
+
1697
+ var protocol = require('@bigtyphoon/melo-protocol');
1698
+ window.Protocol = protocol;
1699
+
1700
+ var protobuf = require('@bigtyphoon/melo-protobuf');
1701
+ window.protobuf = protobuf;
1702
+
1703
+ var melo = require('pinus-jsclient-websocket');
1704
+ window.melo = melo;
1705
+
1706
+ });
1707
+ require.alias("boot/index.js", "melo-client/deps/boot/index.js");
1708
+ require.alias("component-emitter/index.js", "boot/deps/emitter/index.js");
1709
+ require.alias("component-indexof/index.js", "component-emitter/deps/indexof/index.js");
1710
+
1711
+ require.alias("node-melo-melo-protocol/lib/protocol.js", "boot/deps/melo-protocol/lib/protocol.js");
1712
+ require.alias("node-melo-melo-protocol/lib/protocol.js", "boot/deps/melo-protocol/index.js");
1713
+ require.alias("node-melo-melo-protocol/lib/protocol.js", "node-melo-melo-protocol/index.js");
1714
+
1715
+ require.alias("melonode-melo-protobuf/lib/client/protobuf.js", "boot/deps/melo-protobuf/lib/client/protobuf.js");
1716
+ require.alias("melonode-melo-protobuf/lib/client/protobuf.js", "boot/deps/melo-protobuf/index.js");
1717
+ require.alias("melonode-melo-protobuf/lib/client/protobuf.js", "melonode-melo-protobuf/index.js");
1718
+
1719
+ require.alias("pinusnode-pinus-jsclient-websocket/lib/melo-client.js", "boot/deps/pinus-jsclient-websocket/lib/melo-client.js");
1720
+ require.alias("pinusnode-pinus-jsclient-websocket/lib/melo-client.js", "boot/deps/pinus-jsclient-websocket/index.js");
1721
+ require.alias("pinusnode-pinus-jsclient-websocket/lib/melo-client.js", "pinusnode-pinus-jsclient-websocket/index.js");