@moddable/pebbleproxy 0.1.0 → 0.1.3

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 (2) hide show
  1. package/package.json +1 -1
  2. package/proxy.js +71 -16
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@moddable/pebbleproxy",
3
- "version": "0.1.0",
3
+ "version": "0.1.3",
4
4
  "description": "Proxy network protocols for PebbleOS",
5
5
  "license": "LGPLv3",
6
6
  "main": "proxy.js",
package/proxy.js CHANGED
@@ -20,13 +20,15 @@
20
20
 
21
21
  console.log("moddable proxies launched");
22
22
 
23
+ const PROXY_VERSION = 1;
23
24
  const HTTP_BASE = 15000;
25
+ const READY_MESSAGE = 15025;
24
26
  const WS_BASE = 15050;
25
27
 
26
28
  const gHTTPRequests = new Map;
27
29
  const gWSRequests = new Map;
28
30
 
29
- function eventReceived(e) {
31
+ function appMessageReceived(e) {
30
32
  if (state.log) {
31
33
  console.log("moddable appmessage received");
32
34
 
@@ -49,7 +51,7 @@ function eventReceived(e) {
49
51
  httpMessage(id, e);
50
52
  }
51
53
  catch (error) {
52
- console.log("moddable pxoxy http exception" + error);
54
+ console.log("moddable proxy http exception" + error);
53
55
  }
54
56
  return true;
55
57
  }
@@ -60,7 +62,7 @@ function eventReceived(e) {
60
62
  wsMessage(id, e);
61
63
  }
62
64
  catch (error) {
63
- console.log("moddable pxoxy ws exception" + error);
65
+ console.log("moddable proxy ws exception" + error);
64
66
  }
65
67
  return true;
66
68
  }
@@ -68,6 +70,14 @@ function eventReceived(e) {
68
70
  return false;
69
71
  };
70
72
 
73
+ function readyReceived(e) {
74
+ if (state.log)
75
+ console.log("readyReceived")
76
+ sendAppMessage({
77
+ [READY_MESSAGE]: PROXY_VERSION
78
+ });
79
+ }
80
+
71
81
  function httpMessage(id, e) {
72
82
  if (state.log)
73
83
  console.log(" connection: " + id);
@@ -189,7 +199,7 @@ function httpMessage(id, e) {
189
199
  }
190
200
  request.xhr.onerror = function () {
191
201
  console.log("ON error!!!!")
192
- Pebble.sendAppMessage({
202
+ sendAppMessage({
193
203
  [HTTP_BASE + 1]: request.id,
194
204
  [HTTP_BASE + 9]: -1 // done. failure.
195
205
  });
@@ -250,22 +260,22 @@ function wsMessage(id, e) {
250
260
  request.ws = new WebSocket(url);
251
261
  request.ws.binaryType = "arraybuffer";
252
262
 
253
- request.ws.onopen = event => {
263
+ request.ws.onopen = ( )=> {
254
264
  if (state.log)
255
265
  console.log("websocket connected to host");
256
266
  request.state = "connected";
257
267
  request.messages = [];
258
268
  request.messages.sending = false;
259
- Pebble.sendAppMessage({
269
+ sendAppMessage({
260
270
  [WS_BASE + 1]: request.id,
261
271
  [WS_BASE + 2]: 0 // connected. success.
262
272
  });
263
273
  };
264
- request.ws.onerror = event => {
274
+ request.ws.onerror = () => {
265
275
  if (state.log)
266
276
  console.log("websocket connection failed");
267
277
  request.state = "error";
268
- Pebble.sendAppMessage({
278
+ sendAppMessage({
269
279
  [WS_BASE + 1]: request.id,
270
280
  [WS_BASE + 3]: -1 // disconnected error.
271
281
  });
@@ -283,11 +293,13 @@ function wsMessage(id, e) {
283
293
  console.log(`close code ${code} reason ${arrayToString(reason)}`);
284
294
  if (reason.byteLength)
285
295
  bytes.set(arrayToUint8Array(reason.slice(2)), 2);
286
- Pebble.sendAppMessage({
296
+ request.messages.push({
287
297
  [WS_BASE + 1]: request.id,
288
298
  [WS_BASE + 3]: 0, // disconnected clean.
289
299
  [WS_BASE + 10]: Array.from(bytes) // sendAppMessage wants an Array
290
300
  });
301
+ if (!request.messages.sending)
302
+ sendRequestMessage(request);
291
303
  };
292
304
  request.ws.onmessage = event => {
293
305
  let data = event.data; // either ArrayBuffer or String
@@ -379,6 +391,47 @@ function wsMessage(id, e) {
379
391
  }
380
392
  }
381
393
 
394
+ const sendQueue = [];
395
+ let sending = false;
396
+
397
+ function sendAppMessageSuccess() {
398
+ // console.log("sendAppMessageSuccess");
399
+ sending = false;
400
+ const sent = sendQueue.shift();
401
+ if (sent.success)
402
+ sent.success();
403
+ if (!sending && sendQueue.length) {
404
+ // console.log("Send from success");
405
+ sending = true;
406
+ Pebble.sendAppMessage(sendQueue[0].message, sendAppMessageSuccess, sendAppMessageFailure);
407
+ }
408
+ }
409
+
410
+ function sendAppMessageFailure() {
411
+ // console.log("sendAppMessageFailure");
412
+ sending = false;
413
+ const sent = sendQueue.shift();
414
+ if (sent.failure)
415
+ sent.failure();
416
+ if (!sending && sendQueue.length) {
417
+ // console.log("Send from failure");
418
+ sending = true;
419
+ Pebble.sendAppMessage(sendQueue[0].message, sendAppMessageSuccess, sendAppMessageFailure);
420
+ }
421
+ }
422
+
423
+ function sendAppMessage(message, success, failure) {
424
+ // console.log("sendAppMessage");
425
+ sendQueue.push({message, success, failure});
426
+ if (sending)
427
+ return;
428
+
429
+ // console.log("Send initial");
430
+ sending = true;
431
+ Pebble.sendAppMessage(sendQueue[0].message, sendAppMessageSuccess, sendAppMessageFailure);
432
+ }
433
+
434
+
382
435
  function sendRequestMessage(request) {
383
436
  if ("http" === request.kind)
384
437
  sendRequestMessageHTTP(request);
@@ -390,7 +443,7 @@ function sendRequestMessage(request) {
390
443
 
391
444
  function sendRequestMessageHTTP(request)
392
445
  {
393
- Pebble.sendAppMessage(
446
+ sendAppMessage(
394
447
  request.messages.shift(),
395
448
  function () {
396
449
  if (request.messages.length)
@@ -399,9 +452,9 @@ function sendRequestMessageHTTP(request)
399
452
  request.state = "done";
400
453
  },
401
454
  function () {
402
- console.log("message send FAILED");
455
+ console.log("http message send FAILED");
403
456
 
404
- Pebble.sendAppMessage({
457
+ sendAppMessage({
405
458
  [HTTP_BASE + 1]: request.id,
406
459
  [HTTP_BASE + 9]: -1 // done. failure.
407
460
  });
@@ -410,7 +463,7 @@ function sendRequestMessageHTTP(request)
410
463
  }
411
464
 
412
465
  function sendRequestMessageWS(request) {
413
- Pebble.sendAppMessage(
466
+ sendAppMessage(
414
467
  request.messages.shift(),
415
468
  function () {
416
469
  if (request.messages.length)
@@ -419,9 +472,9 @@ function sendRequestMessageWS(request) {
419
472
  request.messages.sending = false;
420
473
  },
421
474
  function (e) {
422
- console.log("message send FAILED " + JSON.stringify(e));
475
+ console.log("ws message send FAILED " + JSON.stringify(e));
423
476
 
424
- Pebble.sendAppMessage({
477
+ sendAppMessage({
425
478
  [WS_BASE + 1]: request.id,
426
479
  [WS_BASE + 3]: -1 // done. failure.
427
480
  });
@@ -472,7 +525,9 @@ function stringToArray(str) {
472
525
  }
473
526
 
474
527
  const state = {
475
- eventReceived,
528
+ appMessageReceived,
529
+ readyReceived,
530
+ sendAppMessage,
476
531
  log: false
477
532
  };
478
533