@supraio/client-daemon-js 1.0.0 → 1.1.0

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.
@@ -5462,7 +5462,7 @@ $packages["internal/race"] = (function() {
5462
5462
  return $pkg;
5463
5463
  })();
5464
5464
  $packages["sync/atomic"] = (function() {
5465
- var $pkg = {}, $init, js, Value, ptrType$5, CompareAndSwapInt32, CompareAndSwapUint32, CompareAndSwapUint64, CompareAndSwapPointer, AddInt32, LoadInt32, LoadUint32, LoadUint64, LoadPointer, StoreInt32, StoreUint32, StoreUint64, StorePointer, sameType;
5465
+ var $pkg = {}, $init, js, Value, Bool, Int64, noCopy, align64, ptrType, ptrType$2, ptrType$5, ptrType$6, ptrType$8, ptrType$12, b32, SwapInt64, SwapUint32, CompareAndSwapInt32, CompareAndSwapInt64, CompareAndSwapUint32, CompareAndSwapUint64, CompareAndSwapPointer, AddInt32, AddInt64, LoadInt32, LoadInt64, LoadUint32, LoadUint64, LoadPointer, StoreInt32, StoreInt64, StoreUint32, StoreUint64, StorePointer, sameType;
5466
5466
  js = $packages["github.com/gopherjs/gopherjs/js"];
5467
5467
  Value = $pkg.Value = $newType(0, $kindStruct, "atomic.Value", true, "sync/atomic", true, function(v_) {
5468
5468
  this.$val = this;
@@ -5472,7 +5472,137 @@ $packages["sync/atomic"] = (function() {
5472
5472
  }
5473
5473
  this.v = v_;
5474
5474
  });
5475
+ Bool = $pkg.Bool = $newType(0, $kindStruct, "atomic.Bool", true, "sync/atomic", true, function(_$0_, v_) {
5476
+ this.$val = this;
5477
+ if (arguments.length === 0) {
5478
+ this._$0 = new noCopy.ptr();
5479
+ this.v = 0;
5480
+ return;
5481
+ }
5482
+ this._$0 = _$0_;
5483
+ this.v = v_;
5484
+ });
5485
+ Int64 = $pkg.Int64 = $newType(0, $kindStruct, "atomic.Int64", true, "sync/atomic", true, function(_$0_, _$1_, v_) {
5486
+ this.$val = this;
5487
+ if (arguments.length === 0) {
5488
+ this._$0 = new noCopy.ptr();
5489
+ this._$1 = new align64.ptr();
5490
+ this.v = new $Int64(0, 0);
5491
+ return;
5492
+ }
5493
+ this._$0 = _$0_;
5494
+ this._$1 = _$1_;
5495
+ this.v = v_;
5496
+ });
5497
+ noCopy = $pkg.noCopy = $newType(0, $kindStruct, "atomic.noCopy", true, "sync/atomic", false, function() {
5498
+ this.$val = this;
5499
+ if (arguments.length === 0) {
5500
+ return;
5501
+ }
5502
+ });
5503
+ align64 = $pkg.align64 = $newType(0, $kindStruct, "atomic.align64", true, "sync/atomic", false, function() {
5504
+ this.$val = this;
5505
+ if (arguments.length === 0) {
5506
+ return;
5507
+ }
5508
+ });
5509
+ ptrType = $ptrType($Uint32);
5510
+ ptrType$2 = $ptrType($Int64);
5475
5511
  ptrType$5 = $ptrType(Value);
5512
+ ptrType$6 = $ptrType(Bool);
5513
+ ptrType$8 = $ptrType(Int64);
5514
+ ptrType$12 = $ptrType(noCopy);
5515
+ Bool.ptr.prototype.Load = function() {
5516
+ var x;
5517
+ x = this;
5518
+ return !((LoadUint32((x.$ptr_v || (x.$ptr_v = new ptrType(function() { return this.$target.v; }, function($v) { this.$target.v = $v; }, x)))) === 0));
5519
+ };
5520
+ Bool.prototype.Load = function() { return this.$val.Load(); };
5521
+ Bool.ptr.prototype.Store = function(val) {
5522
+ var val, x;
5523
+ x = this;
5524
+ StoreUint32((x.$ptr_v || (x.$ptr_v = new ptrType(function() { return this.$target.v; }, function($v) { this.$target.v = $v; }, x))), b32(val));
5525
+ };
5526
+ Bool.prototype.Store = function(val) { return this.$val.Store(val); };
5527
+ Bool.ptr.prototype.Swap = function(new$1) {
5528
+ var new$1, old, x;
5529
+ old = false;
5530
+ x = this;
5531
+ old = !((SwapUint32((x.$ptr_v || (x.$ptr_v = new ptrType(function() { return this.$target.v; }, function($v) { this.$target.v = $v; }, x))), b32(new$1)) === 0));
5532
+ return old;
5533
+ };
5534
+ Bool.prototype.Swap = function(new$1) { return this.$val.Swap(new$1); };
5535
+ Bool.ptr.prototype.CompareAndSwap = function(old, new$1) {
5536
+ var new$1, old, swapped, x;
5537
+ swapped = false;
5538
+ x = this;
5539
+ swapped = CompareAndSwapUint32((x.$ptr_v || (x.$ptr_v = new ptrType(function() { return this.$target.v; }, function($v) { this.$target.v = $v; }, x))), b32(old), b32(new$1));
5540
+ return swapped;
5541
+ };
5542
+ Bool.prototype.CompareAndSwap = function(old, new$1) { return this.$val.CompareAndSwap(old, new$1); };
5543
+ b32 = function(b) {
5544
+ var b;
5545
+ if (b) {
5546
+ return 1;
5547
+ }
5548
+ return 0;
5549
+ };
5550
+ Int64.ptr.prototype.Load = function() {
5551
+ var x;
5552
+ x = this;
5553
+ return LoadInt64((x.$ptr_v || (x.$ptr_v = new ptrType$2(function() { return this.$target.v; }, function($v) { this.$target.v = $v; }, x))));
5554
+ };
5555
+ Int64.prototype.Load = function() { return this.$val.Load(); };
5556
+ Int64.ptr.prototype.Store = function(val) {
5557
+ var val, x;
5558
+ x = this;
5559
+ StoreInt64((x.$ptr_v || (x.$ptr_v = new ptrType$2(function() { return this.$target.v; }, function($v) { this.$target.v = $v; }, x))), val);
5560
+ };
5561
+ Int64.prototype.Store = function(val) { return this.$val.Store(val); };
5562
+ Int64.ptr.prototype.Swap = function(new$1) {
5563
+ var new$1, old, x;
5564
+ old = new $Int64(0, 0);
5565
+ x = this;
5566
+ old = SwapInt64((x.$ptr_v || (x.$ptr_v = new ptrType$2(function() { return this.$target.v; }, function($v) { this.$target.v = $v; }, x))), new$1);
5567
+ return old;
5568
+ };
5569
+ Int64.prototype.Swap = function(new$1) { return this.$val.Swap(new$1); };
5570
+ Int64.ptr.prototype.CompareAndSwap = function(old, new$1) {
5571
+ var new$1, old, swapped, x;
5572
+ swapped = false;
5573
+ x = this;
5574
+ swapped = CompareAndSwapInt64((x.$ptr_v || (x.$ptr_v = new ptrType$2(function() { return this.$target.v; }, function($v) { this.$target.v = $v; }, x))), old, new$1);
5575
+ return swapped;
5576
+ };
5577
+ Int64.prototype.CompareAndSwap = function(old, new$1) { return this.$val.CompareAndSwap(old, new$1); };
5578
+ Int64.ptr.prototype.Add = function(delta) {
5579
+ var delta, new$1, x;
5580
+ new$1 = new $Int64(0, 0);
5581
+ x = this;
5582
+ new$1 = AddInt64((x.$ptr_v || (x.$ptr_v = new ptrType$2(function() { return this.$target.v; }, function($v) { this.$target.v = $v; }, x))), delta);
5583
+ return new$1;
5584
+ };
5585
+ Int64.prototype.Add = function(delta) { return this.$val.Add(delta); };
5586
+ noCopy.ptr.prototype.Lock = function() {
5587
+ };
5588
+ noCopy.prototype.Lock = function() { return this.$val.Lock(); };
5589
+ noCopy.ptr.prototype.Unlock = function() {
5590
+ };
5591
+ noCopy.prototype.Unlock = function() { return this.$val.Unlock(); };
5592
+ SwapInt64 = function(addr, new$1) {
5593
+ var addr, new$1, old;
5594
+ old = addr.$get();
5595
+ addr.$set(new$1);
5596
+ return old;
5597
+ };
5598
+ $pkg.SwapInt64 = SwapInt64;
5599
+ SwapUint32 = function(addr, new$1) {
5600
+ var addr, new$1, old;
5601
+ old = addr.$get();
5602
+ addr.$set(new$1);
5603
+ return old;
5604
+ };
5605
+ $pkg.SwapUint32 = SwapUint32;
5476
5606
  CompareAndSwapInt32 = function(addr, old, new$1) {
5477
5607
  var addr, new$1, old;
5478
5608
  if (addr.$get() === old) {
@@ -5482,6 +5612,15 @@ $packages["sync/atomic"] = (function() {
5482
5612
  return false;
5483
5613
  };
5484
5614
  $pkg.CompareAndSwapInt32 = CompareAndSwapInt32;
5615
+ CompareAndSwapInt64 = function(addr, old, new$1) {
5616
+ var addr, new$1, old, x;
5617
+ if ((x = addr.$get(), (x.$high === old.$high && x.$low === old.$low))) {
5618
+ addr.$set(new$1);
5619
+ return true;
5620
+ }
5621
+ return false;
5622
+ };
5623
+ $pkg.CompareAndSwapInt64 = CompareAndSwapInt64;
5485
5624
  CompareAndSwapUint32 = function(addr, old, new$1) {
5486
5625
  var addr, new$1, old;
5487
5626
  if (addr.$get() === old) {
@@ -5516,11 +5655,23 @@ $packages["sync/atomic"] = (function() {
5516
5655
  return new$1;
5517
5656
  };
5518
5657
  $pkg.AddInt32 = AddInt32;
5658
+ AddInt64 = function(addr, delta) {
5659
+ var addr, delta, new$1, x;
5660
+ new$1 = (x = addr.$get(), new $Int64(x.$high + delta.$high, x.$low + delta.$low));
5661
+ addr.$set(new$1);
5662
+ return new$1;
5663
+ };
5664
+ $pkg.AddInt64 = AddInt64;
5519
5665
  LoadInt32 = function(addr) {
5520
5666
  var addr;
5521
5667
  return addr.$get();
5522
5668
  };
5523
5669
  $pkg.LoadInt32 = LoadInt32;
5670
+ LoadInt64 = function(addr) {
5671
+ var addr;
5672
+ return addr.$get();
5673
+ };
5674
+ $pkg.LoadInt64 = LoadInt64;
5524
5675
  LoadUint32 = function(addr) {
5525
5676
  var addr;
5526
5677
  return addr.$get();
@@ -5541,6 +5692,11 @@ $packages["sync/atomic"] = (function() {
5541
5692
  addr.$set(val);
5542
5693
  };
5543
5694
  $pkg.StoreInt32 = StoreInt32;
5695
+ StoreInt64 = function(addr, val) {
5696
+ var addr, val;
5697
+ addr.$set(val);
5698
+ };
5699
+ $pkg.StoreInt64 = StoreInt64;
5544
5700
  StoreUint32 = function(addr, val) {
5545
5701
  var addr, val;
5546
5702
  addr.$set(val);
@@ -5617,7 +5773,14 @@ $packages["sync/atomic"] = (function() {
5617
5773
  return x.constructor === y.constructor;
5618
5774
  };
5619
5775
  ptrType$5.methods = [{prop: "Load", name: "Load", pkg: "", typ: $funcType([], [$emptyInterface], false)}, {prop: "Store", name: "Store", pkg: "", typ: $funcType([$emptyInterface], [], false)}, {prop: "Swap", name: "Swap", pkg: "", typ: $funcType([$emptyInterface], [$emptyInterface], false)}, {prop: "CompareAndSwap", name: "CompareAndSwap", pkg: "", typ: $funcType([$emptyInterface, $emptyInterface], [$Bool], false)}, {prop: "checkNew", name: "checkNew", pkg: "sync/atomic", typ: $funcType([$String, $emptyInterface], [], false)}];
5776
+ ptrType$6.methods = [{prop: "Load", name: "Load", pkg: "", typ: $funcType([], [$Bool], false)}, {prop: "Store", name: "Store", pkg: "", typ: $funcType([$Bool], [], false)}, {prop: "Swap", name: "Swap", pkg: "", typ: $funcType([$Bool], [$Bool], false)}, {prop: "CompareAndSwap", name: "CompareAndSwap", pkg: "", typ: $funcType([$Bool, $Bool], [$Bool], false)}];
5777
+ ptrType$8.methods = [{prop: "Load", name: "Load", pkg: "", typ: $funcType([], [$Int64], false)}, {prop: "Store", name: "Store", pkg: "", typ: $funcType([$Int64], [], false)}, {prop: "Swap", name: "Swap", pkg: "", typ: $funcType([$Int64], [$Int64], false)}, {prop: "CompareAndSwap", name: "CompareAndSwap", pkg: "", typ: $funcType([$Int64, $Int64], [$Bool], false)}, {prop: "Add", name: "Add", pkg: "", typ: $funcType([$Int64], [$Int64], false)}];
5778
+ ptrType$12.methods = [{prop: "Lock", name: "Lock", pkg: "", typ: $funcType([], [], false)}, {prop: "Unlock", name: "Unlock", pkg: "", typ: $funcType([], [], false)}];
5620
5779
  Value.init("sync/atomic", [{prop: "v", name: "v", embedded: false, exported: false, typ: $emptyInterface, tag: ""}]);
5780
+ Bool.init("sync/atomic", [{prop: "_$0", name: "_", embedded: false, exported: false, typ: noCopy, tag: ""}, {prop: "v", name: "v", embedded: false, exported: false, typ: $Uint32, tag: ""}]);
5781
+ Int64.init("sync/atomic", [{prop: "_$0", name: "_", embedded: false, exported: false, typ: noCopy, tag: ""}, {prop: "_$1", name: "_", embedded: false, exported: false, typ: align64, tag: ""}, {prop: "v", name: "v", embedded: false, exported: false, typ: $Int64, tag: ""}]);
5782
+ noCopy.init("", []);
5783
+ align64.init("", []);
5621
5784
  $init = function() {
5622
5785
  $pkg.$init = function() {};
5623
5786
  /* */ var $f, $c = false, $s = 0, $r; if (this !== undefined && this.$blk !== undefined) { $f = this; $c = true; $s = $f.$s; $r = $f.$r; } s: while (true) { switch ($s) { case 0:
@@ -17749,7 +17912,7 @@ $packages["math/bits"] = (function() {
17749
17912
  return $pkg;
17750
17913
  })();
17751
17914
  $packages["math"] = (function() {
17752
- var $pkg = {}, $init, js, bits, arrayType, arrayType$1, arrayType$2, structType, math, _zero, posInf, negInf, nan, buf, log2, Exp, Frexp, Inf, IsInf, IsNaN, Log, Log2, NaN, init, Float32bits, Float32frombits, Float64bits, Float64frombits, frexp, Round, normalize, Abs;
17915
+ var $pkg = {}, $init, js, bits, arrayType, arrayType$1, arrayType$2, structType, math, _zero, posInf, negInf, nan, buf, log2, Exp, Frexp, Inf, IsInf, IsNaN, Log, Log2, NaN, init, Float32bits, Float32frombits, Float64bits, Float64frombits, frexp, normalize, Abs;
17753
17916
  js = $packages["github.com/gopherjs/gopherjs/js"];
17754
17917
  bits = $packages["math/bits"];
17755
17918
  arrayType = $arrayType($Uint32, 2);
@@ -17884,23 +18047,6 @@ $packages["math"] = (function() {
17884
18047
  frac = Float64frombits(x);
17885
18048
  return [frac, exp$1];
17886
18049
  };
17887
- Round = function(x) {
17888
- var bits$1, e, x, x$1, x$2, x$3, x$4;
17889
- bits$1 = Float64bits(x);
17890
- e = ((($shiftRightUint64(bits$1, 52).$low >>> 0)) & 2047) >>> 0;
17891
- if (e < 1023) {
17892
- bits$1 = (x$1 = new $Uint64(2147483648, 0), new $Uint64(bits$1.$high & x$1.$high, (bits$1.$low & x$1.$low) >>> 0));
17893
- if (e === 1022) {
17894
- bits$1 = (x$2 = new $Uint64(1072693248, 0), new $Uint64(bits$1.$high | x$2.$high, (bits$1.$low | x$2.$low) >>> 0));
17895
- }
17896
- } else if (e < 1075) {
17897
- e = e - (1023) >>> 0;
17898
- bits$1 = (x$3 = $shiftRightUint64(new $Uint64(524288, 0), e), new $Uint64(bits$1.$high + x$3.$high, bits$1.$low + x$3.$low));
17899
- bits$1 = (x$4 = $shiftRightUint64(new $Uint64(1048575, 4294967295), e), new $Uint64(bits$1.$high & ~x$4.$high, (bits$1.$low & ~x$4.$low) >>> 0));
17900
- }
17901
- return Float64frombits(bits$1);
17902
- };
17903
- $pkg.Round = Round;
17904
18050
  normalize = function(x) {
17905
18051
  var _tmp, _tmp$1, _tmp$2, _tmp$3, exp$1, x, y;
17906
18052
  y = 0;
@@ -48708,7 +48854,7 @@ $packages["github.com/supraio/client-daemon/pkg/helper"] = (function() {
48708
48854
  _r$4 = $recv(signalChannel[0]); /* */ $s = 1; case 1: if($c) { $c = false; _r$4 = _r$4.$blk(); } if (_r$4 && _r$4.$blk !== undefined) { break s; }
48709
48855
  sig = _r$4[0];
48710
48856
  $r = log.Printf("Signal %s received (emulated after 1 week).\n", new sliceType$1([sig])); /* */ $s = 2; case 2: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
48711
- $s = -1; return;
48857
+ $s = -1; return sig;
48712
48858
  /* */ } return; } var $f = {$blk: WaitOnStopSignal, $c: true, $r, _r$4, sig, signalChannel, $s};return $f;
48713
48859
  };
48714
48860
  $pkg.WaitOnStopSignal = WaitOnStopSignal;
@@ -48746,9 +48892,6 @@ $packages["github.com/coder/websocket/internal/bpool"] = (function() {
48746
48892
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
48747
48893
  _r = bpool.Get(); /* */ $s = 1; case 1: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; }
48748
48894
  b = _r;
48749
- if ($interfaceIsEqual(b, $ifaceNil)) {
48750
- $s = -1; return new bytes.Buffer.ptr(sliceType$1.nil, 0, 0);
48751
- }
48752
48895
  $s = -1; return $assertType(b, ptrType);
48753
48896
  /* */ } return; } var $f = {$blk: Get, $c: true, $r, _r, b, $s};return $f;
48754
48897
  };
@@ -48764,7 +48907,9 @@ $packages["github.com/coder/websocket/internal/bpool"] = (function() {
48764
48907
  /* */ var $f, $c = false, $s = 0, $r; if (this !== undefined && this.$blk !== undefined) { $f = this; $c = true; $s = $f.$s; $r = $f.$r; } s: while (true) { switch ($s) { case 0:
48765
48908
  $r = bytes.$init(); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
48766
48909
  $r = sync.$init(); /* */ $s = 2; case 2: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
48767
- bpool = new sync.Pool.ptr(sliceType.nil, $throwNilPointerError);
48910
+ bpool = new sync.Pool.ptr(sliceType.nil, (function() {
48911
+ return new bytes.Buffer.ptr(sliceType$1.nil, 0, 0);
48912
+ }));
48768
48913
  /* */ } return; } if ($f === undefined) { $f = { $blk: $init }; } $f.$s = $s; $f.$r = $r; return $f;
48769
48914
  };
48770
48915
  $pkg.$init = $init;
@@ -48996,6 +49141,21 @@ $packages["github.com/coder/websocket/internal/wsjs"] = (function() {
48996
49141
  /* */ } return; } } catch(err) { $err = err; $s = -1; } finally { $callDeferred($deferred, $err); if (!$curGoroutine.asleep) { return err[0]; } if($curGoroutine.asleep) { var $f = {$blk: WebSocket.ptr.prototype.Close, $c: true, $r, $24r, _r, c, code, err, reason, $s, $deferred};return $f; } }
48997
49142
  };
48998
49143
  WebSocket.prototype.Close = function(code, reason) { return this.$val.Close(code, reason); };
49144
+ WebSocket.ptr.prototype.CloseNow = function() {
49145
+ var {$24r, _r, c, err, $s, $deferred, $r, $c} = $restore(this, {});
49146
+ /* */ $s = $s || 0; var $err = null; try { s: while (true) { switch ($s) { case 0: $deferred = []; $curGoroutine.deferStack.push($deferred);
49147
+ err = [err];
49148
+ err[0] = $ifaceNil;
49149
+ c = this;
49150
+ $deferred.push([handleJSError, [(err.$ptr || (err.$ptr = new ptrType(function() { return this.$target[0]; }, function($v) { this.$target[0] = $v; }, err))), $throwNilPointerError]]);
49151
+ _r = $clone(c.v, js.Value).Call("close", sliceType.nil); /* */ $s = 1; case 1: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; }
49152
+ _r;
49153
+ err[0] = err[0];
49154
+ $24r = err[0];
49155
+ $s = 2; case 2: return $24r;
49156
+ /* */ } return; } } catch(err) { $err = err; $s = -1; } finally { $callDeferred($deferred, $err); if (!$curGoroutine.asleep) { return err[0]; } if($curGoroutine.asleep) { var $f = {$blk: WebSocket.ptr.prototype.CloseNow, $c: true, $r, $24r, _r, c, err, $s, $deferred};return $f; } }
49157
+ };
49158
+ WebSocket.prototype.CloseNow = function() { return this.$val.CloseNow(); };
48999
49159
  WebSocket.ptr.prototype.SendText = function(v) {
49000
49160
  var {$24r, _r, c, err, v, $s, $deferred, $r, $c} = $restore(this, {v});
49001
49161
  /* */ $s = $s || 0; var $err = null; try { s: while (true) { switch ($s) { case 0: $deferred = []; $curGoroutine.deferStack.push($deferred);
@@ -49028,6 +49188,12 @@ $packages["github.com/coder/websocket/internal/wsjs"] = (function() {
49028
49188
  /* */ } return; } } catch(err) { $err = err; $s = -1; } finally { $callDeferred($deferred, $err); if (!$curGoroutine.asleep) { return err[0]; } if($curGoroutine.asleep) { var $f = {$blk: WebSocket.ptr.prototype.SendBytes, $c: true, $r, $24r, _arg, _r, _r$1, c, err, v, x, $s, $deferred};return $f; } }
49029
49189
  };
49030
49190
  WebSocket.prototype.SendBytes = function(v) { return this.$val.SendBytes(v); };
49191
+ WebSocket.ptr.prototype.BufferedAmount = function() {
49192
+ var c;
49193
+ c = this;
49194
+ return (new $Uint64(0, $clone($clone(c.v, js.Value).Get("bufferedAmount"), js.Value).Int()));
49195
+ };
49196
+ WebSocket.prototype.BufferedAmount = function() { return this.$val.BufferedAmount(); };
49031
49197
  extractArrayBuffer = function(arrayBuffer) {
49032
49198
  var {_r, arrayBuffer, dst, uint8Array$1, $s, $r, $c} = $restore(this, {arrayBuffer});
49033
49199
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
@@ -49047,7 +49213,7 @@ $packages["github.com/coder/websocket/internal/wsjs"] = (function() {
49047
49213
  $s = -1; return uint8Array$1;
49048
49214
  /* */ } return; } var $f = {$blk: uint8Array, $c: true, $r, _r, src, uint8Array$1, $s};return $f;
49049
49215
  };
49050
- WebSocket.methods = [{prop: "setBinaryType", name: "setBinaryType", pkg: "github.com/coder/websocket/internal/wsjs", typ: $funcType([$String], [], false)}, {prop: "addEventListener", name: "addEventListener", pkg: "github.com/coder/websocket/internal/wsjs", typ: $funcType([$String, funcType$1], [funcType], false)}, {prop: "OnClose", name: "OnClose", pkg: "", typ: $funcType([funcType$2], [funcType], false)}, {prop: "OnError", name: "OnError", pkg: "", typ: $funcType([funcType$1], [funcType], false)}, {prop: "OnMessage", name: "OnMessage", pkg: "", typ: $funcType([funcType$3], [funcType], false)}, {prop: "Subprotocol", name: "Subprotocol", pkg: "", typ: $funcType([], [$String], false)}, {prop: "OnOpen", name: "OnOpen", pkg: "", typ: $funcType([funcType$1], [funcType], false)}, {prop: "Close", name: "Close", pkg: "", typ: $funcType([$Int, $String], [$error], false)}, {prop: "SendText", name: "SendText", pkg: "", typ: $funcType([$String], [$error], false)}, {prop: "SendBytes", name: "SendBytes", pkg: "", typ: $funcType([sliceType$1], [$error], false)}];
49216
+ WebSocket.methods = [{prop: "setBinaryType", name: "setBinaryType", pkg: "github.com/coder/websocket/internal/wsjs", typ: $funcType([$String], [], false)}, {prop: "addEventListener", name: "addEventListener", pkg: "github.com/coder/websocket/internal/wsjs", typ: $funcType([$String, funcType$1], [funcType], false)}, {prop: "OnClose", name: "OnClose", pkg: "", typ: $funcType([funcType$2], [funcType], false)}, {prop: "OnError", name: "OnError", pkg: "", typ: $funcType([funcType$1], [funcType], false)}, {prop: "OnMessage", name: "OnMessage", pkg: "", typ: $funcType([funcType$3], [funcType], false)}, {prop: "Subprotocol", name: "Subprotocol", pkg: "", typ: $funcType([], [$String], false)}, {prop: "OnOpen", name: "OnOpen", pkg: "", typ: $funcType([funcType$1], [funcType], false)}, {prop: "Close", name: "Close", pkg: "", typ: $funcType([$Int, $String], [$error], false)}, {prop: "CloseNow", name: "CloseNow", pkg: "", typ: $funcType([], [$error], false)}, {prop: "SendText", name: "SendText", pkg: "", typ: $funcType([$String], [$error], false)}, {prop: "SendBytes", name: "SendBytes", pkg: "", typ: $funcType([sliceType$1], [$error], false)}, {prop: "BufferedAmount", name: "BufferedAmount", pkg: "", typ: $funcType([], [$Uint64], false)}];
49051
49217
  WebSocket.init("github.com/coder/websocket/internal/wsjs", [{prop: "v", name: "v", embedded: false, exported: false, typ: js.Value, tag: ""}]);
49052
49218
  CloseEvent.init("", [{prop: "Code", name: "Code", embedded: false, exported: true, typ: $Uint16, tag: ""}, {prop: "Reason", name: "Reason", embedded: false, exported: true, typ: $String, tag: ""}, {prop: "WasClean", name: "WasClean", embedded: false, exported: true, typ: $Bool, tag: ""}]);
49053
49219
  MessageEvent.init("", [{prop: "Data", name: "Data", embedded: false, exported: true, typ: $emptyInterface, tag: ""}]);
@@ -49060,71 +49226,6 @@ $packages["github.com/coder/websocket/internal/wsjs"] = (function() {
49060
49226
  $pkg.$init = $init;
49061
49227
  return $pkg;
49062
49228
  })();
49063
- $packages["runtime/debug"] = (function() {
49064
- var $pkg = {}, $init, fmt, os, runtime, sort, strconv, strings, time;
49065
- fmt = $packages["fmt"];
49066
- os = $packages["os"];
49067
- runtime = $packages["runtime"];
49068
- sort = $packages["sort"];
49069
- strconv = $packages["strconv"];
49070
- strings = $packages["strings"];
49071
- time = $packages["time"];
49072
- $init = function() {
49073
- $pkg.$init = function() {};
49074
- /* */ var $f, $c = false, $s = 0, $r; if (this !== undefined && this.$blk !== undefined) { $f = this; $c = true; $s = $f.$s; $r = $f.$r; } s: while (true) { switch ($s) { case 0:
49075
- $r = fmt.$init(); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
49076
- $r = os.$init(); /* */ $s = 2; case 2: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
49077
- $r = runtime.$init(); /* */ $s = 3; case 3: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
49078
- $r = sort.$init(); /* */ $s = 4; case 4: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
49079
- $r = strconv.$init(); /* */ $s = 5; case 5: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
49080
- $r = strings.$init(); /* */ $s = 6; case 6: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
49081
- $r = time.$init(); /* */ $s = 7; case 7: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
49082
- /* */ } return; } if ($f === undefined) { $f = { $blk: $init }; } $f.$s = $s; $f.$r = $r; return $f;
49083
- };
49084
- $pkg.$init = $init;
49085
- return $pkg;
49086
- })();
49087
- $packages["github.com/coder/websocket/internal/xsync"] = (function() {
49088
- var $pkg = {}, $init, fmt, debug, atomic, Int64, ptrType;
49089
- fmt = $packages["fmt"];
49090
- debug = $packages["runtime/debug"];
49091
- atomic = $packages["sync/atomic"];
49092
- Int64 = $pkg.Int64 = $newType(0, $kindStruct, "xsync.Int64", true, "github.com/coder/websocket/internal/xsync", true, function(i_) {
49093
- this.$val = this;
49094
- if (arguments.length === 0) {
49095
- this.i = new atomic.Value.ptr($ifaceNil);
49096
- return;
49097
- }
49098
- this.i = i_;
49099
- });
49100
- ptrType = $ptrType(Int64);
49101
- Int64.ptr.prototype.Load = function() {
49102
- var _tuple, i, v;
49103
- v = this;
49104
- _tuple = $assertType(v.i.Load(), $Int64, true);
49105
- i = _tuple[0];
49106
- return i;
49107
- };
49108
- Int64.prototype.Load = function() { return this.$val.Load(); };
49109
- Int64.ptr.prototype.Store = function(i) {
49110
- var i, v;
49111
- v = this;
49112
- v.i.Store(i);
49113
- };
49114
- Int64.prototype.Store = function(i) { return this.$val.Store(i); };
49115
- ptrType.methods = [{prop: "Load", name: "Load", pkg: "", typ: $funcType([], [$Int64], false)}, {prop: "Store", name: "Store", pkg: "", typ: $funcType([$Int64], [], false)}];
49116
- Int64.init("github.com/coder/websocket/internal/xsync", [{prop: "i", name: "i", embedded: false, exported: false, typ: atomic.Value, tag: ""}]);
49117
- $init = function() {
49118
- $pkg.$init = function() {};
49119
- /* */ var $f, $c = false, $s = 0, $r; if (this !== undefined && this.$blk !== undefined) { $f = this; $c = true; $s = $f.$s; $r = $f.$r; } s: while (true) { switch ($s) { case 0:
49120
- $r = fmt.$init(); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
49121
- $r = debug.$init(); /* */ $s = 2; case 2: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
49122
- $r = atomic.$init(); /* */ $s = 3; case 3: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
49123
- /* */ } return; } if ($f === undefined) { $f = { $blk: $init }; } $f.$s = $s; $f.$r = $r; return $f;
49124
- };
49125
- $pkg.$init = $init;
49126
- return $pkg;
49127
- })();
49128
49229
  $packages["internal/nettrace"] = (function() {
49129
49230
  var $pkg = {}, $init, TraceKey, LookupIPAltResolverKey, Trace, funcType, sliceType, funcType$1, funcType$2, funcType$3;
49130
49231
  TraceKey = $pkg.TraceKey = $newType(0, $kindStruct, "nettrace.TraceKey", true, "internal/nettrace", true, function() {
@@ -159887,7 +159988,7 @@ $packages["net/http"] = (function() {
159887
159988
  return $pkg;
159888
159989
  })();
159889
159990
  $packages["github.com/coder/websocket"] = (function() {
159890
- var $pkg = {}, $init, bytes, context, binary, errors, fmt, bpool, wsjs, xsync, io, math, bits, net, http, reflect, runtime, strconv, strings, sync, atomic, js, time, Conn, DialOptions, writer, StatusCode, CloseError, MessageType, noCopy, ptrType, sliceType, structType, funcType, sliceType$1, ptrType$3, ptrType$4, sliceType$2, funcType$1, arrayType, sliceType$3, ptrType$5, ptrType$6, ptrType$7, chanType, ptrType$9, ptrType$10, _MessageType_index, _StatusCode_index, Dial, dial;
159991
+ var $pkg = {}, $init, bytes, context, binary, errors, fmt, bpool, wsjs, io, math, bits, net, http, reflect, runtime, strconv, strings, sync, atomic, js, time, Conn, DialOptions, writer, StatusCode, CloseError, MessageType, noCopy, ptrType, sliceType, structType, funcType, sliceType$1, ptrType$3, ptrType$4, sliceType$2, funcType$1, arrayType, sliceType$3, ptrType$5, ptrType$6, ptrType$7, chanType, ptrType$8, ptrType$9, _MessageType_index, _StatusCode_index, Dial, dial;
159891
159992
  bytes = $packages["bytes"];
159892
159993
  context = $packages["context"];
159893
159994
  binary = $packages["encoding/binary"];
@@ -159895,7 +159996,6 @@ $packages["github.com/coder/websocket"] = (function() {
159895
159996
  fmt = $packages["fmt"];
159896
159997
  bpool = $packages["github.com/coder/websocket/internal/bpool"];
159897
159998
  wsjs = $packages["github.com/coder/websocket/internal/wsjs"];
159898
- xsync = $packages["github.com/coder/websocket/internal/xsync"];
159899
159999
  io = $packages["io"];
159900
160000
  math = $packages["math"];
159901
160001
  bits = $packages["math/bits"];
@@ -159909,12 +160009,12 @@ $packages["github.com/coder/websocket"] = (function() {
159909
160009
  atomic = $packages["sync/atomic"];
159910
160010
  js = $packages["syscall/js"];
159911
160011
  time = $packages["time"];
159912
- Conn = $pkg.Conn = $newType(0, $kindStruct, "websocket.Conn", true, "github.com/coder/websocket", true, function(noCopy_, ws_, msgReadLimit_, closeReadMu_, closeReadCtx_, closingMu_, closeOnce_, closed_, closeErrOnce_, closeErr_, closeWasClean_, releaseOnClose_, releaseOnError_, releaseOnMessage_, readSignal_, readBufMu_, readBuf_) {
160012
+ Conn = $pkg.Conn = $newType(0, $kindStruct, "websocket.Conn", true, "github.com/coder/websocket", true, function(noCopy_, ws_, msgReadLimit_, closeReadMu_, closeReadCtx_, closingMu_, closeOnce_, closed_, closeErrOnce_, closeErr_, closeWasClean_, releaseOnce_, releaseOnClose_, releaseOnError_, releaseOnMessage_, readSignal_, readBufMu_, readBuf_) {
159913
160013
  this.$val = this;
159914
160014
  if (arguments.length === 0) {
159915
160015
  this.noCopy = new noCopy.ptr();
159916
160016
  this.ws = new wsjs.WebSocket.ptr(new js.Value.ptr(null, false, arrayType.zero()));
159917
- this.msgReadLimit = new xsync.Int64.ptr(new atomic.Value.ptr($ifaceNil));
160017
+ this.msgReadLimit = new atomic.Int64.ptr(new atomic.noCopy.ptr(), new atomic.align64.ptr(), new $Int64(0, 0));
159918
160018
  this.closeReadMu = new sync.Mutex.ptr(0, 0);
159919
160019
  this.closeReadCtx = $ifaceNil;
159920
160020
  this.closingMu = new sync.Mutex.ptr(0, 0);
@@ -159923,6 +160023,7 @@ $packages["github.com/coder/websocket"] = (function() {
159923
160023
  this.closeErrOnce = new sync.Once.ptr(0, new sync.Mutex.ptr(0, 0));
159924
160024
  this.closeErr = $ifaceNil;
159925
160025
  this.closeWasClean = false;
160026
+ this.releaseOnce = new sync.Once.ptr(0, new sync.Mutex.ptr(0, 0));
159926
160027
  this.releaseOnClose = $throwNilPointerError;
159927
160028
  this.releaseOnError = $throwNilPointerError;
159928
160029
  this.releaseOnMessage = $throwNilPointerError;
@@ -159942,6 +160043,7 @@ $packages["github.com/coder/websocket"] = (function() {
159942
160043
  this.closeErrOnce = closeErrOnce_;
159943
160044
  this.closeErr = closeErr_;
159944
160045
  this.closeWasClean = closeWasClean_;
160046
+ this.releaseOnce = releaseOnce_;
159945
160047
  this.releaseOnClose = releaseOnClose_;
159946
160048
  this.releaseOnError = releaseOnError_;
159947
160049
  this.releaseOnMessage = releaseOnMessage_;
@@ -160006,8 +160108,8 @@ $packages["github.com/coder/websocket"] = (function() {
160006
160108
  ptrType$6 = $ptrType($packages["crypto/tls"].ConnectionState);
160007
160109
  ptrType$7 = $ptrType(bytes.Buffer);
160008
160110
  chanType = $chanType(structType, false, false);
160009
- ptrType$9 = $ptrType(writer);
160010
- ptrType$10 = $ptrType(noCopy);
160111
+ ptrType$8 = $ptrType(writer);
160112
+ ptrType$9 = $ptrType(noCopy);
160011
160113
  Conn.ptr.prototype.close = function(err, wasClean) {
160012
160114
  var {c, err, wasClean, $s, $r, $c} = $restore(this, {err, wasClean});
160013
160115
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
@@ -160048,9 +160150,7 @@ $packages["github.com/coder/websocket"] = (function() {
160048
160150
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
160049
160151
  err = new CloseError.ptr(((e.Code >> 0)), e.Reason);
160050
160152
  $r = c[0].close(new err.constructor.elem(err), e.WasClean); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
160051
- $r = c[0].releaseOnClose(); /* */ $s = 2; case 2: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
160052
- $r = c[0].releaseOnError(); /* */ $s = 3; case 3: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
160053
- $r = c[0].releaseOnMessage(); /* */ $s = 4; case 4: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
160153
+ $r = c[0].releaseEventHandlers(); /* */ $s = 2; case 2: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
160054
160154
  $s = -1; return;
160055
160155
  /* */ } return; } var $f = {$blk: $b, $c: true, $r, e, err, $s};return $f;
160056
160156
  }; })(c)); /* */ $s = 1; case 1: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; }
@@ -160058,8 +160158,7 @@ $packages["github.com/coder/websocket"] = (function() {
160058
160158
  _r$1 = $clone(c[0].ws, wsjs.WebSocket).OnError((function(c) { return function $b(v) {
160059
160159
  var {v, $s, $r, $c} = $restore(this, {v});
160060
160160
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
160061
- $r = c[0].setCloseErr(errors.New($clone($clone(v, js.Value).Get("message"), js.Value).String())); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
160062
- $r = c[0].closeWithInternal(); /* */ $s = 2; case 2: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
160161
+ $r = c[0].abort(errors.New($clone($clone(v, js.Value).Get("message"), js.Value).String())); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
160063
160162
  $s = -1; return;
160064
160163
  /* */ } return; } var $f = {$blk: $b, $c: true, $r, v, $s};return $f;
160065
160164
  }; })(c)); /* */ $s = 2; case 2: if($c) { $c = false; _r$1 = _r$1.$blk(); } if (_r$1 && _r$1.$blk !== undefined) { break s; }
@@ -160090,18 +160189,47 @@ $packages["github.com/coder/websocket"] = (function() {
160090
160189
  /* */ } return; } var $f = {$blk: Conn.ptr.prototype.init, $c: true, $r, _r, _r$1, _r$2, c, $s};return $f;
160091
160190
  };
160092
160191
  Conn.prototype.init = function() { return this.$val.init(); };
160192
+ Conn.ptr.prototype.releaseEventHandlers = function() {
160193
+ var {c, $s, $r, $c} = $restore(this, {});
160194
+ /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
160195
+ c = [c];
160196
+ c[0] = this;
160197
+ $r = c[0].releaseOnce.Do((function(c) { return function $b() {
160198
+ var {$s, $r, $c} = $restore(this, {});
160199
+ /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
160200
+ $r = c[0].releaseOnClose(); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
160201
+ $r = c[0].releaseOnError(); /* */ $s = 2; case 2: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
160202
+ $r = c[0].releaseOnMessage(); /* */ $s = 3; case 3: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
160203
+ $s = -1; return;
160204
+ /* */ } return; } var $f = {$blk: $b, $c: true, $r, $s};return $f;
160205
+ }; })(c)); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
160206
+ $s = -1; return;
160207
+ /* */ } return; } var $f = {$blk: Conn.ptr.prototype.releaseEventHandlers, $c: true, $r, c, $s};return $f;
160208
+ };
160209
+ Conn.prototype.releaseEventHandlers = function() { return this.$val.releaseEventHandlers(); };
160210
+ Conn.ptr.prototype.abort = function(err) {
160211
+ var {_r, c, err, $s, $r, $c} = $restore(this, {err});
160212
+ /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
160213
+ c = this;
160214
+ $r = c.close(err, false); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
160215
+ $r = c.releaseEventHandlers(); /* */ $s = 2; case 2: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
160216
+ _r = $clone(c.ws, wsjs.WebSocket).CloseNow(); /* */ $s = 3; case 3: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; }
160217
+ $unused(_r);
160218
+ $s = -1; return;
160219
+ /* */ } return; } var $f = {$blk: Conn.ptr.prototype.abort, $c: true, $r, _r, c, err, $s};return $f;
160220
+ };
160221
+ Conn.prototype.abort = function(err) { return this.$val.abort(err); };
160093
160222
  Conn.ptr.prototype.closeWithInternal = function() {
160094
- var {_r, c, $s, $r, $c} = $restore(this, {});
160223
+ var {c, $s, $r, $c} = $restore(this, {});
160095
160224
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
160096
160225
  c = this;
160097
- _r = c.Close(1011, "something went wrong"); /* */ $s = 1; case 1: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; }
160098
- _r;
160226
+ $r = c.abort(errors.New("something went wrong")); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
160099
160227
  $s = -1; return;
160100
- /* */ } return; } var $f = {$blk: Conn.ptr.prototype.closeWithInternal, $c: true, $r, _r, c, $s};return $f;
160228
+ /* */ } return; } var $f = {$blk: Conn.ptr.prototype.closeWithInternal, $c: true, $r, c, $s};return $f;
160101
160229
  };
160102
160230
  Conn.prototype.closeWithInternal = function() { return this.$val.closeWithInternal(); };
160103
160231
  Conn.ptr.prototype.Read = function(ctx) {
160104
- var {$24r, _arg, _r, _r$1, _r$2, _r$3, _r$4, _tuple, c, closedRead, ctx, err, err$1, p, readLimit, typ, x, $s, $r, $c} = $restore(this, {ctx});
160232
+ var {$24r, $24r$1, _arg, _r, _r$1, _r$2, _r$3, _r$4, _r$5, _tuple, c, closedRead, ctx, err, p, readLimit, reason, typ, x, $s, $r, $c} = $restore(this, {ctx});
160105
160233
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
160106
160234
  c = this;
160107
160235
  $r = c.closeReadMu.Lock(); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
@@ -160126,16 +160254,18 @@ $packages["github.com/coder/websocket"] = (function() {
160126
160254
  /* */ if ((readLimit.$high > 0 || (readLimit.$high === 0 && readLimit.$low >= 0)) && (x = (new $Int64(0, p.$length)), (x.$high > readLimit.$high || (x.$high === readLimit.$high && x.$low > readLimit.$low)))) { $s = 8; continue; }
160127
160255
  /* */ $s = 9; continue;
160128
160256
  /* if ((readLimit.$high > 0 || (readLimit.$high === 0 && readLimit.$low >= 0)) && (x = (new $Int64(0, p.$length)), (x.$high > readLimit.$high || (x.$high === readLimit.$high && x.$low > readLimit.$low)))) { */ case 8:
160129
- _r$2 = fmt.Errorf("read limited at %v bytes", new sliceType([c.msgReadLimit.Load()])); /* */ $s = 10; case 10: if($c) { $c = false; _r$2 = _r$2.$blk(); } if (_r$2 && _r$2.$blk !== undefined) { break s; }
160130
- err$1 = _r$2;
160131
- _r$3 = err$1.Error(); /* */ $s = 11; case 11: if($c) { $c = false; _r$3 = _r$3.$blk(); } if (_r$3 && _r$3.$blk !== undefined) { break s; }
160257
+ _r$2 = fmt.Errorf("read limited at %d bytes", new sliceType([c.msgReadLimit.Load()])); /* */ $s = 10; case 10: if($c) { $c = false; _r$2 = _r$2.$blk(); } if (_r$2 && _r$2.$blk !== undefined) { break s; }
160258
+ reason = _r$2;
160259
+ _r$3 = reason.Error(); /* */ $s = 11; case 11: if($c) { $c = false; _r$3 = _r$3.$blk(); } if (_r$3 && _r$3.$blk !== undefined) { break s; }
160132
160260
  _arg = _r$3;
160133
160261
  _r$4 = c.Close(1009, _arg); /* */ $s = 12; case 12: if($c) { $c = false; _r$4 = _r$4.$blk(); } if (_r$4 && _r$4.$blk !== undefined) { break s; }
160134
160262
  _r$4;
160135
- $s = -1; return [0, sliceType$1.nil, err$1];
160263
+ _r$5 = fmt.Errorf("%w: %v", new sliceType([$pkg.ErrMessageTooBig, reason])); /* */ $s = 13; case 13: if($c) { $c = false; _r$5 = _r$5.$blk(); } if (_r$5 && _r$5.$blk !== undefined) { break s; }
160264
+ $24r$1 = [0, sliceType$1.nil, _r$5];
160265
+ $s = 14; case 14: return $24r$1;
160136
160266
  /* } */ case 9:
160137
160267
  $s = -1; return [typ, p, $ifaceNil];
160138
- /* */ } return; } var $f = {$blk: Conn.ptr.prototype.Read, $c: true, $r, $24r, _arg, _r, _r$1, _r$2, _r$3, _r$4, _tuple, c, closedRead, ctx, err, err$1, p, readLimit, typ, x, $s};return $f;
160268
+ /* */ } return; } var $f = {$blk: Conn.ptr.prototype.Read, $c: true, $r, $24r, $24r$1, _arg, _r, _r$1, _r$2, _r$3, _r$4, _r$5, _tuple, c, closedRead, ctx, err, p, readLimit, reason, typ, x, $s};return $f;
160139
160269
  };
160140
160270
  Conn.prototype.Read = function(ctx) { return this.$val.Read(ctx); };
160141
160271
  Conn.ptr.prototype.read = function(ctx) {
@@ -160205,7 +160335,7 @@ $packages["github.com/coder/websocket"] = (function() {
160205
160335
  var {_r, _r$1, c, ctx, err, err$1, p, typ, $s, $r, $c} = $restore(this, {ctx, typ, p});
160206
160336
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
160207
160337
  c = this;
160208
- _r = c.write(ctx, typ, p); /* */ $s = 1; case 1: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; }
160338
+ _r = c.write(typ, p); /* */ $s = 1; case 1: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; }
160209
160339
  err = _r;
160210
160340
  /* */ if (!($interfaceIsEqual(err, $ifaceNil))) { $s = 2; continue; }
160211
160341
  /* */ $s = 3; continue;
@@ -160220,8 +160350,8 @@ $packages["github.com/coder/websocket"] = (function() {
160220
160350
  /* */ } return; } var $f = {$blk: Conn.ptr.prototype.Write, $c: true, $r, _r, _r$1, c, ctx, err, err$1, p, typ, $s};return $f;
160221
160351
  };
160222
160352
  Conn.prototype.Write = function(ctx, typ, p) { return this.$val.Write(ctx, typ, p); };
160223
- Conn.ptr.prototype.write = function(ctx, typ, p) {
160224
- var {$24r, $24r$1, $24r$2, _1, _r, _r$1, _r$2, c, ctx, p, typ, $s, $r, $c} = $restore(this, {ctx, typ, p});
160353
+ Conn.ptr.prototype.write = function(typ, p) {
160354
+ var {$24r, $24r$1, $24r$2, _1, _r, _r$1, _r$2, c, p, typ, $s, $r, $c} = $restore(this, {typ, p});
160225
160355
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
160226
160356
  c = this;
160227
160357
  if (c.isClosed()) {
@@ -160246,9 +160376,9 @@ $packages["github.com/coder/websocket"] = (function() {
160246
160376
  /* } */ case 5:
160247
160377
  case 1:
160248
160378
  $s = -1; return $ifaceNil;
160249
- /* */ } return; } var $f = {$blk: Conn.ptr.prototype.write, $c: true, $r, $24r, $24r$1, $24r$2, _1, _r, _r$1, _r$2, c, ctx, p, typ, $s};return $f;
160379
+ /* */ } return; } var $f = {$blk: Conn.ptr.prototype.write, $c: true, $r, $24r, $24r$1, $24r$2, _1, _r, _r$1, _r$2, c, p, typ, $s};return $f;
160250
160380
  };
160251
- Conn.prototype.write = function(ctx, typ, p) { return this.$val.write(ctx, typ, p); };
160381
+ Conn.prototype.write = function(typ, p) { return this.$val.write(typ, p); };
160252
160382
  Conn.ptr.prototype.Close = function(code, reason) {
160253
160383
  var {$24r, _r, _r$1, c, code, err, reason, $s, $r, $c} = $restore(this, {code, reason});
160254
160384
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
@@ -160267,13 +160397,16 @@ $packages["github.com/coder/websocket"] = (function() {
160267
160397
  };
160268
160398
  Conn.prototype.Close = function(code, reason) { return this.$val.Close(code, reason); };
160269
160399
  Conn.ptr.prototype.CloseNow = function() {
160270
- var {$24r, _r, c, $s, $r, $c} = $restore(this, {});
160400
+ var {_r, c, x, $s, $r, $c} = $restore(this, {});
160271
160401
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
160272
160402
  c = this;
160273
- _r = c.Close(1001, ""); /* */ $s = 1; case 1: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; }
160274
- $24r = _r;
160275
- $s = 2; case 2: return $24r;
160276
- /* */ } return; } var $f = {$blk: Conn.ptr.prototype.CloseNow, $c: true, $r, $24r, _r, c, $s};return $f;
160403
+ if (c.isClosed()) {
160404
+ $s = -1; return net.ErrClosed;
160405
+ }
160406
+ _r = fmt.Errorf("sent close: %w", new sliceType([(x = new CloseError.ptr(1001, ""), new x.constructor.elem(x))])); /* */ $s = 1; case 1: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; }
160407
+ $r = c.abort(_r); /* */ $s = 2; case 2: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
160408
+ $s = -1; return $ifaceNil;
160409
+ /* */ } return; } var $f = {$blk: Conn.ptr.prototype.CloseNow, $c: true, $r, _r, c, x, $s};return $f;
160277
160410
  };
160278
160411
  Conn.prototype.CloseNow = function() { return this.$val.CloseNow(); };
160279
160412
  Conn.ptr.prototype.exportedClose = function(code, reason) {
@@ -160296,19 +160429,20 @@ $packages["github.com/coder/websocket"] = (function() {
160296
160429
  /* */ if (!($interfaceIsEqual(err, $ifaceNil))) { $s = 8; continue; }
160297
160430
  /* */ $s = 9; continue;
160298
160431
  /* if (!($interfaceIsEqual(err, $ifaceNil))) { */ case 8:
160432
+ $r = c.abort(ce); /* */ $s = 10; case 10: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
160299
160433
  $24r$1 = err;
160300
- $s = 10; case 10: return $24r$1;
160434
+ $s = 11; case 11: return $24r$1;
160301
160435
  /* } */ case 9:
160302
- _r$2 = $recv(c.closed); /* */ $s = 11; case 11: if($c) { $c = false; _r$2 = _r$2.$blk(); } if (_r$2 && _r$2.$blk !== undefined) { break s; }
160436
+ _r$2 = $recv(c.closed); /* */ $s = 12; case 12: if($c) { $c = false; _r$2 = _r$2.$blk(); } if (_r$2 && _r$2.$blk !== undefined) { break s; }
160303
160437
  _r$2[0];
160304
- /* */ if (!c.closeWasClean) { $s = 12; continue; }
160305
- /* */ $s = 13; continue;
160306
- /* if (!c.closeWasClean) { */ case 12:
160438
+ /* */ if (!c.closeWasClean) { $s = 13; continue; }
160439
+ /* */ $s = 14; continue;
160440
+ /* if (!c.closeWasClean) { */ case 13:
160307
160441
  $24r$2 = c.closeErr;
160308
- $s = 14; case 14: return $24r$2;
160309
- /* } */ case 13:
160442
+ $s = 15; case 15: return $24r$2;
160443
+ /* } */ case 14:
160310
160444
  $24r$3 = $ifaceNil;
160311
- $s = 15; case 15: return $24r$3;
160445
+ $s = 16; case 16: return $24r$3;
160312
160446
  /* */ } return; } } catch(err) { $err = err; $s = -1; return $ifaceNil; } finally { $callDeferred($deferred, $err); if($curGoroutine.asleep) { var $f = {$blk: Conn.ptr.prototype.exportedClose, $c: true, $r, $24r, $24r$1, $24r$2, $24r$3, _r, _r$1, _r$2, c, ce, code, err, reason, x, $s, $deferred};return $f; } }
160313
160447
  };
160314
160448
  Conn.prototype.exportedClose = function(code, reason) { return this.$val.exportedClose(code, reason); };
@@ -160356,12 +160490,15 @@ $packages["github.com/coder/websocket"] = (function() {
160356
160490
  $24r = [ptrType.nil, ptrType$3.nil, err];
160357
160491
  $s = 4; case 4: return $24r;
160358
160492
  /* } */ case 3:
160359
- c = new Conn.ptr(new noCopy.ptr(), $clone(ws, wsjs.WebSocket), new xsync.Int64.ptr(new atomic.Value.ptr($ifaceNil)), new sync.Mutex.ptr(0, 0), $ifaceNil, new sync.Mutex.ptr(0, 0), new sync.Once.ptr(0, new sync.Mutex.ptr(0, 0)), $chanNil, new sync.Once.ptr(0, new sync.Mutex.ptr(0, 0)), $ifaceNil, false, $throwNilPointerError, $throwNilPointerError, $throwNilPointerError, $chanNil, new sync.Mutex.ptr(0, 0), sliceType$3.nil);
160493
+ c = new Conn.ptr(new noCopy.ptr(), $clone(ws, wsjs.WebSocket), new atomic.Int64.ptr(new atomic.noCopy.ptr(), new atomic.align64.ptr(), new $Int64(0, 0)), new sync.Mutex.ptr(0, 0), $ifaceNil, new sync.Mutex.ptr(0, 0), new sync.Once.ptr(0, new sync.Mutex.ptr(0, 0)), $chanNil, new sync.Once.ptr(0, new sync.Mutex.ptr(0, 0)), $ifaceNil, false, new sync.Once.ptr(0, new sync.Mutex.ptr(0, 0)), $throwNilPointerError, $throwNilPointerError, $throwNilPointerError, $chanNil, new sync.Mutex.ptr(0, 0), sliceType$3.nil);
160360
160494
  $r = c.init(); /* */ $s = 5; case 5: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
160361
160495
  opench[0] = new $Chan(structType, 0);
160362
- _r$1 = $clone(ws, wsjs.WebSocket).OnOpen((function(opench) { return function(e) {
160363
- var e;
160364
- $close(opench[0]);
160496
+ _r$1 = $clone(ws, wsjs.WebSocket).OnOpen((function(opench) { return function $b(e) {
160497
+ var {e, $s, $r, $c} = $restore(this, {e});
160498
+ /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
160499
+ $r = $send(opench[0], $clone($clone(new structType.ptr(), structType), structType)); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
160500
+ $s = -1; return;
160501
+ /* */ } return; } var $f = {$blk: $b, $c: true, $r, e, $s};return $f;
160365
160502
  }; })(opench)); /* */ $s = 6; case 6: if($c) { $c = false; _r$1 = _r$1.$blk(); } if (_r$1 && _r$1.$blk !== undefined) { break s; }
160366
160503
  releaseOpen = _r$1;
160367
160504
  $deferred.push([releaseOpen, []]);
@@ -160373,17 +160510,17 @@ $packages["github.com/coder/websocket"] = (function() {
160373
160510
  /* */ if (_selection[0] === 2) { $s = 11; continue; }
160374
160511
  /* */ $s = 12; continue;
160375
160512
  /* if (_selection[0] === 0) { */ case 9:
160376
- _r$4 = c.Close(1008, "dial timed out"); /* */ $s = 13; case 13: if($c) { $c = false; _r$4 = _r$4.$blk(); } if (_r$4 && _r$4.$blk !== undefined) { break s; }
160377
- _r$4;
160378
- _r$5 = ctx.Err(); /* */ $s = 14; case 14: if($c) { $c = false; _r$5 = _r$5.$blk(); } if (_r$5 && _r$5.$blk !== undefined) { break s; }
160513
+ _r$4 = ctx.Err(); /* */ $s = 13; case 13: if($c) { $c = false; _r$4 = _r$4.$blk(); } if (_r$4 && _r$4.$blk !== undefined) { break s; }
160514
+ $r = c.abort(_r$4); /* */ $s = 14; case 14: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
160515
+ _r$5 = ctx.Err(); /* */ $s = 15; case 15: if($c) { $c = false; _r$5 = _r$5.$blk(); } if (_r$5 && _r$5.$blk !== undefined) { break s; }
160379
160516
  $24r$1 = [ptrType.nil, ptrType$3.nil, _r$5];
160380
- $s = 15; case 15: return $24r$1;
160517
+ $s = 16; case 16: return $24r$1;
160381
160518
  /* } else if (_selection[0] === 1) { */ case 10:
160382
160519
  $24r$2 = [c, new http.Response.ptr("", 101, "", 0, 0, false, $ifaceNil, new $Int64(0, 0), sliceType$2.nil, false, false, false, ptrType$5.nil, ptrType$6.nil), $ifaceNil];
160383
- $s = 16; case 16: return $24r$2;
160520
+ $s = 17; case 17: return $24r$2;
160384
160521
  /* } else if (_selection[0] === 2) { */ case 11:
160385
160522
  $24r$3 = [ptrType.nil, ptrType$3.nil, net.ErrClosed];
160386
- $s = 17; case 17: return $24r$3;
160523
+ $s = 18; case 18: return $24r$3;
160387
160524
  /* } */ case 12:
160388
160525
  $s = -1; return [ptrType.nil, ptrType$3.nil, $ifaceNil];
160389
160526
  /* */ } return; } } catch(err) { $err = err; $s = -1; return [ptrType.nil, ptrType$3.nil, $ifaceNil]; } finally { $callDeferred($deferred, $err); if($curGoroutine.asleep) { var $f = {$blk: dial, $c: true, $r, $24r, $24r$1, $24r$2, $24r$3, _r, _r$1, _r$2, _r$3, _r$4, _r$5, _selection, _tuple, c, ctx, err, opench, opts, releaseOpen, url, ws, $s, $deferred};return $f; } }
@@ -160510,6 +160647,12 @@ $packages["github.com/coder/websocket"] = (function() {
160510
160647
  c.msgReadLimit.Store(n);
160511
160648
  };
160512
160649
  Conn.prototype.SetReadLimit = function(n) { return this.$val.SetReadLimit(n); };
160650
+ Conn.ptr.prototype.BufferedAmount = function() {
160651
+ var c;
160652
+ c = this;
160653
+ return $clone(c.ws, wsjs.WebSocket).BufferedAmount();
160654
+ };
160655
+ Conn.prototype.BufferedAmount = function() { return this.$val.BufferedAmount(); };
160513
160656
  Conn.ptr.prototype.setCloseErr = function(err) {
160514
160657
  var {c, err, $s, $r, $c} = $restore(this, {err});
160515
160658
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
@@ -160572,13 +160715,13 @@ $packages["github.com/coder/websocket"] = (function() {
160572
160715
  return $substring("StatusNormalClosureStatusGoingAwayStatusProtocolErrorStatusUnsupportedDatastatusReservedStatusNoStatusRcvdStatusAbnormalClosureStatusInvalidFramePayloadDataStatusPolicyViolationStatusMessageTooBigStatusMandatoryExtensionStatusInternalErrorStatusServiceRestartStatusTryAgainLaterStatusBadGatewayStatusTLSHandshake", ((i < 0 || i >= _StatusCode_index.length) ? ($throwRuntimeError("index out of range"), undefined) : _StatusCode_index[i]), (x = i + 1 >> 0, ((x < 0 || x >= _StatusCode_index.length) ? ($throwRuntimeError("index out of range"), undefined) : _StatusCode_index[x])));
160573
160716
  };
160574
160717
  $ptrType(StatusCode).prototype.String = function() { return new StatusCode(this.$get()).String(); };
160575
- ptrType.methods = [{prop: "close", name: "close", pkg: "github.com/coder/websocket", typ: $funcType([$error, $Bool], [], false)}, {prop: "init", name: "init", pkg: "github.com/coder/websocket", typ: $funcType([], [], false)}, {prop: "closeWithInternal", name: "closeWithInternal", pkg: "github.com/coder/websocket", typ: $funcType([], [], false)}, {prop: "Read", name: "Read", pkg: "", typ: $funcType([context.Context], [MessageType, sliceType$1, $error], false)}, {prop: "read", name: "read", pkg: "github.com/coder/websocket", typ: $funcType([context.Context], [MessageType, sliceType$1, $error], false)}, {prop: "Ping", name: "Ping", pkg: "", typ: $funcType([context.Context], [$error], false)}, {prop: "Write", name: "Write", pkg: "", typ: $funcType([context.Context, MessageType, sliceType$1], [$error], false)}, {prop: "write", name: "write", pkg: "github.com/coder/websocket", typ: $funcType([context.Context, MessageType, sliceType$1], [$error], false)}, {prop: "Close", name: "Close", pkg: "", typ: $funcType([StatusCode, $String], [$error], false)}, {prop: "CloseNow", name: "CloseNow", pkg: "", typ: $funcType([], [$error], false)}, {prop: "exportedClose", name: "exportedClose", pkg: "github.com/coder/websocket", typ: $funcType([StatusCode, $String], [$error], false)}, {prop: "Subprotocol", name: "Subprotocol", pkg: "", typ: $funcType([], [$String], false)}, {prop: "Reader", name: "Reader", pkg: "", typ: $funcType([context.Context], [MessageType, io.Reader, $error], false)}, {prop: "Writer", name: "Writer", pkg: "", typ: $funcType([context.Context, MessageType], [io.WriteCloser, $error], false)}, {prop: "CloseRead", name: "CloseRead", pkg: "", typ: $funcType([context.Context], [context.Context], false)}, {prop: "SetReadLimit", name: "SetReadLimit", pkg: "", typ: $funcType([$Int64], [], false)}, {prop: "setCloseErr", name: "setCloseErr", pkg: "github.com/coder/websocket", typ: $funcType([$error], [], false)}, {prop: "isClosed", name: "isClosed", pkg: "github.com/coder/websocket", typ: $funcType([], [$Bool], false)}];
160576
- ptrType$9.methods = [{prop: "Write", name: "Write", pkg: "", typ: $funcType([sliceType$1], [$Int, $error], false)}, {prop: "Close", name: "Close", pkg: "", typ: $funcType([], [$error], false)}];
160718
+ ptrType.methods = [{prop: "close", name: "close", pkg: "github.com/coder/websocket", typ: $funcType([$error, $Bool], [], false)}, {prop: "init", name: "init", pkg: "github.com/coder/websocket", typ: $funcType([], [], false)}, {prop: "releaseEventHandlers", name: "releaseEventHandlers", pkg: "github.com/coder/websocket", typ: $funcType([], [], false)}, {prop: "abort", name: "abort", pkg: "github.com/coder/websocket", typ: $funcType([$error], [], false)}, {prop: "closeWithInternal", name: "closeWithInternal", pkg: "github.com/coder/websocket", typ: $funcType([], [], false)}, {prop: "Read", name: "Read", pkg: "", typ: $funcType([context.Context], [MessageType, sliceType$1, $error], false)}, {prop: "read", name: "read", pkg: "github.com/coder/websocket", typ: $funcType([context.Context], [MessageType, sliceType$1, $error], false)}, {prop: "Ping", name: "Ping", pkg: "", typ: $funcType([context.Context], [$error], false)}, {prop: "Write", name: "Write", pkg: "", typ: $funcType([context.Context, MessageType, sliceType$1], [$error], false)}, {prop: "write", name: "write", pkg: "github.com/coder/websocket", typ: $funcType([MessageType, sliceType$1], [$error], false)}, {prop: "Close", name: "Close", pkg: "", typ: $funcType([StatusCode, $String], [$error], false)}, {prop: "CloseNow", name: "CloseNow", pkg: "", typ: $funcType([], [$error], false)}, {prop: "exportedClose", name: "exportedClose", pkg: "github.com/coder/websocket", typ: $funcType([StatusCode, $String], [$error], false)}, {prop: "Subprotocol", name: "Subprotocol", pkg: "", typ: $funcType([], [$String], false)}, {prop: "Reader", name: "Reader", pkg: "", typ: $funcType([context.Context], [MessageType, io.Reader, $error], false)}, {prop: "Writer", name: "Writer", pkg: "", typ: $funcType([context.Context, MessageType], [io.WriteCloser, $error], false)}, {prop: "CloseRead", name: "CloseRead", pkg: "", typ: $funcType([context.Context], [context.Context], false)}, {prop: "SetReadLimit", name: "SetReadLimit", pkg: "", typ: $funcType([$Int64], [], false)}, {prop: "BufferedAmount", name: "BufferedAmount", pkg: "", typ: $funcType([], [$Uint64], false)}, {prop: "setCloseErr", name: "setCloseErr", pkg: "github.com/coder/websocket", typ: $funcType([$error], [], false)}, {prop: "isClosed", name: "isClosed", pkg: "github.com/coder/websocket", typ: $funcType([], [$Bool], false)}];
160719
+ ptrType$8.methods = [{prop: "Write", name: "Write", pkg: "", typ: $funcType([sliceType$1], [$Int, $error], false)}, {prop: "Close", name: "Close", pkg: "", typ: $funcType([], [$error], false)}];
160577
160720
  StatusCode.methods = [{prop: "String", name: "String", pkg: "", typ: $funcType([], [$String], false)}];
160578
160721
  CloseError.methods = [{prop: "Error", name: "Error", pkg: "", typ: $funcType([], [$String], false)}];
160579
160722
  MessageType.methods = [{prop: "String", name: "String", pkg: "", typ: $funcType([], [$String], false)}];
160580
- ptrType$10.methods = [{prop: "Lock", name: "Lock", pkg: "", typ: $funcType([], [], false)}];
160581
- Conn.init("github.com/coder/websocket", [{prop: "noCopy", name: "noCopy", embedded: false, exported: false, typ: noCopy, tag: ""}, {prop: "ws", name: "ws", embedded: false, exported: false, typ: wsjs.WebSocket, tag: ""}, {prop: "msgReadLimit", name: "msgReadLimit", embedded: false, exported: false, typ: xsync.Int64, tag: ""}, {prop: "closeReadMu", name: "closeReadMu", embedded: false, exported: false, typ: sync.Mutex, tag: ""}, {prop: "closeReadCtx", name: "closeReadCtx", embedded: false, exported: false, typ: context.Context, tag: ""}, {prop: "closingMu", name: "closingMu", embedded: false, exported: false, typ: sync.Mutex, tag: ""}, {prop: "closeOnce", name: "closeOnce", embedded: false, exported: false, typ: sync.Once, tag: ""}, {prop: "closed", name: "closed", embedded: false, exported: false, typ: chanType, tag: ""}, {prop: "closeErrOnce", name: "closeErrOnce", embedded: false, exported: false, typ: sync.Once, tag: ""}, {prop: "closeErr", name: "closeErr", embedded: false, exported: false, typ: $error, tag: ""}, {prop: "closeWasClean", name: "closeWasClean", embedded: false, exported: false, typ: $Bool, tag: ""}, {prop: "releaseOnClose", name: "releaseOnClose", embedded: false, exported: false, typ: funcType$1, tag: ""}, {prop: "releaseOnError", name: "releaseOnError", embedded: false, exported: false, typ: funcType$1, tag: ""}, {prop: "releaseOnMessage", name: "releaseOnMessage", embedded: false, exported: false, typ: funcType$1, tag: ""}, {prop: "readSignal", name: "readSignal", embedded: false, exported: false, typ: chanType, tag: ""}, {prop: "readBufMu", name: "readBufMu", embedded: false, exported: false, typ: sync.Mutex, tag: ""}, {prop: "readBuf", name: "readBuf", embedded: false, exported: false, typ: sliceType$3, tag: ""}]);
160723
+ ptrType$9.methods = [{prop: "Lock", name: "Lock", pkg: "", typ: $funcType([], [], false)}];
160724
+ Conn.init("github.com/coder/websocket", [{prop: "noCopy", name: "noCopy", embedded: false, exported: false, typ: noCopy, tag: ""}, {prop: "ws", name: "ws", embedded: false, exported: false, typ: wsjs.WebSocket, tag: ""}, {prop: "msgReadLimit", name: "msgReadLimit", embedded: false, exported: false, typ: atomic.Int64, tag: ""}, {prop: "closeReadMu", name: "closeReadMu", embedded: false, exported: false, typ: sync.Mutex, tag: ""}, {prop: "closeReadCtx", name: "closeReadCtx", embedded: false, exported: false, typ: context.Context, tag: ""}, {prop: "closingMu", name: "closingMu", embedded: false, exported: false, typ: sync.Mutex, tag: ""}, {prop: "closeOnce", name: "closeOnce", embedded: false, exported: false, typ: sync.Once, tag: ""}, {prop: "closed", name: "closed", embedded: false, exported: false, typ: chanType, tag: ""}, {prop: "closeErrOnce", name: "closeErrOnce", embedded: false, exported: false, typ: sync.Once, tag: ""}, {prop: "closeErr", name: "closeErr", embedded: false, exported: false, typ: $error, tag: ""}, {prop: "closeWasClean", name: "closeWasClean", embedded: false, exported: false, typ: $Bool, tag: ""}, {prop: "releaseOnce", name: "releaseOnce", embedded: false, exported: false, typ: sync.Once, tag: ""}, {prop: "releaseOnClose", name: "releaseOnClose", embedded: false, exported: false, typ: funcType$1, tag: ""}, {prop: "releaseOnError", name: "releaseOnError", embedded: false, exported: false, typ: funcType$1, tag: ""}, {prop: "releaseOnMessage", name: "releaseOnMessage", embedded: false, exported: false, typ: funcType$1, tag: ""}, {prop: "readSignal", name: "readSignal", embedded: false, exported: false, typ: chanType, tag: ""}, {prop: "readBufMu", name: "readBufMu", embedded: false, exported: false, typ: sync.Mutex, tag: ""}, {prop: "readBuf", name: "readBuf", embedded: false, exported: false, typ: sliceType$3, tag: ""}]);
160582
160725
  DialOptions.init("", [{prop: "Subprotocols", name: "Subprotocols", embedded: false, exported: true, typ: sliceType$2, tag: ""}]);
160583
160726
  writer.init("github.com/coder/websocket", [{prop: "closed", name: "closed", embedded: false, exported: false, typ: $Bool, tag: ""}, {prop: "c", name: "c", embedded: false, exported: false, typ: ptrType, tag: ""}, {prop: "ctx", name: "ctx", embedded: false, exported: false, typ: context.Context, tag: ""}, {prop: "typ", name: "typ", embedded: false, exported: false, typ: MessageType, tag: ""}, {prop: "b", name: "b", embedded: false, exported: false, typ: ptrType$7, tag: ""}]);
160584
160727
  CloseError.init("", [{prop: "Code", name: "Code", embedded: false, exported: true, typ: StatusCode, tag: ""}, {prop: "Reason", name: "Reason", embedded: false, exported: true, typ: $String, tag: ""}]);
@@ -160593,34 +160736,34 @@ $packages["github.com/coder/websocket"] = (function() {
160593
160736
  $r = fmt.$init(); /* */ $s = 5; case 5: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
160594
160737
  $r = bpool.$init(); /* */ $s = 6; case 6: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
160595
160738
  $r = wsjs.$init(); /* */ $s = 7; case 7: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
160596
- $r = xsync.$init(); /* */ $s = 8; case 8: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
160597
- $r = io.$init(); /* */ $s = 9; case 9: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
160598
- $r = math.$init(); /* */ $s = 10; case 10: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
160599
- $r = bits.$init(); /* */ $s = 11; case 11: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
160600
- $r = net.$init(); /* */ $s = 12; case 12: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
160601
- $r = http.$init(); /* */ $s = 13; case 13: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
160602
- $r = reflect.$init(); /* */ $s = 14; case 14: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
160603
- $r = runtime.$init(); /* */ $s = 15; case 15: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
160604
- $r = strconv.$init(); /* */ $s = 16; case 16: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
160605
- $r = strings.$init(); /* */ $s = 17; case 17: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
160606
- $r = sync.$init(); /* */ $s = 18; case 18: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
160607
- $r = atomic.$init(); /* */ $s = 19; case 19: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
160608
- $r = js.$init(); /* */ $s = 20; case 20: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
160609
- $r = time.$init(); /* */ $s = 21; case 21: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
160739
+ $r = io.$init(); /* */ $s = 8; case 8: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
160740
+ $r = math.$init(); /* */ $s = 9; case 9: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
160741
+ $r = bits.$init(); /* */ $s = 10; case 10: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
160742
+ $r = net.$init(); /* */ $s = 11; case 11: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
160743
+ $r = http.$init(); /* */ $s = 12; case 12: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
160744
+ $r = reflect.$init(); /* */ $s = 13; case 13: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
160745
+ $r = runtime.$init(); /* */ $s = 14; case 14: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
160746
+ $r = strconv.$init(); /* */ $s = 15; case 15: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
160747
+ $r = strings.$init(); /* */ $s = 16; case 16: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
160748
+ $r = sync.$init(); /* */ $s = 17; case 17: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
160749
+ $r = atomic.$init(); /* */ $s = 18; case 18: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
160750
+ $r = js.$init(); /* */ $s = 19; case 19: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
160751
+ $r = time.$init(); /* */ $s = 20; case 20: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
160610
160752
  _MessageType_index = $toNativeArray($kindUint8, [0, 11, 24]);
160611
160753
  _StatusCode_index = $toNativeArray($kindUint16, [0, 19, 34, 53, 74, 88, 106, 127, 156, 177, 196, 220, 239, 259, 278, 294, 312]);
160754
+ $pkg.ErrMessageTooBig = errors.New("websocket: message too big");
160612
160755
  /* */ } return; } if ($f === undefined) { $f = { $blk: $init }; } $f.$s = $s; $f.$r = $r; return $f;
160613
160756
  };
160614
160757
  $pkg.$init = $init;
160615
160758
  return $pkg;
160616
160759
  })();
160617
160760
  $packages["github.com/supraio/client-daemon/pkg/jshelper"] = (function() {
160618
- var $pkg = {}, $init, errs, log, js, ptrType, sliceType, GetError, Await;
160761
+ var $pkg = {}, $init, errs, js, ptrType, sliceType, mapType, GetError, Await, AwaitWithCancel;
160619
160762
  errs = $packages["github.com/supraio/client-daemon/pkg/errs"];
160620
- log = $packages["log"];
160621
160763
  js = $packages["syscall/js"];
160622
160764
  ptrType = $ptrType(js.Value);
160623
160765
  sliceType = $sliceType($emptyInterface);
160766
+ mapType = $mapType($String, $emptyInterface);
160624
160767
  GetError = function(err) {
160625
160768
  var {$24r, $24r$1, $24r$2, $24r$3, _r, _r$1, _r$2, _r$3, err, $s, $r, $c} = $restore(this, {err});
160626
160769
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
@@ -160652,77 +160795,82 @@ $packages["github.com/supraio/client-daemon/pkg/jshelper"] = (function() {
160652
160795
  };
160653
160796
  $pkg.GetError = GetError;
160654
160797
  Await = function(awaitable) {
160655
- var {$24r, $24r$1, _r, _r$1, _r$2, _selection, awaitable, catch$1, catchFunc, err, result, then, thenFunc, $s, $deferred, $r, $c} = $restore(this, {awaitable});
160798
+ var {_r, _tuple, awaitable, err, result, $s, $r, $c} = $restore(this, {awaitable});
160799
+ /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
160800
+ _r = AwaitWithCancel($clone(awaitable, js.Value), $chanNil); /* */ $s = 1; case 1: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; }
160801
+ _tuple = _r;
160802
+ result = _tuple[0];
160803
+ err = _tuple[1];
160804
+ $s = -1; return [result, err];
160805
+ /* */ } return; } var $f = {$blk: Await, $c: true, $r, _r, _tuple, awaitable, err, result, $s};return $f;
160806
+ };
160807
+ $pkg.Await = Await;
160808
+ AwaitWithCancel = function(awaitable, cancel) {
160809
+ var {$24r, $24r$1, $24r$2, _r, _r$1, _r$2, _r$3, _r$4, _selection, awaitable, cancel, catch$1, catchFunc, err, facades, result, state, then, thenFunc, x, x$1, $s, $deferred, $r, $c} = $restore(this, {awaitable, cancel});
160656
160810
  /* */ $s = $s || 0; var $err = null; try { s: while (true) { switch ($s) { case 0: $deferred = []; $curGoroutine.deferStack.push($deferred);
160657
160811
  catch$1 = [catch$1];
160812
+ catchFunc = [catchFunc];
160813
+ state = [state];
160658
160814
  then = [then];
160659
- then[0] = new $Chan(ptrType, 0);
160660
- $deferred.push([(function(catch$1, then) { return function() {
160661
- $close(then[0]);
160662
- then[0] = $chanNil;
160663
- }; })(catch$1, then), []]);
160664
- thenFunc = $clone(js.FuncOf((function(catch$1, then) { return function $b(this$1, args) {
160815
+ thenFunc = [thenFunc];
160816
+ then[0] = new $Chan(ptrType, 1);
160817
+ thenFunc[0] = $clone(js.FuncOf((function(catch$1, catchFunc, state, then, thenFunc) { return function $b(this$1, args) {
160665
160818
  var {args, this$1, $s, $r, $c} = $restore(this, {this$1, args});
160666
160819
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
160667
- /* */ if (then[0] === $chanNil) { $s = 1; continue; }
160668
- /* */ $s = 2; continue;
160669
- /* if (then[0] === $chanNil) { */ case 1:
160670
- $r = log.Printf("Promise already resolved cannot resolve again: %v\n", new sliceType([(0 >= args.$length ? ($throwRuntimeError("index out of range"), undefined) : args.$array[args.$offset + 0])])); /* */ $s = 3; case 3: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
160671
- $s = -1; return $ifaceNil;
160672
- /* } */ case 2:
160673
- $r = $send(then[0], (0 >= args.$length ? ($throwRuntimeError("index out of range"), undefined) : args.$array[args.$offset + 0])); /* */ $s = 4; case 4: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
160820
+ $r = $send(then[0], (0 >= args.$length ? ($throwRuntimeError("index out of range"), undefined) : args.$array[args.$offset + 0])); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
160674
160821
  $s = -1; return $ifaceNil;
160675
160822
  /* */ } return; } var $f = {$blk: $b, $c: true, $r, args, this$1, $s};return $f;
160676
- }; })(catch$1, then)), js.Func);
160677
- $deferred.push([$methodVal($clone(thenFunc, js.Func), "Release"), []]);
160678
- catch$1[0] = new $Chan(ptrType, 0);
160679
- $deferred.push([(function(catch$1, then) { return function() {
160680
- $close(catch$1[0]);
160681
- catch$1[0] = $chanNil;
160682
- }; })(catch$1, then), []]);
160683
- catchFunc = $clone(js.FuncOf((function(catch$1, then) { return function $b(this$1, args) {
160684
- var {_arg, _r, args, this$1, $s, $r, $c} = $restore(this, {this$1, args});
160823
+ }; })(catch$1, catchFunc, state, then, thenFunc)), js.Func);
160824
+ catch$1[0] = new $Chan(ptrType, 1);
160825
+ catchFunc[0] = $clone(js.FuncOf((function(catch$1, catchFunc, state, then, thenFunc) { return function $b(this$1, args) {
160826
+ var {args, this$1, $s, $r, $c} = $restore(this, {this$1, args});
160685
160827
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
160686
- /* */ if (catch$1[0] === $chanNil) { $s = 1; continue; }
160687
- /* */ $s = 2; continue;
160688
- /* if (catch$1[0] === $chanNil) { */ case 1:
160689
- _r = GetError((0 >= args.$length ? ($throwRuntimeError("index out of range"), undefined) : args.$array[args.$offset + 0])); /* */ $s = 3; case 3: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; }
160690
- _arg = _r;
160691
- $r = errs.Print("Promise already resolved cannot be rejected", _arg); /* */ $s = 4; case 4: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
160692
- $s = -1; return $ifaceNil;
160693
- /* } */ case 2:
160694
- $r = $send(catch$1[0], (0 >= args.$length ? ($throwRuntimeError("index out of range"), undefined) : args.$array[args.$offset + 0])); /* */ $s = 5; case 5: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
160828
+ $r = $send(catch$1[0], (0 >= args.$length ? ($throwRuntimeError("index out of range"), undefined) : args.$array[args.$offset + 0])); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
160695
160829
  $s = -1; return $ifaceNil;
160696
- /* */ } return; } var $f = {$blk: $b, $c: true, $r, _arg, _r, args, this$1, $s};return $f;
160697
- }; })(catch$1, then)), js.Func);
160698
- $deferred.push([$methodVal($clone(catchFunc, js.Func), "Release"), []]);
160699
- _r = $clone(awaitable, js.Value).Call("then", new sliceType([new thenFunc.constructor.elem(thenFunc)])); /* */ $s = 1; case 1: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; }
160700
- _r$1 = $clone(_r, js.Value).Call("catch", new sliceType([new catchFunc.constructor.elem(catchFunc)])); /* */ $s = 2; case 2: if($c) { $c = false; _r$1 = _r$1.$blk(); } if (_r$1 && _r$1.$blk !== undefined) { break s; }
160701
- _r$1;
160702
- _r$2 = $select([[then[0]], [catch$1[0]]]); /* */ $s = 3; case 3: if($c) { $c = false; _r$2 = _r$2.$blk(); } if (_r$2 && _r$2.$blk !== undefined) { break s; }
160703
- _selection = _r$2;
160704
- /* */ if (_selection[0] === 0) { $s = 4; continue; }
160705
- /* */ if (_selection[0] === 1) { $s = 5; continue; }
160706
- /* */ $s = 6; continue;
160707
- /* if (_selection[0] === 0) { */ case 4:
160830
+ /* */ } return; } var $f = {$blk: $b, $c: true, $r, args, this$1, $s};return $f;
160831
+ }; })(catch$1, catchFunc, state, then, thenFunc)), js.Func);
160832
+ state[0] = $clone(js.ValueOf(new mapType($makeMap($String.keyFor, [{ k: "active", v: new $Bool(true) }, { k: "resolve", v: new thenFunc[0].constructor.elem(thenFunc[0]) }, { k: "reject", v: new catchFunc[0].constructor.elem(catchFunc[0]) }]))), js.Value);
160833
+ _r = $clone($clone(js.Global(), js.Value).Get("Function"), js.Value).New(new sliceType([new $String("state"), new $String("return {\n\t\t\tresolve: function(value) {\n\t\t\t\tif (state.active) return state.resolve(value);\n\t\t\t},\n\t\t\treject: function(error) {\n\t\t\t\tif (state.active) return state.reject(error);\n\t\t\t}\n\t\t};")])); /* */ $s = 1; case 1: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; }
160834
+ _r$1 = $clone(_r, js.Value).Invoke(new sliceType([new state[0].constructor.elem(state[0])])); /* */ $s = 2; case 2: if($c) { $c = false; _r$1 = _r$1.$blk(); } if (_r$1 && _r$1.$blk !== undefined) { break s; }
160835
+ facades = $clone(_r$1, js.Value);
160836
+ _r$2 = $clone(awaitable, js.Value).Call("then", new sliceType([(x = $clone(facades, js.Value).Get("resolve"), new x.constructor.elem(x))])); /* */ $s = 3; case 3: if($c) { $c = false; _r$2 = _r$2.$blk(); } if (_r$2 && _r$2.$blk !== undefined) { break s; }
160837
+ _r$3 = $clone(_r$2, js.Value).Call("catch", new sliceType([(x$1 = $clone(facades, js.Value).Get("reject"), new x$1.constructor.elem(x$1))])); /* */ $s = 4; case 4: if($c) { $c = false; _r$3 = _r$3.$blk(); } if (_r$3 && _r$3.$blk !== undefined) { break s; }
160838
+ _r$3;
160839
+ $deferred.push([(function(catch$1, catchFunc, state, then, thenFunc) { return function() {
160840
+ var x$2, x$3;
160841
+ $clone(state[0], js.Value).Set("active", new $Bool(false));
160842
+ $clone(state[0], js.Value).Set("resolve", (x$2 = js.Undefined(), new x$2.constructor.elem(x$2)));
160843
+ $clone(state[0], js.Value).Set("reject", (x$3 = js.Undefined(), new x$3.constructor.elem(x$3)));
160844
+ $clone(thenFunc[0], js.Func).Release();
160845
+ $clone(catchFunc[0], js.Func).Release();
160846
+ }; })(catch$1, catchFunc, state, then, thenFunc), []]);
160847
+ _r$4 = $select([[then[0]], [catch$1[0]], [cancel]]); /* */ $s = 5; case 5: if($c) { $c = false; _r$4 = _r$4.$blk(); } if (_r$4 && _r$4.$blk !== undefined) { break s; }
160848
+ _selection = _r$4;
160849
+ /* */ if (_selection[0] === 0) { $s = 6; continue; }
160850
+ /* */ if (_selection[0] === 1) { $s = 7; continue; }
160851
+ /* */ if (_selection[0] === 2) { $s = 8; continue; }
160852
+ /* */ $s = 9; continue;
160853
+ /* if (_selection[0] === 0) { */ case 6:
160708
160854
  result = _selection[1][0];
160709
- $24r = [result, ptrType.nil];
160710
- $s = 7; case 7: return $24r;
160711
- /* } else if (_selection[0] === 1) { */ case 5:
160855
+ $24r = [result, ptrType.nil, false];
160856
+ $s = 10; case 10: return $24r;
160857
+ /* } else if (_selection[0] === 1) { */ case 7:
160712
160858
  err = _selection[1][0];
160713
- $24r$1 = [ptrType.nil, err];
160714
- $s = 8; case 8: return $24r$1;
160715
- /* } */ case 6:
160716
- $s = -1; return [ptrType.nil, ptrType.nil];
160717
- /* */ } return; } } catch(err) { $err = err; $s = -1; return [ptrType.nil, ptrType.nil]; } finally { $callDeferred($deferred, $err); if($curGoroutine.asleep) { var $f = {$blk: Await, $c: true, $r, $24r, $24r$1, _r, _r$1, _r$2, _selection, awaitable, catch$1, catchFunc, err, result, then, thenFunc, $s, $deferred};return $f; } }
160859
+ $24r$1 = [ptrType.nil, err, false];
160860
+ $s = 11; case 11: return $24r$1;
160861
+ /* } else if (_selection[0] === 2) { */ case 8:
160862
+ $24r$2 = [ptrType.nil, ptrType.nil, true];
160863
+ $s = 12; case 12: return $24r$2;
160864
+ /* } */ case 9:
160865
+ $s = -1; return [ptrType.nil, ptrType.nil, false];
160866
+ /* */ } return; } } catch(err) { $err = err; $s = -1; return [ptrType.nil, ptrType.nil, false]; } finally { $callDeferred($deferred, $err); if($curGoroutine.asleep) { var $f = {$blk: AwaitWithCancel, $c: true, $r, $24r, $24r$1, $24r$2, _r, _r$1, _r$2, _r$3, _r$4, _selection, awaitable, cancel, catch$1, catchFunc, err, facades, result, state, then, thenFunc, x, x$1, $s, $deferred};return $f; } }
160718
160867
  };
160719
- $pkg.Await = Await;
160868
+ $pkg.AwaitWithCancel = AwaitWithCancel;
160720
160869
  $init = function() {
160721
160870
  $pkg.$init = function() {};
160722
160871
  /* */ var $f, $c = false, $s = 0, $r; if (this !== undefined && this.$blk !== undefined) { $f = this; $c = true; $s = $f.$s; $r = $f.$r; } s: while (true) { switch ($s) { case 0:
160723
160872
  $r = errs.$init(); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
160724
- $r = log.$init(); /* */ $s = 2; case 2: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
160725
- $r = js.$init(); /* */ $s = 3; case 3: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
160873
+ $r = js.$init(); /* */ $s = 2; case 2: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
160726
160874
  /* */ } return; } if ($f === undefined) { $f = { $blk: $init }; } $f.$s = $s; $f.$r = $r; return $f;
160727
160875
  };
160728
160876
  $pkg.$init = $init;
@@ -160777,13 +160925,15 @@ $packages["github.com/supraio/client-daemon/pkg/netsamsungwasmtcp"] = (function(
160777
160925
  return $pkg;
160778
160926
  })();
160779
160927
  $packages["github.com/supraio/client-daemon/pkg/netstream"] = (function() {
160780
- var $pkg = {}, $init, context, websocket, errs, jshelper, netnacltcp, netsamsungwasmtcp, js, time, SamsungWasmTCPConn, NaClTCPConn, JsWebsocketConn, ReaderWriter, ReaderWriterCloser, Driver, sliceType, ptrType, mapType, sliceType$1, sliceType$2, ptrType$1, ptrType$2, ptrType$3, ptrType$4, connects, init, ConnectSamsungWasmTCP, init$1, ConnectNaClTCP, init$2, ConnectJsWebsocket, Create;
160928
+ var $pkg = {}, $init, context, errors, websocket, errs, jshelper, netnacltcp, netsamsungwasmtcp, net, js, time, SamsungWasmTCPConn, NaClTCPConn, JsWebsocketConn, ReaderWriter, ReaderWriterCloser, Driver, sliceType, ptrType, mapType, sliceType$1, sliceType$2, ptrType$1, ptrType$2, ptrType$3, ptrType$4, connects, init, ConnectSamsungWasmTCP, init$1, ConnectNaClTCP, init$2, ConnectJsWebsocket, Create;
160781
160929
  context = $packages["context"];
160930
+ errors = $packages["errors"];
160782
160931
  websocket = $packages["github.com/coder/websocket"];
160783
160932
  errs = $packages["github.com/supraio/client-daemon/pkg/errs"];
160784
160933
  jshelper = $packages["github.com/supraio/client-daemon/pkg/jshelper"];
160785
160934
  netnacltcp = $packages["github.com/supraio/client-daemon/pkg/netnacltcp"];
160786
160935
  netsamsungwasmtcp = $packages["github.com/supraio/client-daemon/pkg/netsamsungwasmtcp"];
160936
+ net = $packages["net"];
160787
160937
  js = $packages["syscall/js"];
160788
160938
  time = $packages["time"];
160789
160939
  SamsungWasmTCPConn = $pkg.SamsungWasmTCPConn = $newType(0, $kindStruct, "netstream.SamsungWasmTCPConn", true, "github.com/supraio/client-daemon/pkg/netstream", true, function(conn_) {
@@ -161098,13 +161248,21 @@ $packages["github.com/supraio/client-daemon/pkg/netstream"] = (function() {
161098
161248
  };
161099
161249
  JsWebsocketConn.prototype.Read = function(data) { return this.$val.Read(data); };
161100
161250
  JsWebsocketConn.ptr.prototype.Close = function() {
161101
- var {$24r, _r, c, $s, $r, $c} = $restore(this, {});
161251
+ var {_r, _r$1, _v, c, err, $s, $r, $c} = $restore(this, {});
161102
161252
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
161103
161253
  c = this;
161104
- _r = c.conn.Close(1000, "Closed by client"); /* */ $s = 1; case 1: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; }
161105
- $24r = _r;
161106
- $s = 2; case 2: return $24r;
161107
- /* */ } return; } var $f = {$blk: JsWebsocketConn.ptr.prototype.Close, $c: true, $r, $24r, _r, c, $s};return $f;
161254
+ _r = c.conn.CloseNow(); /* */ $s = 1; case 1: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; }
161255
+ err = _r;
161256
+ if (!(!($interfaceIsEqual(err, $ifaceNil)))) { _v = false; $s = 4; continue s; }
161257
+ _r$1 = errors.Is(err, net.ErrClosed); /* */ $s = 5; case 5: if($c) { $c = false; _r$1 = _r$1.$blk(); } if (_r$1 && _r$1.$blk !== undefined) { break s; }
161258
+ _v = !_r$1; case 4:
161259
+ /* */ if (_v) { $s = 2; continue; }
161260
+ /* */ $s = 3; continue;
161261
+ /* if (_v) { */ case 2:
161262
+ $s = -1; return err;
161263
+ /* } */ case 3:
161264
+ $s = -1; return $ifaceNil;
161265
+ /* */ } return; } var $f = {$blk: JsWebsocketConn.ptr.prototype.Close, $c: true, $r, _r, _r$1, _v, c, err, $s};return $f;
161108
161266
  };
161109
161267
  JsWebsocketConn.prototype.Close = function() { return this.$val.Close(); };
161110
161268
  ConnectJsWebsocket = function(host, timeout, secure) {
@@ -161161,13 +161319,15 @@ $packages["github.com/supraio/client-daemon/pkg/netstream"] = (function() {
161161
161319
  $pkg.$init = function() {};
161162
161320
  /* */ var $f, $c = false, $s = 0, $r; if (this !== undefined && this.$blk !== undefined) { $f = this; $c = true; $s = $f.$s; $r = $f.$r; } s: while (true) { switch ($s) { case 0:
161163
161321
  $r = context.$init(); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
161164
- $r = websocket.$init(); /* */ $s = 2; case 2: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
161165
- $r = errs.$init(); /* */ $s = 3; case 3: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
161166
- $r = jshelper.$init(); /* */ $s = 4; case 4: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
161167
- $r = netnacltcp.$init(); /* */ $s = 5; case 5: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
161168
- $r = netsamsungwasmtcp.$init(); /* */ $s = 6; case 6: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
161169
- $r = js.$init(); /* */ $s = 7; case 7: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
161170
- $r = time.$init(); /* */ $s = 8; case 8: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
161322
+ $r = errors.$init(); /* */ $s = 2; case 2: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
161323
+ $r = websocket.$init(); /* */ $s = 3; case 3: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
161324
+ $r = errs.$init(); /* */ $s = 4; case 4: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
161325
+ $r = jshelper.$init(); /* */ $s = 5; case 5: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
161326
+ $r = netnacltcp.$init(); /* */ $s = 6; case 6: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
161327
+ $r = netsamsungwasmtcp.$init(); /* */ $s = 7; case 7: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
161328
+ $r = net.$init(); /* */ $s = 8; case 8: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
161329
+ $r = js.$init(); /* */ $s = 9; case 9: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
161330
+ $r = time.$init(); /* */ $s = 10; case 10: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
161171
161331
  connects = $makeMap(Driver.keyFor, []);
161172
161332
  init();
161173
161333
  init$1();
@@ -161178,7 +161338,7 @@ $packages["github.com/supraio/client-daemon/pkg/netstream"] = (function() {
161178
161338
  return $pkg;
161179
161339
  })();
161180
161340
  $packages["github.com/supraio/client-daemon/pkg/netclient"] = (function() {
161181
- var $pkg = {}, $init, bufio, base64, fmt, errs, helper, message, netstream, io, log, sync, time, Pinger, messageCallback, MetadataServer, response, MetadataResponsiveSender, MetadataMessageSender, MetadataClient, Framer, sliceType, sliceType$1, ptrType, funcType, sliceType$2, sliceType$3, ptrType$1, funcType$1, sliceType$4, ptrType$2, ptrType$3, funcType$2, funcType$3, ptrType$4, chanType, mapType, ptrType$5, ptrType$6, _r, NewPinger, NewMetadataServer, NewMetadataResponsiveSender, NewMetadataMessageSender, NewMetadataClient, NewFramer, splitFrames;
161341
+ var $pkg = {}, $init, bufio, base64, fmt, errs, helper, message, netstream, io, log, sync, atomic, time, Pinger, messageCallback, MetadataServer, response, MetadataResponsiveSender, MetadataMessageSender, MetadataClient, Framer, sliceType, structType, sliceType$1, ptrType, funcType, sliceType$2, sliceType$3, ptrType$1, funcType$1, sliceType$4, ptrType$2, ptrType$3, chanType, funcType$2, funcType$3, funcType$4, ptrType$4, chanType$1, mapType, ptrType$5, ptrType$6, _r, NewPinger, NewMetadataServer, NewMetadataResponsiveSender, NewMetadataMessageSender, NewMetadataClient, NewFramer, splitFrames;
161182
161342
  bufio = $packages["bufio"];
161183
161343
  base64 = $packages["encoding/base64"];
161184
161344
  fmt = $packages["fmt"];
@@ -161189,16 +161349,29 @@ $packages["github.com/supraio/client-daemon/pkg/netclient"] = (function() {
161189
161349
  io = $packages["io"];
161190
161350
  log = $packages["log"];
161191
161351
  sync = $packages["sync"];
161352
+ atomic = $packages["sync/atomic"];
161192
161353
  time = $packages["time"];
161193
- Pinger = $pkg.Pinger = $newType(0, $kindStruct, "netclient.Pinger", true, "github.com/supraio/client-daemon/pkg/netclient", true, function(messageSender_, closed_) {
161354
+ Pinger = $pkg.Pinger = $newType(0, $kindStruct, "netclient.Pinger", true, "github.com/supraio/client-daemon/pkg/netclient", true, function(messageSender_, closed_, closeMu_, done_, stopped_, beforeSend_, afterSend_, onClose_) {
161194
161355
  this.$val = this;
161195
161356
  if (arguments.length === 0) {
161196
161357
  this.messageSender = $ifaceNil;
161197
161358
  this.closed = false;
161359
+ this.closeMu = new sync.Mutex.ptr(0, 0);
161360
+ this.done = $chanNil;
161361
+ this.stopped = $chanNil;
161362
+ this.beforeSend = $throwNilPointerError;
161363
+ this.afterSend = $throwNilPointerError;
161364
+ this.onClose = $throwNilPointerError;
161198
161365
  return;
161199
161366
  }
161200
161367
  this.messageSender = messageSender_;
161201
161368
  this.closed = closed_;
161369
+ this.closeMu = closeMu_;
161370
+ this.done = done_;
161371
+ this.stopped = stopped_;
161372
+ this.beforeSend = beforeSend_;
161373
+ this.afterSend = afterSend_;
161374
+ this.onClose = onClose_;
161202
161375
  });
161203
161376
  messageCallback = $pkg.messageCallback = $newType(0, $kindStruct, "netclient.messageCallback", true, "github.com/supraio/client-daemon/pkg/netclient", false, function(id_, callback_) {
161204
161377
  this.$val = this;
@@ -161215,7 +161388,7 @@ $packages["github.com/supraio/client-daemon/pkg/netclient"] = (function() {
161215
161388
  if (arguments.length === 0) {
161216
161389
  this.framer = ptrType.nil;
161217
161390
  this.closeClient = $throwNilPointerError;
161218
- this.closed = false;
161391
+ this.closed = new atomic.Bool.ptr(new atomic.noCopy.ptr(), 0);
161219
161392
  this.onClose = sliceType$2.nil;
161220
161393
  this.onMessage = sliceType$3.nil;
161221
161394
  this.nextMessageID = 0;
@@ -161293,6 +161466,7 @@ $packages["github.com/supraio/client-daemon/pkg/netclient"] = (function() {
161293
161466
  this.sendMu = sendMu_;
161294
161467
  });
161295
161468
  sliceType = $sliceType($emptyInterface);
161469
+ structType = $structType("", []);
161296
161470
  sliceType$1 = $sliceType($Uint8);
161297
161471
  ptrType = $ptrType(Framer);
161298
161472
  funcType = $funcType([$String], [], false);
@@ -161303,77 +161477,156 @@ $packages["github.com/supraio/client-daemon/pkg/netclient"] = (function() {
161303
161477
  sliceType$4 = $sliceType(funcType$1);
161304
161478
  ptrType$2 = $ptrType(bufio.Scanner);
161305
161479
  ptrType$3 = $ptrType(Pinger);
161306
- funcType$2 = $funcType([message.MsgType, sliceType$1], [], false);
161307
- funcType$3 = $funcType([], [$error], false);
161480
+ chanType = $chanType(structType, false, false);
161481
+ funcType$2 = $funcType([], [], false);
161482
+ funcType$3 = $funcType([message.MsgType, sliceType$1], [], false);
161483
+ funcType$4 = $funcType([], [$error], false);
161308
161484
  ptrType$4 = $ptrType(MetadataResponsiveSender);
161309
- chanType = $chanType(response, false, false);
161310
- mapType = $mapType($String, chanType);
161485
+ chanType$1 = $chanType(response, false, false);
161486
+ mapType = $mapType($String, chanType$1);
161311
161487
  ptrType$5 = $ptrType(MetadataMessageSender);
161312
161488
  ptrType$6 = $ptrType(MetadataClient);
161313
161489
  NewPinger = function(messageSender) {
161314
161490
  var messageSender;
161315
- return new Pinger.ptr(messageSender, true);
161491
+ return new Pinger.ptr(messageSender, true, new sync.Mutex.ptr(0, 0), new $Chan(structType, 0), new $Chan(structType, 0), $throwNilPointerError, $throwNilPointerError, $throwNilPointerError);
161316
161492
  };
161317
161493
  $pkg.NewPinger = NewPinger;
161318
161494
  Pinger.ptr.prototype.Start = function() {
161319
- var h;
161495
+ var {h, $s, $r, $c} = $restore(this, {});
161496
+ /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
161320
161497
  h = this;
161498
+ $r = h.closeMu.Lock(); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
161321
161499
  h.closed = false;
161500
+ $r = h.closeMu.Unlock(); /* */ $s = 2; case 2: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
161322
161501
  $go($methodVal(h, "startPinging"), []);
161502
+ $s = -1; return;
161503
+ /* */ } return; } var $f = {$blk: Pinger.ptr.prototype.Start, $c: true, $r, h, $s};return $f;
161323
161504
  };
161324
161505
  Pinger.prototype.Start = function() { return this.$val.Start(); };
161325
161506
  Pinger.ptr.prototype.Close = function() {
161326
- var h;
161507
+ var {h, $s, $deferred, $r, $c} = $restore(this, {});
161508
+ /* */ $s = $s || 0; var $err = null; try { s: while (true) { switch ($s) { case 0: $deferred = []; $curGoroutine.deferStack.push($deferred);
161327
161509
  h = this;
161510
+ $r = h.closeMu.Lock(); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
161511
+ $deferred.push([$methodVal(h.closeMu, "Unlock"), []]);
161512
+ /* */ if (h.closed) { $s = 2; continue; }
161513
+ /* */ $s = 3; continue;
161514
+ /* if (h.closed) { */ case 2:
161515
+ $s = 4; case 4: return;
161516
+ /* } */ case 3:
161328
161517
  h.closed = true;
161518
+ $close(h.done);
161519
+ /* */ if (!(h.onClose === $throwNilPointerError)) { $s = 5; continue; }
161520
+ /* */ $s = 6; continue;
161521
+ /* if (!(h.onClose === $throwNilPointerError)) { */ case 5:
161522
+ $r = h.onClose(); /* */ $s = 7; case 7: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
161523
+ /* } */ case 6:
161524
+ $s = -1; return;
161525
+ /* */ } return; } } catch(err) { $err = err; $s = -1; } finally { $callDeferred($deferred, $err); if($curGoroutine.asleep) { var $f = {$blk: Pinger.ptr.prototype.Close, $c: true, $r, h, $s, $deferred};return $f; } }
161329
161526
  };
161330
161527
  Pinger.prototype.Close = function() { return this.$val.Close(); };
161331
- Pinger.ptr.prototype.startPinging = function() {
161332
- var {_r$1, err, h, $s, $r, $c} = $restore(this, {});
161528
+ Pinger.ptr.prototype.Wait = function(timeout) {
161529
+ var {_r$1, _r$2, _selection, h, timeout, $s, $r, $c} = $restore(this, {timeout});
161333
161530
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
161334
161531
  h = this;
161532
+ _r$1 = time.After(timeout); /* */ $s = 1; case 1: if($c) { $c = false; _r$1 = _r$1.$blk(); } if (_r$1 && _r$1.$blk !== undefined) { break s; }
161533
+ _r$2 = $select([[h.stopped], [_r$1]]); /* */ $s = 2; case 2: if($c) { $c = false; _r$2 = _r$2.$blk(); } if (_r$2 && _r$2.$blk !== undefined) { break s; }
161534
+ _selection = _r$2;
161535
+ /* */ if (_selection[0] === 0) { $s = 3; continue; }
161536
+ /* */ if (_selection[0] === 1) { $s = 4; continue; }
161537
+ /* */ $s = 5; continue;
161538
+ /* if (_selection[0] === 0) { */ case 3:
161539
+ $s = -1; return true;
161540
+ /* } else if (_selection[0] === 1) { */ case 4:
161541
+ $s = -1; return false;
161542
+ /* } */ case 5:
161543
+ $s = -1; return false;
161544
+ /* */ } return; } var $f = {$blk: Pinger.ptr.prototype.Wait, $c: true, $r, _r$1, _r$2, _selection, h, timeout, $s};return $f;
161545
+ };
161546
+ Pinger.prototype.Wait = function(timeout) { return this.$val.Wait(timeout); };
161547
+ Pinger.ptr.prototype.startPinging = function() {
161548
+ var {_arg, _r$1, _r$2, _r$3, _selection, err, h, $s, $deferred, $r, $c} = $restore(this, {});
161549
+ /* */ $s = $s || 0; var $err = null; try { s: while (true) { switch ($s) { case 0: $deferred = []; $curGoroutine.deferStack.push($deferred);
161550
+ h = this;
161551
+ $deferred.push([function(_arg) { $close(_arg); }, [h.stopped]]);
161335
161552
  /* while (true) { */ case 1:
161336
- /* if (!(!h.closed)) { break; } */ if(!(!h.closed)) { $s = 2; continue; }
161337
- _r$1 = h.messageSender.Send(2, new sliceType$1([])); /* */ $s = 3; case 3: if($c) { $c = false; _r$1 = _r$1.$blk(); } if (_r$1 && _r$1.$blk !== undefined) { break s; }
161553
+ /* */ if (!(h.beforeSend === $throwNilPointerError)) { $s = 3; continue; }
161554
+ /* */ $s = 4; continue;
161555
+ /* if (!(h.beforeSend === $throwNilPointerError)) { */ case 3:
161556
+ $r = h.beforeSend(); /* */ $s = 5; case 5: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
161557
+ /* } */ case 4:
161558
+ _r$1 = h.messageSender.Send(2, new sliceType$1([])); /* */ $s = 6; case 6: if($c) { $c = false; _r$1 = _r$1.$blk(); } if (_r$1 && _r$1.$blk !== undefined) { break s; }
161338
161559
  err = _r$1;
161339
- /* */ if (!($interfaceIsEqual(err, $ifaceNil))) { $s = 4; continue; }
161340
- /* */ $s = 5; continue;
161341
- /* if (!($interfaceIsEqual(err, $ifaceNil))) { */ case 4:
161342
- $r = errs.Print("Ping error", err); /* */ $s = 6; case 6: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
161343
- /* } */ case 5:
161344
- $r = time.Sleep(new time.Duration(0, 1000000000)); /* */ $s = 7; case 7: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
161560
+ /* */ if (!(h.afterSend === $throwNilPointerError)) { $s = 7; continue; }
161561
+ /* */ $s = 8; continue;
161562
+ /* if (!(h.afterSend === $throwNilPointerError)) { */ case 7:
161563
+ $r = h.afterSend(); /* */ $s = 9; case 9: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
161564
+ /* } */ case 8:
161565
+ /* */ if (!($interfaceIsEqual(err, $ifaceNil))) { $s = 10; continue; }
161566
+ /* */ $s = 11; continue;
161567
+ /* if (!($interfaceIsEqual(err, $ifaceNil))) { */ case 10:
161568
+ $r = errs.Print("Ping error", err); /* */ $s = 12; case 12: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
161569
+ /* } */ case 11:
161570
+ _r$2 = time.After(new time.Duration(0, 1000000000)); /* */ $s = 13; case 13: if($c) { $c = false; _r$2 = _r$2.$blk(); } if (_r$2 && _r$2.$blk !== undefined) { break s; }
161571
+ _r$3 = $select([[_r$2], [h.done]]); /* */ $s = 14; case 14: if($c) { $c = false; _r$3 = _r$3.$blk(); } if (_r$3 && _r$3.$blk !== undefined) { break s; }
161572
+ _selection = _r$3;
161573
+ /* */ if (_selection[0] === 0) { $s = 15; continue; }
161574
+ /* */ if (_selection[0] === 1) { $s = 16; continue; }
161575
+ /* */ $s = 17; continue;
161576
+ /* if (_selection[0] === 0) { */ case 15:
161577
+ $s = 17; continue;
161578
+ /* } else if (_selection[0] === 1) { */ case 16:
161579
+ $s = 18; case 18: return;
161580
+ /* } */ case 17:
161345
161581
  $s = 1; continue;
161346
161582
  case 2:
161347
161583
  $s = -1; return;
161348
- /* */ } return; } var $f = {$blk: Pinger.ptr.prototype.startPinging, $c: true, $r, _r$1, err, h, $s};return $f;
161584
+ /* */ } return; } } catch(err) { $err = err; $s = -1; } finally { $callDeferred($deferred, $err); if($curGoroutine.asleep) { var $f = {$blk: Pinger.ptr.prototype.startPinging, $c: true, $r, _arg, _r$1, _r$2, _r$3, _selection, err, h, $s, $deferred};return $f; } }
161349
161585
  };
161350
161586
  Pinger.prototype.startPinging = function() { return this.$val.startPinging(); };
161351
161587
  NewMetadataServer = function(framer, closeClient) {
161352
161588
  var closeClient, framer;
161353
- return new MetadataServer.ptr(framer, closeClient, false, sliceType$2.nil, sliceType$3.nil, 0);
161589
+ return new MetadataServer.ptr(framer, closeClient, new atomic.Bool.ptr(new atomic.noCopy.ptr(), 0), sliceType$2.nil, sliceType$3.nil, 0);
161354
161590
  };
161355
161591
  $pkg.NewMetadataServer = NewMetadataServer;
161356
161592
  MetadataServer.ptr.prototype.start = function() {
161357
- var pinger, s;
161593
+ var {$24r, _r$1, pinger, s, $s, $r, $c} = $restore(this, {});
161594
+ /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
161358
161595
  s = this;
161359
161596
  pinger = NewPinger(NewMetadataMessageSender(s));
161360
- pinger.Start();
161361
- s.OnClose((function(reason) {
161362
- var reason;
161363
- pinger.Close();
161364
- }));
161365
- $go($methodVal(s, "handleData"), []);
161597
+ _r$1 = s.startPinger(pinger); /* */ $s = 1; case 1: if($c) { $c = false; _r$1 = _r$1.$blk(); } if (_r$1 && _r$1.$blk !== undefined) { break s; }
161598
+ $24r = _r$1;
161599
+ $s = 2; case 2: return $24r;
161600
+ /* */ } return; } var $f = {$blk: MetadataServer.ptr.prototype.start, $c: true, $r, $24r, _r$1, pinger, s, $s};return $f;
161366
161601
  };
161367
161602
  MetadataServer.prototype.start = function() { return this.$val.start(); };
161603
+ MetadataServer.ptr.prototype.startPinger = function(pinger) {
161604
+ var {pinger, s, $s, $r, $c} = $restore(this, {pinger});
161605
+ /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
161606
+ pinger = [pinger];
161607
+ s = this;
161608
+ s.OnClose((function(pinger) { return function $b(reason) {
161609
+ var {reason, $s, $r, $c} = $restore(this, {reason});
161610
+ /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
161611
+ $r = pinger[0].Close(); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
161612
+ $s = -1; return;
161613
+ /* */ } return; } var $f = {$blk: $b, $c: true, $r, reason, $s};return $f;
161614
+ }; })(pinger));
161615
+ $r = pinger[0].Start(); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
161616
+ $go($methodVal(s, "handleData"), []);
161617
+ $s = -1; return pinger[0];
161618
+ /* */ } return; } var $f = {$blk: MetadataServer.ptr.prototype.startPinger, $c: true, $r, pinger, s, $s};return $f;
161619
+ };
161620
+ MetadataServer.prototype.startPinger = function(pinger) { return this.$val.startPinger(pinger); };
161368
161621
  MetadataServer.ptr.prototype.Send = function(data) {
161369
161622
  var {$24r, _r$1, _r$2, _r$3, _tmp, _tmp$1, _tmp$2, _tmp$3, _tmp$4, _tmp$5, _tuple, closeErr, data, err, s, writtenLength, $s, $r, $c} = $restore(this, {data});
161370
161623
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
161371
161624
  writtenLength = 0;
161372
161625
  err = $ifaceNil;
161373
161626
  s = this;
161374
- /* */ if (s.closed) { $s = 1; continue; }
161627
+ /* */ if (s.closed.Load()) { $s = 1; continue; }
161375
161628
  /* */ $s = 2; continue;
161376
- /* if (s.closed) { */ case 1:
161629
+ /* if (s.closed.Load()) { */ case 1:
161377
161630
  _tmp = 0;
161378
161631
  _r$1 = errs.Errorf("Client is already closed", sliceType.nil); /* */ $s = 3; case 3: if($c) { $c = false; _r$1 = _r$1.$blk(); } if (_r$1 && _r$1.$blk !== undefined) { break s; }
161379
161632
  _tmp$1 = _r$1;
@@ -161396,9 +161649,9 @@ $packages["github.com/supraio/client-daemon/pkg/netclient"] = (function() {
161396
161649
  /* if (!($interfaceIsEqual(closeErr, $ifaceNil))) { */ case 9:
161397
161650
  $r = errs.Print("Close error", closeErr); /* */ $s = 11; case 11: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
161398
161651
  /* } */ case 10:
161399
- /* */ if (!($interfaceIsEqual(err, io.EOF)) && !s.closed) { $s = 12; continue; }
161652
+ /* */ if (!($interfaceIsEqual(err, io.EOF)) && !s.closed.Load()) { $s = 12; continue; }
161400
161653
  /* */ $s = 13; continue;
161401
- /* if (!($interfaceIsEqual(err, io.EOF)) && !s.closed) { */ case 12:
161654
+ /* if (!($interfaceIsEqual(err, io.EOF)) && !s.closed.Load()) { */ case 12:
161402
161655
  $r = errs.Print("Data error", err); /* */ $s = 14; case 14: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
161403
161656
  /* } */ case 13:
161404
161657
  _tmp$2 = 0;
@@ -161459,10 +161712,9 @@ $packages["github.com/supraio/client-daemon/pkg/netclient"] = (function() {
161459
161712
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
161460
161713
  s = this;
161461
161714
  $r = log.Printf("Metadata server is closing. Reason: %s", new sliceType([new $String(reason)])); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
161462
- if (s.closed) {
161715
+ if (s.closed.Swap(true)) {
161463
161716
  $s = -1; return $ifaceNil;
161464
161717
  }
161465
- s.closed = true;
161466
161718
  _r$1 = s.closeClient(); /* */ $s = 2; case 2: if($c) { $c = false; _r$1 = _r$1.$blk(); } if (_r$1 && _r$1.$blk !== undefined) { break s; }
161467
161719
  err = _r$1;
161468
161720
  _ref = s.onClose;
@@ -161483,7 +161735,7 @@ $packages["github.com/supraio/client-daemon/pkg/netclient"] = (function() {
161483
161735
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
161484
161736
  s = this;
161485
161737
  /* while (true) { */ case 1:
161486
- /* if (!(!s.closed)) { break; } */ if(!(!s.closed)) { $s = 2; continue; }
161738
+ /* if (!(!s.closed.Load())) { break; } */ if(!(!s.closed.Load())) { $s = 2; continue; }
161487
161739
  _r$1 = s.framer.Receive(); /* */ $s = 3; case 3: if($c) { $c = false; _r$1 = _r$1.$blk(); } if (_r$1 && _r$1.$blk !== undefined) { break s; }
161488
161740
  _tuple = _r$1;
161489
161741
  dataBuffer = _tuple[0];
@@ -161499,9 +161751,9 @@ $packages["github.com/supraio/client-daemon/pkg/netclient"] = (function() {
161499
161751
  /* if (!($interfaceIsEqual(closeErr, $ifaceNil))) { */ case 8:
161500
161752
  $r = errs.Print("Close error", closeErr); /* */ $s = 10; case 10: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
161501
161753
  /* } */ case 9:
161502
- /* */ if (!($interfaceIsEqual(err, io.EOF)) && !s.closed) { $s = 11; continue; }
161754
+ /* */ if (!($interfaceIsEqual(err, io.EOF)) && !s.closed.Load()) { $s = 11; continue; }
161503
161755
  /* */ $s = 12; continue;
161504
- /* if (!($interfaceIsEqual(err, io.EOF)) && !s.closed) { */ case 11:
161756
+ /* if (!($interfaceIsEqual(err, io.EOF)) && !s.closed.Load()) { */ case 11:
161505
161757
  $r = errs.Print("Data error", err); /* */ $s = 13; case 13: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
161506
161758
  /* } */ case 12:
161507
161759
  $s = -1; return;
@@ -161661,7 +161913,7 @@ $packages["github.com/supraio/client-daemon/pkg/netclient"] = (function() {
161661
161913
  };
161662
161914
  $pkg.NewMetadataClient = NewMetadataClient;
161663
161915
  MetadataClient.ptr.prototype.Connect = function() {
161664
- var {$24r, $24r$1, _r$1, _r$2, _r$3, _r$4, _r$5, _tmp, _tmp$1, _tmp$2, _tmp$3, _tmp$4, _tmp$5, _tmp$6, _tmp$7, _tmp$8, _tmp$9, _tuple, _tuple$1, c, err, framer, readyBuffer, readyMsg, server, $s, $r, $c} = $restore(this, {});
161916
+ var {$24r, $24r$1, _r$1, _r$2, _r$3, _r$4, _r$5, _r$6, _tmp, _tmp$1, _tmp$2, _tmp$3, _tmp$4, _tmp$5, _tmp$6, _tmp$7, _tmp$8, _tmp$9, _tuple, _tuple$1, c, err, framer, readyBuffer, readyMsg, server, $s, $r, $c} = $restore(this, {});
161665
161917
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
161666
161918
  c = [c];
161667
161919
  server = ptrType$1.nil;
@@ -161725,13 +161977,14 @@ $packages["github.com/supraio/client-daemon/pkg/netclient"] = (function() {
161725
161977
  $24r$1 = [server, err];
161726
161978
  $s = 14; case 14: return $24r$1;
161727
161979
  /* } */ case 8:
161728
- server.start();
161980
+ _r$6 = server.start(); /* */ $s = 15; case 15: if($c) { $c = false; _r$6 = _r$6.$blk(); } if (_r$6 && _r$6.$blk !== undefined) { break s; }
161981
+ _r$6;
161729
161982
  _tmp$8 = server;
161730
161983
  _tmp$9 = $ifaceNil;
161731
161984
  server = _tmp$8;
161732
161985
  err = _tmp$9;
161733
161986
  $s = -1; return [server, err];
161734
- /* */ } return; } var $f = {$blk: MetadataClient.ptr.prototype.Connect, $c: true, $r, $24r, $24r$1, _r$1, _r$2, _r$3, _r$4, _r$5, _tmp, _tmp$1, _tmp$2, _tmp$3, _tmp$4, _tmp$5, _tmp$6, _tmp$7, _tmp$8, _tmp$9, _tuple, _tuple$1, c, err, framer, readyBuffer, readyMsg, server, $s};return $f;
161987
+ /* */ } return; } var $f = {$blk: MetadataClient.ptr.prototype.Connect, $c: true, $r, $24r, $24r$1, _r$1, _r$2, _r$3, _r$4, _r$5, _r$6, _tmp, _tmp$1, _tmp$2, _tmp$3, _tmp$4, _tmp$5, _tmp$6, _tmp$7, _tmp$8, _tmp$9, _tuple, _tuple$1, c, err, framer, readyBuffer, readyMsg, server, $s};return $f;
161735
161988
  };
161736
161989
  MetadataClient.prototype.Connect = function() { return this.$val.Connect(); };
161737
161990
  NewFramer = function(readerWriter) {
@@ -161818,15 +162071,15 @@ $packages["github.com/supraio/client-daemon/pkg/netclient"] = (function() {
161818
162071
  /* */ } return; } var $f = {$blk: Framer.ptr.prototype.Receive, $c: true, $r, $24r, _r$1, _r$2, _tuple, decodedFrame, err, err$1, f, frame, $s};return $f;
161819
162072
  };
161820
162073
  Framer.prototype.Receive = function() { return this.$val.Receive(); };
161821
- ptrType$3.methods = [{prop: "Start", name: "Start", pkg: "", typ: $funcType([], [], false)}, {prop: "Close", name: "Close", pkg: "", typ: $funcType([], [], false)}, {prop: "startPinging", name: "startPinging", pkg: "github.com/supraio/client-daemon/pkg/netclient", typ: $funcType([], [], false)}];
161822
- ptrType$1.methods = [{prop: "start", name: "start", pkg: "github.com/supraio/client-daemon/pkg/netclient", typ: $funcType([], [], false)}, {prop: "Send", name: "Send", pkg: "", typ: $funcType([sliceType$1], [$Int, $error], false)}, {prop: "OnClose", name: "OnClose", pkg: "", typ: $funcType([funcType], [], false)}, {prop: "OnMessage", name: "OnMessage", pkg: "", typ: $funcType([funcType$2], [$Int], false)}, {prop: "OffMessage", name: "OffMessage", pkg: "", typ: $funcType([$Int], [], false)}, {prop: "Close", name: "Close", pkg: "", typ: $funcType([$String], [$error], false)}, {prop: "handleData", name: "handleData", pkg: "github.com/supraio/client-daemon/pkg/netclient", typ: $funcType([], [], false)}];
162074
+ ptrType$3.methods = [{prop: "Start", name: "Start", pkg: "", typ: $funcType([], [], false)}, {prop: "Close", name: "Close", pkg: "", typ: $funcType([], [], false)}, {prop: "Wait", name: "Wait", pkg: "", typ: $funcType([time.Duration], [$Bool], false)}, {prop: "startPinging", name: "startPinging", pkg: "github.com/supraio/client-daemon/pkg/netclient", typ: $funcType([], [], false)}];
162075
+ ptrType$1.methods = [{prop: "start", name: "start", pkg: "github.com/supraio/client-daemon/pkg/netclient", typ: $funcType([], [ptrType$3], false)}, {prop: "startPinger", name: "startPinger", pkg: "github.com/supraio/client-daemon/pkg/netclient", typ: $funcType([ptrType$3], [ptrType$3], false)}, {prop: "Send", name: "Send", pkg: "", typ: $funcType([sliceType$1], [$Int, $error], false)}, {prop: "OnClose", name: "OnClose", pkg: "", typ: $funcType([funcType], [], false)}, {prop: "OnMessage", name: "OnMessage", pkg: "", typ: $funcType([funcType$3], [$Int], false)}, {prop: "OffMessage", name: "OffMessage", pkg: "", typ: $funcType([$Int], [], false)}, {prop: "Close", name: "Close", pkg: "", typ: $funcType([$String], [$error], false)}, {prop: "handleData", name: "handleData", pkg: "github.com/supraio/client-daemon/pkg/netclient", typ: $funcType([], [], false)}];
161823
162076
  ptrType$4.methods = [{prop: "Close", name: "Close", pkg: "", typ: $funcType([], [], false)}, {prop: "SendServerWaitResponse", name: "SendServerWaitResponse", pkg: "", typ: $funcType([message.MsgType, sliceType$1], [sliceType$1, $error], false)}, {prop: "handleServerData", name: "handleServerData", pkg: "github.com/supraio/client-daemon/pkg/netclient", typ: $funcType([message.MsgType, sliceType$1], [], false)}];
161824
162077
  ptrType$5.methods = [{prop: "Send", name: "Send", pkg: "", typ: $funcType([message.MsgType, sliceType$1], [$error], false)}];
161825
162078
  ptrType$6.methods = [{prop: "Connect", name: "Connect", pkg: "", typ: $funcType([], [ptrType$1, $error], false)}];
161826
162079
  ptrType.methods = [{prop: "Send", name: "Send", pkg: "", typ: $funcType([sliceType$1], [$Int, $error], false)}, {prop: "Receive", name: "Receive", pkg: "", typ: $funcType([], [sliceType$1, $error], false)}];
161827
- Pinger.init("github.com/supraio/client-daemon/pkg/netclient", [{prop: "messageSender", name: "messageSender", embedded: false, exported: false, typ: message.Sender, tag: ""}, {prop: "closed", name: "closed", embedded: false, exported: false, typ: $Bool, tag: ""}]);
161828
- messageCallback.init("github.com/supraio/client-daemon/pkg/netclient", [{prop: "id", name: "id", embedded: false, exported: false, typ: $Int, tag: ""}, {prop: "callback", name: "callback", embedded: false, exported: false, typ: funcType$2, tag: ""}]);
161829
- MetadataServer.init("github.com/supraio/client-daemon/pkg/netclient", [{prop: "framer", name: "framer", embedded: false, exported: false, typ: ptrType, tag: ""}, {prop: "closeClient", name: "closeClient", embedded: false, exported: false, typ: funcType$3, tag: ""}, {prop: "closed", name: "closed", embedded: false, exported: false, typ: $Bool, tag: ""}, {prop: "onClose", name: "onClose", embedded: false, exported: false, typ: sliceType$2, tag: ""}, {prop: "onMessage", name: "onMessage", embedded: false, exported: false, typ: sliceType$3, tag: ""}, {prop: "nextMessageID", name: "nextMessageID", embedded: false, exported: false, typ: $Int, tag: ""}]);
162080
+ Pinger.init("github.com/supraio/client-daemon/pkg/netclient", [{prop: "messageSender", name: "messageSender", embedded: false, exported: false, typ: message.Sender, tag: ""}, {prop: "closed", name: "closed", embedded: false, exported: false, typ: $Bool, tag: ""}, {prop: "closeMu", name: "closeMu", embedded: false, exported: false, typ: sync.Mutex, tag: ""}, {prop: "done", name: "done", embedded: false, exported: false, typ: chanType, tag: ""}, {prop: "stopped", name: "stopped", embedded: false, exported: false, typ: chanType, tag: ""}, {prop: "beforeSend", name: "beforeSend", embedded: false, exported: false, typ: funcType$2, tag: ""}, {prop: "afterSend", name: "afterSend", embedded: false, exported: false, typ: funcType$2, tag: ""}, {prop: "onClose", name: "onClose", embedded: false, exported: false, typ: funcType$2, tag: ""}]);
162081
+ messageCallback.init("github.com/supraio/client-daemon/pkg/netclient", [{prop: "id", name: "id", embedded: false, exported: false, typ: $Int, tag: ""}, {prop: "callback", name: "callback", embedded: false, exported: false, typ: funcType$3, tag: ""}]);
162082
+ MetadataServer.init("github.com/supraio/client-daemon/pkg/netclient", [{prop: "framer", name: "framer", embedded: false, exported: false, typ: ptrType, tag: ""}, {prop: "closeClient", name: "closeClient", embedded: false, exported: false, typ: funcType$4, tag: ""}, {prop: "closed", name: "closed", embedded: false, exported: false, typ: atomic.Bool, tag: ""}, {prop: "onClose", name: "onClose", embedded: false, exported: false, typ: sliceType$2, tag: ""}, {prop: "onMessage", name: "onMessage", embedded: false, exported: false, typ: sliceType$3, tag: ""}, {prop: "nextMessageID", name: "nextMessageID", embedded: false, exported: false, typ: $Int, tag: ""}]);
161830
162083
  response.init("github.com/supraio/client-daemon/pkg/netclient", [{prop: "err", name: "err", embedded: false, exported: false, typ: sliceType$1, tag: ""}, {prop: "data", name: "data", embedded: false, exported: false, typ: sliceType$1, tag: ""}]);
161831
162084
  MetadataResponsiveSender.init("github.com/supraio/client-daemon/pkg/netclient", [{prop: "metadataServer", name: "metadataServer", embedded: false, exported: false, typ: ptrType$1, tag: ""}, {prop: "timeoutDuration", name: "timeoutDuration", embedded: false, exported: false, typ: time.Duration, tag: ""}, {prop: "requests", name: "requests", embedded: false, exported: false, typ: mapType, tag: ""}, {prop: "mutex", name: "mutex", embedded: false, exported: false, typ: sync.Mutex, tag: ""}, {prop: "callbackID", name: "callbackID", embedded: false, exported: false, typ: $Int, tag: ""}]);
161832
162085
  MetadataMessageSender.init("github.com/supraio/client-daemon/pkg/netclient", [{prop: "metadataServer", name: "metadataServer", embedded: false, exported: false, typ: ptrType$1, tag: ""}]);
@@ -161845,8 +162098,9 @@ $packages["github.com/supraio/client-daemon/pkg/netclient"] = (function() {
161845
162098
  $r = io.$init(); /* */ $s = 8; case 8: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
161846
162099
  $r = log.$init(); /* */ $s = 9; case 9: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
161847
162100
  $r = sync.$init(); /* */ $s = 10; case 10: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
161848
- $r = time.$init(); /* */ $s = 11; case 11: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
161849
- _r = fmt.Errorf("frame size exceeded maximum of %d bytes", new sliceType([new $Int(1048576)])); /* */ $s = 12; case 12: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; }
162101
+ $r = atomic.$init(); /* */ $s = 11; case 11: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
162102
+ $r = time.$init(); /* */ $s = 12; case 12: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
162103
+ _r = fmt.Errorf("frame size exceeded maximum of %d bytes", new sliceType([new $Int(1048576)])); /* */ $s = 13; case 13: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; }
161850
162104
  $pkg.ErrFrameTooLarge = _r;
161851
162105
  /* */ } return; } if ($f === undefined) { $f = { $blk: $init }; } $f.$s = $s; $f.$r = $r; return $f;
161852
162106
  };
@@ -161854,13 +162108,16 @@ $packages["github.com/supraio/client-daemon/pkg/netclient"] = (function() {
161854
162108
  return $pkg;
161855
162109
  })();
161856
162110
  $packages["github.com/supraio/client-daemon/pkg/netpacket"] = (function() {
161857
- var $pkg = {}, $init, context, websocket, errs, jshelper, netnacltcp, netsamsungwasmtcp, js, time, SamsungWasmTCPConn, NaClTCPConn, JsWebsocketConn, JsWebsocketWorkerConn, Driver, sliceType, ptrType, mapType, funcType, arrayType, sliceType$1, sliceType$2, ptrType$1, ptrType$2, ptrType$3, ptrType$4, ptrType$5, connects, maxPacketSizes, init, ConnectSamsungWasmTCP, init$1, ConnectNaClTCP, init$2, getPerformanceTimestamp, ConnectJsWebsocket;
162111
+ var $pkg = {}, $init, context, errors, websocket, errs, jshelper, netnacltcp, netsamsungwasmtcp, net, strings, js, time, SamsungWasmTCPConn, NaClTCPConn, JsWebsocketConn, JsWebsocketWorkerConn, Driver, sliceType, ptrType, mapType, funcType, arrayType, sliceType$1, sliceType$2, ptrType$1, ptrType$2, ptrType$3, ptrType$4, ptrType$5, connects, maxPacketSizes, init, ConnectSamsungWasmTCP, init$1, ConnectNaClTCP, init$2, getPerformanceTimestamp, ConnectJsWebsocket;
161858
162112
  context = $packages["context"];
162113
+ errors = $packages["errors"];
161859
162114
  websocket = $packages["github.com/coder/websocket"];
161860
162115
  errs = $packages["github.com/supraio/client-daemon/pkg/errs"];
161861
162116
  jshelper = $packages["github.com/supraio/client-daemon/pkg/jshelper"];
161862
162117
  netnacltcp = $packages["github.com/supraio/client-daemon/pkg/netnacltcp"];
161863
162118
  netsamsungwasmtcp = $packages["github.com/supraio/client-daemon/pkg/netsamsungwasmtcp"];
162119
+ net = $packages["net"];
162120
+ strings = $packages["strings"];
161864
162121
  js = $packages["syscall/js"];
161865
162122
  time = $packages["time"];
161866
162123
  SamsungWasmTCPConn = $pkg.SamsungWasmTCPConn = $newType(0, $kindStruct, "netpacket.SamsungWasmTCPConn", true, "github.com/supraio/client-daemon/pkg/netpacket", true, function(conn_) {
@@ -162187,13 +162444,28 @@ $packages["github.com/supraio/client-daemon/pkg/netpacket"] = (function() {
162187
162444
  };
162188
162445
  JsWebsocketConn.prototype.Read = function(data) { return this.$val.Read(data); };
162189
162446
  JsWebsocketConn.ptr.prototype.Close = function() {
162190
- var {$24r, _r, c, $s, $r, $c} = $restore(this, {});
162447
+ var {_r, _r$1, _r$2, _r$3, _v, c, err, $s, $r, $c} = $restore(this, {});
162191
162448
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
162192
162449
  c = this;
162193
- _r = c.conn.Close(1000, "Closed by client"); /* */ $s = 1; case 1: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; }
162194
- $24r = _r;
162195
- $s = 2; case 2: return $24r;
162196
- /* */ } return; } var $f = {$blk: JsWebsocketConn.ptr.prototype.Close, $c: true, $r, $24r, _r, c, $s};return $f;
162450
+ _r = c.conn.CloseNow(); /* */ $s = 1; case 1: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; }
162451
+ err = _r;
162452
+ if (!(!($interfaceIsEqual(err, $ifaceNil)))) { _v = false; $s = 4; continue s; }
162453
+ _r$1 = errors.Is(err, net.ErrClosed); /* */ $s = 5; case 5: if($c) { $c = false; _r$1 = _r$1.$blk(); } if (_r$1 && _r$1.$blk !== undefined) { break s; }
162454
+ _v = !_r$1; case 4:
162455
+ /* */ if (_v) { $s = 2; continue; }
162456
+ /* */ $s = 3; continue;
162457
+ /* if (_v) { */ case 2:
162458
+ _r$2 = err.Error(); /* */ $s = 8; case 8: if($c) { $c = false; _r$2 = _r$2.$blk(); } if (_r$2 && _r$2.$blk !== undefined) { break s; }
162459
+ _r$3 = strings.Contains(_r$2, "close code"); /* */ $s = 9; case 9: if($c) { $c = false; _r$3 = _r$3.$blk(); } if (_r$3 && _r$3.$blk !== undefined) { break s; }
162460
+ /* */ if (_r$3) { $s = 6; continue; }
162461
+ /* */ $s = 7; continue;
162462
+ /* if (_r$3) { */ case 6:
162463
+ $s = -1; return $ifaceNil;
162464
+ /* } */ case 7:
162465
+ $s = -1; return err;
162466
+ /* } */ case 3:
162467
+ $s = -1; return $ifaceNil;
162468
+ /* */ } return; } var $f = {$blk: JsWebsocketConn.ptr.prototype.Close, $c: true, $r, _r, _r$1, _r$2, _r$3, _v, c, err, $s};return $f;
162197
162469
  };
162198
162470
  JsWebsocketConn.prototype.Close = function() { return this.$val.Close(); };
162199
162471
  JsWebsocketWorkerConn.ptr.prototype.Write = function(data) {
@@ -162358,13 +162630,16 @@ $packages["github.com/supraio/client-daemon/pkg/netpacket"] = (function() {
162358
162630
  $pkg.$init = function() {};
162359
162631
  /* */ var $f, $c = false, $s = 0, $r; if (this !== undefined && this.$blk !== undefined) { $f = this; $c = true; $s = $f.$s; $r = $f.$r; } s: while (true) { switch ($s) { case 0:
162360
162632
  $r = context.$init(); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
162361
- $r = websocket.$init(); /* */ $s = 2; case 2: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
162362
- $r = errs.$init(); /* */ $s = 3; case 3: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
162363
- $r = jshelper.$init(); /* */ $s = 4; case 4: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
162364
- $r = netnacltcp.$init(); /* */ $s = 5; case 5: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
162365
- $r = netsamsungwasmtcp.$init(); /* */ $s = 6; case 6: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
162366
- $r = js.$init(); /* */ $s = 7; case 7: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
162367
- $r = time.$init(); /* */ $s = 8; case 8: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
162633
+ $r = errors.$init(); /* */ $s = 2; case 2: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
162634
+ $r = websocket.$init(); /* */ $s = 3; case 3: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
162635
+ $r = errs.$init(); /* */ $s = 4; case 4: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
162636
+ $r = jshelper.$init(); /* */ $s = 5; case 5: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
162637
+ $r = netnacltcp.$init(); /* */ $s = 6; case 6: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
162638
+ $r = netsamsungwasmtcp.$init(); /* */ $s = 7; case 7: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
162639
+ $r = net.$init(); /* */ $s = 8; case 8: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
162640
+ $r = strings.$init(); /* */ $s = 9; case 9: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
162641
+ $r = js.$init(); /* */ $s = 10; case 10: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
162642
+ $r = time.$init(); /* */ $s = 11; case 11: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
162368
162643
  connects = $makeMap(Driver.keyFor, []);
162369
162644
  maxPacketSizes = $makeMap(Driver.keyFor, []);
162370
162645
  init();
@@ -183246,7 +183521,7 @@ $packages["golang.org/x/mobile/event/touch"] = (function() {
183246
183521
  return $pkg;
183247
183522
  })();
183248
183523
  $packages["golang.org/x/exp/shiny/driver/util/dom"] = (function() {
183249
- var $pkg = {}, $init, focus, key, mouse, size, touch, geom, math, strings, js, DomEvents, sliceType, funcType, sliceType$1, sliceType$2, chanType, ptrType, keyCodesMap, keyCodesByKeyMap, GetDocWidth, GetDocHeight, GetScreenWidth, GetScreenHeight, GetBrowserZoomRatio, SetWindowWidth, SetWindowHeight, GetOrientation, NewDomEvents, getMouseDirection, getWheelButton, getMouseButton, getEventModifiers, isFocusIn, getKeyRune, getKeyDirection, getKeyCode;
183524
+ var $pkg = {}, $init, focus, key, mouse, size, touch, geom, math, strings, js, DomEvents, sliceType, funcType, arrayType, sliceType$1, sliceType$2, chanType, ptrType, keyCodesMap, keyCodesByKeyMap, GetDocWidth, GetDocHeight, GetScreenWidth, GetScreenHeight, SetWindowWidth, SetWindowHeight, GetOrientation, NewDomEventsForTarget, getMouseDirection, getWheelButton, getMouseButton, getEventModifiers, isFocusIn, getKeyRune, getKeyDirection, getKeyCode;
183250
183525
  focus = $packages["golang.org/x/mobile/event/focus"];
183251
183526
  key = $packages["golang.org/x/mobile/event/key"];
183252
183527
  mouse = $packages["golang.org/x/mobile/event/mouse"];
@@ -183256,18 +183531,21 @@ $packages["golang.org/x/exp/shiny/driver/util/dom"] = (function() {
183256
183531
  math = $packages["math"];
183257
183532
  strings = $packages["strings"];
183258
183533
  js = $packages["syscall/js"];
183259
- DomEvents = $pkg.DomEvents = $newType(0, $kindStruct, "dom.DomEvents", true, "golang.org/x/exp/shiny/driver/util/dom", true, function(eventChan_, releases_) {
183534
+ DomEvents = $pkg.DomEvents = $newType(0, $kindStruct, "dom.DomEvents", true, "golang.org/x/exp/shiny/driver/util/dom", true, function(eventChan_, inputTarget_, releases_) {
183260
183535
  this.$val = this;
183261
183536
  if (arguments.length === 0) {
183262
183537
  this.eventChan = $chanNil;
183538
+ this.inputTarget = new js.Value.ptr(null, false, arrayType.zero());
183263
183539
  this.releases = sliceType$1.nil;
183264
183540
  return;
183265
183541
  }
183266
183542
  this.eventChan = eventChan_;
183543
+ this.inputTarget = inputTarget_;
183267
183544
  this.releases = releases_;
183268
183545
  });
183269
183546
  sliceType = $sliceType($emptyInterface);
183270
183547
  funcType = $funcType([], [], false);
183548
+ arrayType = $arrayType(funcType, 0);
183271
183549
  sliceType$1 = $sliceType(funcType);
183272
183550
  sliceType$2 = $sliceType($Int32);
183273
183551
  chanType = $chanType($emptyInterface, false, false);
@@ -183288,20 +183566,6 @@ $packages["golang.org/x/exp/shiny/driver/util/dom"] = (function() {
183288
183566
  return $clone($clone($clone(js.Global(), js.Value).Get("screen"), js.Value).Get("height"), js.Value).Int();
183289
183567
  };
183290
183568
  $pkg.GetScreenHeight = GetScreenHeight;
183291
- GetBrowserZoomRatio = function() {
183292
- var chromeZoom1, chromeZoom2, chromeZoom3, docElClientWidth, scrollerWidthInNoZoom, scrollerWidthInZoom1, scrollerWidthInZoom2, windowInnerWidth, windowOuterWidth;
183293
- windowInnerWidth = $clone($clone(js.Global(), js.Value).Get("innerWidth"), js.Value).Float();
183294
- windowOuterWidth = $clone($clone(js.Global(), js.Value).Get("outerWidth"), js.Value).Float();
183295
- docElClientWidth = $clone($clone($clone($clone(js.Global(), js.Value).Get("document"), js.Value).Get("documentElement"), js.Value).Get("clientWidth"), js.Value).Float();
183296
- scrollerWidthInNoZoom = windowInnerWidth - docElClientWidth;
183297
- chromeZoom1 = (windowOuterWidth - scrollerWidthInNoZoom) / windowInnerWidth;
183298
- scrollerWidthInZoom1 = math.Round(scrollerWidthInNoZoom * chromeZoom1);
183299
- chromeZoom2 = (windowOuterWidth - scrollerWidthInZoom1) / windowInnerWidth;
183300
- scrollerWidthInZoom2 = math.Round(scrollerWidthInNoZoom * chromeZoom2);
183301
- chromeZoom3 = (windowOuterWidth - scrollerWidthInZoom2) / windowInnerWidth;
183302
- return chromeZoom3;
183303
- };
183304
- $pkg.GetBrowserZoomRatio = GetBrowserZoomRatio;
183305
183569
  SetWindowWidth = function(newInnerWidth) {
183306
183570
  var {_r, innerWidth, newInnerWidth, newOuterWidth, outerHeight, outerWidth, screenWidth, $s, $r, $c} = $restore(this, {newInnerWidth});
183307
183571
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
@@ -183367,10 +183631,11 @@ $packages["golang.org/x/exp/shiny/driver/util/dom"] = (function() {
183367
183631
  /* */ } return; } } catch(err) { $err = err; $s = -1; } finally { $callDeferred($deferred, $err); if (!$curGoroutine.asleep) { return orientation[0]; } if($curGoroutine.asleep) { var $f = {$blk: GetOrientation, $c: true, $r, $24r, $24r$1, $24r$2, orientation, orientationType, $s, $deferred};return $f; } }
183368
183632
  };
183369
183633
  $pkg.GetOrientation = GetOrientation;
183370
- NewDomEvents = function() {
183371
- return new DomEvents.ptr(new $Chan($emptyInterface, 256), $makeSlice(sliceType$1, 0));
183634
+ NewDomEventsForTarget = function(inputTarget) {
183635
+ var inputTarget;
183636
+ return new DomEvents.ptr(new $Chan($emptyInterface, 256), $clone(inputTarget, js.Value), $makeSlice(sliceType$1, 0));
183372
183637
  };
183373
- $pkg.NewDomEvents = NewDomEvents;
183638
+ $pkg.NewDomEventsForTarget = NewDomEventsForTarget;
183374
183639
  DomEvents.ptr.prototype.GetEventChan = function() {
183375
183640
  var d;
183376
183641
  d = this;
@@ -183450,6 +183715,22 @@ $packages["golang.org/x/exp/shiny/driver/util/dom"] = (function() {
183450
183715
  /* */ } return; } var $f = {$blk: DomEvents.ptr.prototype.emitSizeEvent, $c: true, $r, _q, _q$1, _r, d, height, orientation, pixelsPerPt, width, x, $s};return $f;
183451
183716
  };
183452
183717
  DomEvents.prototype.emitSizeEvent = function() { return this.$val.emitSizeEvent(); };
183718
+ DomEvents.ptr.prototype.inputPosition = function(ev) {
183719
+ var {_r, d, ev, getBoundingClientRect, rect, $s, $r, $c} = $restore(this, {ev});
183720
+ /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
183721
+ d = this;
183722
+ getBoundingClientRect = $clone($clone(d.inputTarget, js.Value).Get("getBoundingClientRect"), js.Value);
183723
+ /* */ if ($clone(getBoundingClientRect, js.Value).Type() === 7) { $s = 1; continue; }
183724
+ /* */ $s = 2; continue;
183725
+ /* if ($clone(getBoundingClientRect, js.Value).Type() === 7) { */ case 1:
183726
+ _r = $clone(d.inputTarget, js.Value).Call("getBoundingClientRect", sliceType.nil); /* */ $s = 3; case 3: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; }
183727
+ rect = $clone(_r, js.Value);
183728
+ $s = -1; return [($fround($clone($clone(ev, js.Value).Get("clientX"), js.Value).Float() - $clone($clone(rect, js.Value).Get("left"), js.Value).Float())), ($fround($clone($clone(ev, js.Value).Get("clientY"), js.Value).Float() - $clone($clone(rect, js.Value).Get("top"), js.Value).Float()))];
183729
+ /* } */ case 2:
183730
+ $s = -1; return [($fround($clone($clone(ev, js.Value).Get("offsetX"), js.Value).Float())), ($fround($clone($clone(ev, js.Value).Get("offsetY"), js.Value).Float()))];
183731
+ /* */ } return; } var $f = {$blk: DomEvents.ptr.prototype.inputPosition, $c: true, $r, _r, d, ev, getBoundingClientRect, rect, $s};return $f;
183732
+ };
183733
+ DomEvents.prototype.inputPosition = function(ev) { return this.$val.inputPosition(ev); };
183453
183734
  DomEvents.ptr.prototype.bindMouseEvents = function() {
183454
183735
  var {_r, _r$1, _r$2, _r$3, d, onClick, onMove, onWheel, $s, $r, $c} = $restore(this, {});
183455
183736
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
@@ -183459,48 +183740,60 @@ $packages["golang.org/x/exp/shiny/driver/util/dom"] = (function() {
183459
183740
  onWheel = [onWheel];
183460
183741
  d[0] = this;
183461
183742
  onMove[0] = $clone(js.FuncOf((function(d, onClick, onMove, onWheel) { return function $b(this$1, args) {
183462
- var {_r, args, this$1, x, $s, $r, $c} = $restore(this, {this$1, args});
183743
+ var {_r, _r$1, _tuple, args, this$1, x, x$1, y, $s, $r, $c} = $restore(this, {this$1, args});
183463
183744
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
183464
183745
  _r = $clone((0 >= args.$length ? ($throwRuntimeError("index out of range"), undefined) : args.$array[args.$offset + 0]), js.Value).Call("preventDefault", sliceType.nil); /* */ $s = 1; case 1: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; }
183465
183746
  _r;
183466
- $r = $send(d[0].eventChan, (x = new mouse.Event.ptr(($fround($clone($clone((0 >= args.$length ? ($throwRuntimeError("index out of range"), undefined) : args.$array[args.$offset + 0]), js.Value).Get("offsetX"), js.Value).Float())), ($fround($clone($clone((0 >= args.$length ? ($throwRuntimeError("index out of range"), undefined) : args.$array[args.$offset + 0]), js.Value).Get("offsetY"), js.Value).Float())), 0, getEventModifiers($clone((0 >= args.$length ? ($throwRuntimeError("index out of range"), undefined) : args.$array[args.$offset + 0]), js.Value)), 0), new x.constructor.elem(x))); /* */ $s = 2; case 2: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
183747
+ _r$1 = d[0].inputPosition($clone((0 >= args.$length ? ($throwRuntimeError("index out of range"), undefined) : args.$array[args.$offset + 0]), js.Value)); /* */ $s = 2; case 2: if($c) { $c = false; _r$1 = _r$1.$blk(); } if (_r$1 && _r$1.$blk !== undefined) { break s; }
183748
+ _tuple = _r$1;
183749
+ x = _tuple[0];
183750
+ y = _tuple[1];
183751
+ $r = $send(d[0].eventChan, (x$1 = new mouse.Event.ptr(x, y, 0, getEventModifiers($clone((0 >= args.$length ? ($throwRuntimeError("index out of range"), undefined) : args.$array[args.$offset + 0]), js.Value)), 0), new x$1.constructor.elem(x$1))); /* */ $s = 3; case 3: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
183467
183752
  $s = -1; return $ifaceNil;
183468
- /* */ } return; } var $f = {$blk: $b, $c: true, $r, _r, args, this$1, x, $s};return $f;
183753
+ /* */ } return; } var $f = {$blk: $b, $c: true, $r, _r, _r$1, _tuple, args, this$1, x, x$1, y, $s};return $f;
183469
183754
  }; })(d, onClick, onMove, onWheel)), js.Func);
183470
- _r = $clone(js.Global(), js.Value).Call("addEventListener", new sliceType([new $String("mousemove"), new onMove[0].constructor.elem(onMove[0])])); /* */ $s = 1; case 1: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; }
183755
+ _r = $clone(d[0].inputTarget, js.Value).Call("addEventListener", new sliceType([new $String("mousemove"), new onMove[0].constructor.elem(onMove[0])])); /* */ $s = 1; case 1: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; }
183471
183756
  _r;
183472
183757
  onClick[0] = $clone(js.FuncOf((function(d, onClick, onMove, onWheel) { return function $b(this$1, args) {
183473
- var {_r$1, args, this$1, x, $s, $r, $c} = $restore(this, {this$1, args});
183758
+ var {_r$1, _r$2, _tuple, args, this$1, x, x$1, y, $s, $r, $c} = $restore(this, {this$1, args});
183474
183759
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
183475
183760
  _r$1 = $clone((0 >= args.$length ? ($throwRuntimeError("index out of range"), undefined) : args.$array[args.$offset + 0]), js.Value).Call("preventDefault", sliceType.nil); /* */ $s = 1; case 1: if($c) { $c = false; _r$1 = _r$1.$blk(); } if (_r$1 && _r$1.$blk !== undefined) { break s; }
183476
183761
  _r$1;
183477
- $r = $send(d[0].eventChan, (x = new mouse.Event.ptr(($fround($clone($clone((0 >= args.$length ? ($throwRuntimeError("index out of range"), undefined) : args.$array[args.$offset + 0]), js.Value).Get("offsetX"), js.Value).Float())), ($fround($clone($clone((0 >= args.$length ? ($throwRuntimeError("index out of range"), undefined) : args.$array[args.$offset + 0]), js.Value).Get("offsetY"), js.Value).Float())), getMouseButton($clone((0 >= args.$length ? ($throwRuntimeError("index out of range"), undefined) : args.$array[args.$offset + 0]), js.Value)), getEventModifiers($clone((0 >= args.$length ? ($throwRuntimeError("index out of range"), undefined) : args.$array[args.$offset + 0]), js.Value)), getMouseDirection($clone((0 >= args.$length ? ($throwRuntimeError("index out of range"), undefined) : args.$array[args.$offset + 0]), js.Value))), new x.constructor.elem(x))); /* */ $s = 2; case 2: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
183762
+ _r$2 = d[0].inputPosition($clone((0 >= args.$length ? ($throwRuntimeError("index out of range"), undefined) : args.$array[args.$offset + 0]), js.Value)); /* */ $s = 2; case 2: if($c) { $c = false; _r$2 = _r$2.$blk(); } if (_r$2 && _r$2.$blk !== undefined) { break s; }
183763
+ _tuple = _r$2;
183764
+ x = _tuple[0];
183765
+ y = _tuple[1];
183766
+ $r = $send(d[0].eventChan, (x$1 = new mouse.Event.ptr(x, y, getMouseButton($clone((0 >= args.$length ? ($throwRuntimeError("index out of range"), undefined) : args.$array[args.$offset + 0]), js.Value)), getEventModifiers($clone((0 >= args.$length ? ($throwRuntimeError("index out of range"), undefined) : args.$array[args.$offset + 0]), js.Value)), getMouseDirection($clone((0 >= args.$length ? ($throwRuntimeError("index out of range"), undefined) : args.$array[args.$offset + 0]), js.Value))), new x$1.constructor.elem(x$1))); /* */ $s = 3; case 3: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
183478
183767
  $s = -1; return $ifaceNil;
183479
- /* */ } return; } var $f = {$blk: $b, $c: true, $r, _r$1, args, this$1, x, $s};return $f;
183768
+ /* */ } return; } var $f = {$blk: $b, $c: true, $r, _r$1, _r$2, _tuple, args, this$1, x, x$1, y, $s};return $f;
183480
183769
  }; })(d, onClick, onMove, onWheel)), js.Func);
183481
- _r$1 = $clone(js.Global(), js.Value).Call("addEventListener", new sliceType([new $String("mousedown"), new onClick[0].constructor.elem(onClick[0])])); /* */ $s = 2; case 2: if($c) { $c = false; _r$1 = _r$1.$blk(); } if (_r$1 && _r$1.$blk !== undefined) { break s; }
183770
+ _r$1 = $clone(d[0].inputTarget, js.Value).Call("addEventListener", new sliceType([new $String("mousedown"), new onClick[0].constructor.elem(onClick[0])])); /* */ $s = 2; case 2: if($c) { $c = false; _r$1 = _r$1.$blk(); } if (_r$1 && _r$1.$blk !== undefined) { break s; }
183482
183771
  _r$1;
183483
- _r$2 = $clone(js.Global(), js.Value).Call("addEventListener", new sliceType([new $String("mouseup"), new onClick[0].constructor.elem(onClick[0])])); /* */ $s = 3; case 3: if($c) { $c = false; _r$2 = _r$2.$blk(); } if (_r$2 && _r$2.$blk !== undefined) { break s; }
183772
+ _r$2 = $clone(d[0].inputTarget, js.Value).Call("addEventListener", new sliceType([new $String("mouseup"), new onClick[0].constructor.elem(onClick[0])])); /* */ $s = 3; case 3: if($c) { $c = false; _r$2 = _r$2.$blk(); } if (_r$2 && _r$2.$blk !== undefined) { break s; }
183484
183773
  _r$2;
183485
183774
  onWheel[0] = $clone(js.FuncOf((function(d, onClick, onMove, onWheel) { return function $b(this$1, args) {
183486
- var {args, this$1, x, $s, $r, $c} = $restore(this, {this$1, args});
183775
+ var {_r$3, _tuple, args, this$1, x, x$1, y, $s, $r, $c} = $restore(this, {this$1, args});
183487
183776
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
183488
- $r = $send(d[0].eventChan, (x = new mouse.Event.ptr(($fround($clone($clone((0 >= args.$length ? ($throwRuntimeError("index out of range"), undefined) : args.$array[args.$offset + 0]), js.Value).Get("offsetX"), js.Value).Float())), ($fround($clone($clone((0 >= args.$length ? ($throwRuntimeError("index out of range"), undefined) : args.$array[args.$offset + 0]), js.Value).Get("offsetY"), js.Value).Float())), getWheelButton($clone((0 >= args.$length ? ($throwRuntimeError("index out of range"), undefined) : args.$array[args.$offset + 0]), js.Value)), getEventModifiers($clone((0 >= args.$length ? ($throwRuntimeError("index out of range"), undefined) : args.$array[args.$offset + 0]), js.Value)), 3), new x.constructor.elem(x))); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
183777
+ _r$3 = d[0].inputPosition($clone((0 >= args.$length ? ($throwRuntimeError("index out of range"), undefined) : args.$array[args.$offset + 0]), js.Value)); /* */ $s = 1; case 1: if($c) { $c = false; _r$3 = _r$3.$blk(); } if (_r$3 && _r$3.$blk !== undefined) { break s; }
183778
+ _tuple = _r$3;
183779
+ x = _tuple[0];
183780
+ y = _tuple[1];
183781
+ $r = $send(d[0].eventChan, (x$1 = new mouse.Event.ptr(x, y, getWheelButton($clone((0 >= args.$length ? ($throwRuntimeError("index out of range"), undefined) : args.$array[args.$offset + 0]), js.Value)), getEventModifiers($clone((0 >= args.$length ? ($throwRuntimeError("index out of range"), undefined) : args.$array[args.$offset + 0]), js.Value)), 3), new x$1.constructor.elem(x$1))); /* */ $s = 2; case 2: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
183489
183782
  $s = -1; return $ifaceNil;
183490
- /* */ } return; } var $f = {$blk: $b, $c: true, $r, args, this$1, x, $s};return $f;
183783
+ /* */ } return; } var $f = {$blk: $b, $c: true, $r, _r$3, _tuple, args, this$1, x, x$1, y, $s};return $f;
183491
183784
  }; })(d, onClick, onMove, onWheel)), js.Func);
183492
- _r$3 = $clone(js.Global(), js.Value).Call("addEventListener", new sliceType([new $String("wheel"), new onWheel[0].constructor.elem(onWheel[0])])); /* */ $s = 4; case 4: if($c) { $c = false; _r$3 = _r$3.$blk(); } if (_r$3 && _r$3.$blk !== undefined) { break s; }
183785
+ _r$3 = $clone(d[0].inputTarget, js.Value).Call("addEventListener", new sliceType([new $String("wheel"), new onWheel[0].constructor.elem(onWheel[0])])); /* */ $s = 4; case 4: if($c) { $c = false; _r$3 = _r$3.$blk(); } if (_r$3 && _r$3.$blk !== undefined) { break s; }
183493
183786
  _r$3;
183494
183787
  d[0].releases = $append(d[0].releases, (function(d, onClick, onMove, onWheel) { return function $b() {
183495
183788
  var {_r$4, _r$5, _r$6, _r$7, $s, $r, $c} = $restore(this, {});
183496
183789
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
183497
- _r$4 = $clone(js.Global(), js.Value).Call("removeEventListener", new sliceType([new $String("mousemove"), new onMove[0].constructor.elem(onMove[0])])); /* */ $s = 1; case 1: if($c) { $c = false; _r$4 = _r$4.$blk(); } if (_r$4 && _r$4.$blk !== undefined) { break s; }
183790
+ _r$4 = $clone(d[0].inputTarget, js.Value).Call("removeEventListener", new sliceType([new $String("mousemove"), new onMove[0].constructor.elem(onMove[0])])); /* */ $s = 1; case 1: if($c) { $c = false; _r$4 = _r$4.$blk(); } if (_r$4 && _r$4.$blk !== undefined) { break s; }
183498
183791
  _r$4;
183499
- _r$5 = $clone(js.Global(), js.Value).Call("removeEventListener", new sliceType([new $String("mousedown"), new onClick[0].constructor.elem(onClick[0])])); /* */ $s = 2; case 2: if($c) { $c = false; _r$5 = _r$5.$blk(); } if (_r$5 && _r$5.$blk !== undefined) { break s; }
183792
+ _r$5 = $clone(d[0].inputTarget, js.Value).Call("removeEventListener", new sliceType([new $String("mousedown"), new onClick[0].constructor.elem(onClick[0])])); /* */ $s = 2; case 2: if($c) { $c = false; _r$5 = _r$5.$blk(); } if (_r$5 && _r$5.$blk !== undefined) { break s; }
183500
183793
  _r$5;
183501
- _r$6 = $clone(js.Global(), js.Value).Call("removeEventListener", new sliceType([new $String("mouseup"), new onClick[0].constructor.elem(onClick[0])])); /* */ $s = 3; case 3: if($c) { $c = false; _r$6 = _r$6.$blk(); } if (_r$6 && _r$6.$blk !== undefined) { break s; }
183794
+ _r$6 = $clone(d[0].inputTarget, js.Value).Call("removeEventListener", new sliceType([new $String("mouseup"), new onClick[0].constructor.elem(onClick[0])])); /* */ $s = 3; case 3: if($c) { $c = false; _r$6 = _r$6.$blk(); } if (_r$6 && _r$6.$blk !== undefined) { break s; }
183502
183795
  _r$6;
183503
- _r$7 = $clone(js.Global(), js.Value).Call("removeEventListener", new sliceType([new $String("wheel"), new onWheel[0].constructor.elem(onWheel[0])])); /* */ $s = 4; case 4: if($c) { $c = false; _r$7 = _r$7.$blk(); } if (_r$7 && _r$7.$blk !== undefined) { break s; }
183796
+ _r$7 = $clone(d[0].inputTarget, js.Value).Call("removeEventListener", new sliceType([new $String("wheel"), new onWheel[0].constructor.elem(onWheel[0])])); /* */ $s = 4; case 4: if($c) { $c = false; _r$7 = _r$7.$blk(); } if (_r$7 && _r$7.$blk !== undefined) { break s; }
183504
183797
  _r$7;
183505
183798
  $clone(onMove[0], js.Func).Release();
183506
183799
  $clone(onClick[0], js.Func).Release();
@@ -183696,30 +183989,38 @@ $packages["golang.org/x/exp/shiny/driver/util/dom"] = (function() {
183696
183989
  handler = [handler];
183697
183990
  opts = [opts];
183698
183991
  d[0] = this;
183699
- handler[0] = $clone(js.FuncOf((function(d, eventName, eventType, handler, opts) { return function(this$1, args) {
183700
- var args, changedTouches, ev, t, this$1;
183992
+ handler[0] = $clone(js.FuncOf((function(d, eventName, eventType, handler, opts) { return function $b(this$1, args) {
183993
+ var {_r, _r$1, _tuple, args, changedTouches, ev, t, this$1, x, y, $s, $r, $c} = $restore(this, {this$1, args});
183994
+ /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
183701
183995
  if (args.$length === 0) {
183702
- return $ifaceNil;
183996
+ $s = -1; return $ifaceNil;
183703
183997
  }
183704
183998
  ev = $clone((0 >= args.$length ? ($throwRuntimeError("index out of range"), undefined) : args.$array[args.$offset + 0]), js.Value);
183999
+ _r = $clone(ev, js.Value).Call("preventDefault", sliceType.nil); /* */ $s = 1; case 1: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; }
184000
+ _r;
183705
184001
  changedTouches = $clone($clone(ev, js.Value).Get("changedTouches"), js.Value);
183706
184002
  if ($clone(changedTouches, js.Value).IsUndefined() || $clone(changedTouches, js.Value).IsNull() || ($clone(changedTouches, js.Value).Length() === 0)) {
183707
- return $ifaceNil;
184003
+ $s = -1; return $ifaceNil;
183708
184004
  }
183709
184005
  t = $clone($clone(changedTouches, js.Value).Index(0), js.Value);
183710
- d[0].emitTouchEvent($clone(new touch.Event.ptr(($fround($clone($clone(t, js.Value).Get("clientX"), js.Value).Float())), ($fround($clone($clone(t, js.Value).Get("clientY"), js.Value).Float())), (new touch.Sequence(0, $clone($clone(t, js.Value).Get("identifier"), js.Value).Int())), eventType[0]), touch.Event));
183711
- return $ifaceNil;
184006
+ _r$1 = d[0].inputPosition($clone(t, js.Value)); /* */ $s = 2; case 2: if($c) { $c = false; _r$1 = _r$1.$blk(); } if (_r$1 && _r$1.$blk !== undefined) { break s; }
184007
+ _tuple = _r$1;
184008
+ x = _tuple[0];
184009
+ y = _tuple[1];
184010
+ d[0].emitTouchEvent($clone(new touch.Event.ptr(x, y, (new touch.Sequence(0, $clone($clone(t, js.Value).Get("identifier"), js.Value).Int())), eventType[0]), touch.Event));
184011
+ $s = -1; return $ifaceNil;
184012
+ /* */ } return; } var $f = {$blk: $b, $c: true, $r, _r, _r$1, _tuple, args, changedTouches, ev, t, this$1, x, y, $s};return $f;
183712
184013
  }; })(d, eventName, eventType, handler, opts)), js.Func);
183713
184014
  _r = $clone($clone(js.Global(), js.Value).Get("Object"), js.Value).New(sliceType.nil); /* */ $s = 1; case 1: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; }
183714
184015
  opts[0] = $clone(_r, js.Value);
183715
- $clone(opts[0], js.Value).Set("passive", new $Bool(true));
184016
+ $clone(opts[0], js.Value).Set("passive", new $Bool(false));
183716
184017
  $clone(opts[0], js.Value).Set("capture", new $Bool(false));
183717
- _r$1 = $clone(js.Global(), js.Value).Call("addEventListener", new sliceType([new $String(eventName[0]), new handler[0].constructor.elem(handler[0]), new opts[0].constructor.elem(opts[0])])); /* */ $s = 2; case 2: if($c) { $c = false; _r$1 = _r$1.$blk(); } if (_r$1 && _r$1.$blk !== undefined) { break s; }
184018
+ _r$1 = $clone(d[0].inputTarget, js.Value).Call("addEventListener", new sliceType([new $String(eventName[0]), new handler[0].constructor.elem(handler[0]), new opts[0].constructor.elem(opts[0])])); /* */ $s = 2; case 2: if($c) { $c = false; _r$1 = _r$1.$blk(); } if (_r$1 && _r$1.$blk !== undefined) { break s; }
183718
184019
  _r$1;
183719
184020
  d[0].releases = $append(d[0].releases, (function(d, eventName, eventType, handler, opts) { return function $b() {
183720
184021
  var {_r$2, $s, $r, $c} = $restore(this, {});
183721
184022
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
183722
- _r$2 = $clone(js.Global(), js.Value).Call("removeEventListener", new sliceType([new $String(eventName[0]), new handler[0].constructor.elem(handler[0]), new opts[0].constructor.elem(opts[0])])); /* */ $s = 1; case 1: if($c) { $c = false; _r$2 = _r$2.$blk(); } if (_r$2 && _r$2.$blk !== undefined) { break s; }
184023
+ _r$2 = $clone(d[0].inputTarget, js.Value).Call("removeEventListener", new sliceType([new $String(eventName[0]), new handler[0].constructor.elem(handler[0]), new opts[0].constructor.elem(opts[0])])); /* */ $s = 1; case 1: if($c) { $c = false; _r$2 = _r$2.$blk(); } if (_r$2 && _r$2.$blk !== undefined) { break s; }
183723
184024
  _r$2;
183724
184025
  $clone(handler[0], js.Func).Release();
183725
184026
  $s = -1; return;
@@ -183760,8 +184061,8 @@ $packages["golang.org/x/exp/shiny/driver/util/dom"] = (function() {
183760
184061
  /* */ } return; } var $f = {$blk: DomEvents.ptr.prototype.bindTouchEvents, $c: true, $r, d, $s};return $f;
183761
184062
  };
183762
184063
  DomEvents.prototype.bindTouchEvents = function() { return this.$val.bindTouchEvents(); };
183763
- ptrType.methods = [{prop: "GetEventChan", name: "GetEventChan", pkg: "", typ: $funcType([], [chanType], false)}, {prop: "Release", name: "Release", pkg: "", typ: $funcType([], [], false)}, {prop: "BindEvents", name: "BindEvents", pkg: "", typ: $funcType([], [], false)}, {prop: "bindSizeEvents", name: "bindSizeEvents", pkg: "golang.org/x/exp/shiny/driver/util/dom", typ: $funcType([], [], false)}, {prop: "emitSizeEvent", name: "emitSizeEvent", pkg: "golang.org/x/exp/shiny/driver/util/dom", typ: $funcType([], [], false)}, {prop: "bindMouseEvents", name: "bindMouseEvents", pkg: "golang.org/x/exp/shiny/driver/util/dom", typ: $funcType([], [], false)}, {prop: "bindFocusEvents", name: "bindFocusEvents", pkg: "golang.org/x/exp/shiny/driver/util/dom", typ: $funcType([], [], false)}, {prop: "bindKeyEvents", name: "bindKeyEvents", pkg: "golang.org/x/exp/shiny/driver/util/dom", typ: $funcType([], [], false)}, {prop: "addTouchListener", name: "addTouchListener", pkg: "golang.org/x/exp/shiny/driver/util/dom", typ: $funcType([$String, touch.Type], [], false)}, {prop: "emitTouchEvent", name: "emitTouchEvent", pkg: "golang.org/x/exp/shiny/driver/util/dom", typ: $funcType([touch.Event], [], false)}, {prop: "bindTouchEvents", name: "bindTouchEvents", pkg: "golang.org/x/exp/shiny/driver/util/dom", typ: $funcType([], [], false)}];
183764
- DomEvents.init("golang.org/x/exp/shiny/driver/util/dom", [{prop: "eventChan", name: "eventChan", embedded: false, exported: false, typ: chanType, tag: ""}, {prop: "releases", name: "releases", embedded: false, exported: false, typ: sliceType$1, tag: ""}]);
184064
+ ptrType.methods = [{prop: "GetEventChan", name: "GetEventChan", pkg: "", typ: $funcType([], [chanType], false)}, {prop: "Release", name: "Release", pkg: "", typ: $funcType([], [], false)}, {prop: "BindEvents", name: "BindEvents", pkg: "", typ: $funcType([], [], false)}, {prop: "bindSizeEvents", name: "bindSizeEvents", pkg: "golang.org/x/exp/shiny/driver/util/dom", typ: $funcType([], [], false)}, {prop: "emitSizeEvent", name: "emitSizeEvent", pkg: "golang.org/x/exp/shiny/driver/util/dom", typ: $funcType([], [], false)}, {prop: "inputPosition", name: "inputPosition", pkg: "golang.org/x/exp/shiny/driver/util/dom", typ: $funcType([js.Value], [$Float32, $Float32], false)}, {prop: "bindMouseEvents", name: "bindMouseEvents", pkg: "golang.org/x/exp/shiny/driver/util/dom", typ: $funcType([], [], false)}, {prop: "bindFocusEvents", name: "bindFocusEvents", pkg: "golang.org/x/exp/shiny/driver/util/dom", typ: $funcType([], [], false)}, {prop: "bindKeyEvents", name: "bindKeyEvents", pkg: "golang.org/x/exp/shiny/driver/util/dom", typ: $funcType([], [], false)}, {prop: "addTouchListener", name: "addTouchListener", pkg: "golang.org/x/exp/shiny/driver/util/dom", typ: $funcType([$String, touch.Type], [], false)}, {prop: "emitTouchEvent", name: "emitTouchEvent", pkg: "golang.org/x/exp/shiny/driver/util/dom", typ: $funcType([touch.Event], [], false)}, {prop: "bindTouchEvents", name: "bindTouchEvents", pkg: "golang.org/x/exp/shiny/driver/util/dom", typ: $funcType([], [], false)}];
184065
+ DomEvents.init("golang.org/x/exp/shiny/driver/util/dom", [{prop: "eventChan", name: "eventChan", embedded: false, exported: false, typ: chanType, tag: ""}, {prop: "inputTarget", name: "inputTarget", embedded: false, exported: false, typ: js.Value, tag: ""}, {prop: "releases", name: "releases", embedded: false, exported: false, typ: sliceType$1, tag: ""}]);
183765
184066
  $init = function() {
183766
184067
  $pkg.$init = function() {};
183767
184068
  /* */ var $f, $c = false, $s = 0, $r; if (this !== undefined && this.$blk !== undefined) { $f = this; $c = true; $s = $f.$s; $r = $f.$r; } s: while (true) { switch ($s) { case 0:
@@ -185779,14 +186080,18 @@ $packages["golang.org/x/exp/shiny/screen"] = (function() {
185779
186080
  }
185780
186081
  this.BackBufferPreserved = BackBufferPreserved_;
185781
186082
  });
185782
- NewWindowOptions = $pkg.NewWindowOptions = $newType(0, $kindStruct, "screen.NewWindowOptions", true, "golang.org/x/exp/shiny/screen", true, function(Width_, Height_, Title_) {
186083
+ NewWindowOptions = $pkg.NewWindowOptions = $newType(0, $kindStruct, "screen.NewWindowOptions", true, "golang.org/x/exp/shiny/screen", true, function(X_, Y_, Width_, Height_, Title_) {
185783
186084
  this.$val = this;
185784
186085
  if (arguments.length === 0) {
186086
+ this.X = 0;
186087
+ this.Y = 0;
185785
186088
  this.Width = 0;
185786
186089
  this.Height = 0;
185787
186090
  this.Title = "";
185788
186091
  return;
185789
186092
  }
186093
+ this.X = X_;
186094
+ this.Y = Y_;
185790
186095
  this.Width = Width_;
185791
186096
  this.Height = Height_;
185792
186097
  this.Title = Title_;
@@ -185833,7 +186138,7 @@ $packages["golang.org/x/exp/shiny/screen"] = (function() {
185833
186138
  Texture.init([{prop: "Bounds", name: "Bounds", pkg: "", typ: $funcType([], [image.Rectangle], false)}, {prop: "Fill", name: "Fill", pkg: "", typ: $funcType([image.Rectangle, color.Color, draw.Op], [], false)}, {prop: "Release", name: "Release", pkg: "", typ: $funcType([], [], false)}, {prop: "Size", name: "Size", pkg: "", typ: $funcType([], [image.Point], false)}, {prop: "Upload", name: "Upload", pkg: "", typ: $funcType([image.Point, Buffer, image.Rectangle], [], false)}, {prop: "UploadYCbCr", name: "UploadYCbCr", pkg: "", typ: $funcType([image.Point, Buffer, image.Rectangle], [], false)}]);
185834
186139
  Window.init([{prop: "Copy", name: "Copy", pkg: "", typ: $funcType([image.Point, Texture, image.Rectangle, draw.Op, ptrType$3], [], false)}, {prop: "Draw", name: "Draw", pkg: "", typ: $funcType([f64.Aff3, Texture, image.Rectangle, draw.Op, ptrType$3], [], false)}, {prop: "DrawUniform", name: "DrawUniform", pkg: "", typ: $funcType([f64.Aff3, color.Color, image.Rectangle, draw.Op, ptrType$3], [], false)}, {prop: "Fill", name: "Fill", pkg: "", typ: $funcType([image.Rectangle, color.Color, draw.Op], [], false)}, {prop: "NextEvent", name: "NextEvent", pkg: "", typ: $funcType([], [$emptyInterface], false)}, {prop: "Publish", name: "Publish", pkg: "", typ: $funcType([], [PublishResult], false)}, {prop: "Release", name: "Release", pkg: "", typ: $funcType([], [], false)}, {prop: "Scale", name: "Scale", pkg: "", typ: $funcType([image.Rectangle, Texture, image.Rectangle, draw.Op, ptrType$3], [], false)}, {prop: "Send", name: "Send", pkg: "", typ: $funcType([$emptyInterface], [], false)}, {prop: "SendFirst", name: "SendFirst", pkg: "", typ: $funcType([$emptyInterface], [], false)}, {prop: "Upload", name: "Upload", pkg: "", typ: $funcType([image.Point, Buffer, image.Rectangle], [], false)}, {prop: "UploadYCbCr", name: "UploadYCbCr", pkg: "", typ: $funcType([image.Point, Buffer, image.Rectangle], [], false)}]);
185835
186140
  PublishResult.init("", [{prop: "BackBufferPreserved", name: "BackBufferPreserved", embedded: false, exported: true, typ: $Bool, tag: ""}]);
185836
- NewWindowOptions.init("", [{prop: "Width", name: "Width", embedded: false, exported: true, typ: $Int, tag: ""}, {prop: "Height", name: "Height", embedded: false, exported: true, typ: $Int, tag: ""}, {prop: "Title", name: "Title", embedded: false, exported: true, typ: $String, tag: ""}]);
186141
+ NewWindowOptions.init("", [{prop: "X", name: "X", embedded: false, exported: true, typ: $Int, tag: ""}, {prop: "Y", name: "Y", embedded: false, exported: true, typ: $Int, tag: ""}, {prop: "Width", name: "Width", embedded: false, exported: true, typ: $Int, tag: ""}, {prop: "Height", name: "Height", embedded: false, exported: true, typ: $Int, tag: ""}, {prop: "Title", name: "Title", embedded: false, exported: true, typ: $String, tag: ""}]);
185837
186142
  DrawOptions.init("", []);
185838
186143
  $init = function() {
185839
186144
  $pkg.$init = function() {};
@@ -185849,7 +186154,7 @@ $packages["golang.org/x/exp/shiny/screen"] = (function() {
185849
186154
  return $pkg;
185850
186155
  })();
185851
186156
  $packages["github.com/supraio/client-daemon/pkg/decoder/nacldecoder/nacldriver"] = (function() {
185852
- var $pkg = {}, $init, jsdecoder, errs, jshelper, dom, screen, f64, image, color, draw, log, sync, js, windowImpl, screenImpl, BufferImpl, sliceType, ptrType, ptrType$1, ptrType$2, ptrType$3, ptrType$4, funcType, arrayType, ptrType$5, sliceType$1, ptrType$6, ptrType$7, ptrType$8, ptrType$9, newWindow, newScreenImpl, main, newBuffer;
186157
+ var $pkg = {}, $init, jsdecoder, errs, jshelper, dom, screen, f64, image, color, draw, log, sync, js, windowImpl, screenImpl, BufferImpl, sliceType, ptrType, ptrType$1, ptrType$2, structType, ptrType$3, ptrType$4, funcType, arrayType, ptrType$5, sliceType$1, ptrType$6, ptrType$7, chanType, ptrType$8, ptrType$9, newWindow, newScreenImpl, main, newBuffer;
185853
186158
  jsdecoder = $packages["github.com/supraio/client-daemon/pkg/decoder/nacldecoder/jsdecoder"];
185854
186159
  errs = $packages["github.com/supraio/client-daemon/pkg/errs"];
185855
186160
  jshelper = $packages["github.com/supraio/client-daemon/pkg/jshelper"];
@@ -185862,19 +186167,21 @@ $packages["github.com/supraio/client-daemon/pkg/decoder/nacldecoder/nacldriver"]
185862
186167
  log = $packages["log"];
185863
186168
  sync = $packages["sync"];
185864
186169
  js = $packages["syscall/js"];
185865
- windowImpl = $pkg.windowImpl = $newType(0, $kindStruct, "nacldriver.windowImpl", true, "github.com/supraio/client-daemon/pkg/decoder/nacldecoder/nacldriver", false, function(screen_, mutex_, domEvents_, released_) {
186170
+ windowImpl = $pkg.windowImpl = $newType(0, $kindStruct, "nacldriver.windowImpl", true, "github.com/supraio/client-daemon/pkg/decoder/nacldecoder/nacldriver", false, function(screen_, mutex_, domEvents_, released_, renderDone_) {
185866
186171
  this.$val = this;
185867
186172
  if (arguments.length === 0) {
185868
186173
  this.screen = ptrType.nil;
185869
186174
  this.mutex = ptrType$1.nil;
185870
186175
  this.domEvents = ptrType$2.nil;
185871
186176
  this.released = false;
186177
+ this.renderDone = $chanNil;
185872
186178
  return;
185873
186179
  }
185874
186180
  this.screen = screen_;
185875
186181
  this.mutex = mutex_;
185876
186182
  this.domEvents = domEvents_;
185877
186183
  this.released = released_;
186184
+ this.renderDone = renderDone_;
185878
186185
  });
185879
186186
  screenImpl = $pkg.screenImpl = $newType(0, $kindStruct, "nacldriver.screenImpl", true, "github.com/supraio/client-daemon/pkg/decoder/nacldecoder/nacldriver", false, function(doc_) {
185880
186187
  this.$val = this;
@@ -185900,6 +186207,7 @@ $packages["github.com/supraio/client-daemon/pkg/decoder/nacldecoder/nacldriver"]
185900
186207
  ptrType = $ptrType(screenImpl);
185901
186208
  ptrType$1 = $ptrType(sync.Mutex);
185902
186209
  ptrType$2 = $ptrType(dom.DomEvents);
186210
+ structType = $structType("", []);
185903
186211
  ptrType$3 = $ptrType(js.Value);
185904
186212
  ptrType$4 = $ptrType(BufferImpl);
185905
186213
  funcType = $funcType([], [], false);
@@ -185908,10 +186216,11 @@ $packages["github.com/supraio/client-daemon/pkg/decoder/nacldecoder/nacldriver"]
185908
186216
  sliceType$1 = $sliceType($Uint8);
185909
186217
  ptrType$6 = $ptrType(screen.DrawOptions);
185910
186218
  ptrType$7 = $ptrType(windowImpl);
186219
+ chanType = $chanType(structType, false, false);
185911
186220
  ptrType$8 = $ptrType(screen.NewWindowOptions);
185912
186221
  ptrType$9 = $ptrType(image.YCbCr);
185913
186222
  newWindow = function(screen$1, opts) {
185914
- var {_r, _r$1, domEvents, opts, screen$1, w, $s, $r, $c} = $restore(this, {screen$1, opts});
186223
+ var {_r, _r$1, _r$2, domEvents, inputTarget, opts, screen$1, w, $s, $r, $c} = $restore(this, {screen$1, opts});
185915
186224
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
185916
186225
  /* */ if (!(opts.Title === "")) { $s = 1; continue; }
185917
186226
  /* */ $s = 2; continue;
@@ -185920,13 +186229,38 @@ $packages["github.com/supraio/client-daemon/pkg/decoder/nacldecoder/nacldriver"]
185920
186229
  _r$1 = $clone(_r, js.Value).Call("item", new sliceType([new $Int(0)])); /* */ $s = 4; case 4: if($c) { $c = false; _r$1 = _r$1.$blk(); } if (_r$1 && _r$1.$blk !== undefined) { break s; }
185921
186230
  $r = $clone(_r$1, js.Value).Set("innerHTML", new $String(opts.Title)); /* */ $s = 5; case 5: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
185922
186231
  /* } */ case 2:
185923
- domEvents = dom.NewDomEvents();
185924
- w = new windowImpl.ptr(screen$1, new sync.Mutex.ptr(0, 0), domEvents, false);
185925
- $r = domEvents.BindEvents(); /* */ $s = 6; case 6: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
186232
+ _r$2 = $clone(screen$1.doc, js.Value).Call("getElementById", new sliceType([new $String("nacl_module")])); /* */ $s = 6; case 6: if($c) { $c = false; _r$2 = _r$2.$blk(); } if (_r$2 && _r$2.$blk !== undefined) { break s; }
186233
+ inputTarget = $clone(_r$2, js.Value);
186234
+ if ($clone(inputTarget, js.Value).IsNull() || $clone(inputTarget, js.Value).IsUndefined()) {
186235
+ $panic(new $String("NaCl renderer input target not found"));
186236
+ }
186237
+ $clone($clone(inputTarget, js.Value).Get("style"), js.Value).Set("touchAction", new $String("none"));
186238
+ domEvents = dom.NewDomEventsForTarget($clone(inputTarget, js.Value));
186239
+ w = new windowImpl.ptr(screen$1, new sync.Mutex.ptr(0, 0), domEvents, false, new $Chan(structType, 0));
186240
+ $r = domEvents.BindEvents(); /* */ $s = 7; case 7: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
185926
186241
  $s = -1; return w;
185927
- /* */ } return; } var $f = {$blk: newWindow, $c: true, $r, _r, _r$1, domEvents, opts, screen$1, w, $s};return $f;
186242
+ /* */ } return; } var $f = {$blk: newWindow, $c: true, $r, _r, _r$1, _r$2, domEvents, inputTarget, opts, screen$1, w, $s};return $f;
185928
186243
  };
185929
186244
  windowImpl.ptr.prototype.Release = function() {
186245
+ var {w, $s, $r, $c} = $restore(this, {});
186246
+ /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
186247
+ w = this;
186248
+ $r = w.mutex.Lock(); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
186249
+ /* */ if (w.released) { $s = 2; continue; }
186250
+ /* */ $s = 3; continue;
186251
+ /* if (w.released) { */ case 2:
186252
+ $r = w.mutex.Unlock(); /* */ $s = 4; case 4: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
186253
+ $s = -1; return;
186254
+ /* } */ case 3:
186255
+ w.released = true;
186256
+ $close(w.renderDone);
186257
+ $r = w.mutex.Unlock(); /* */ $s = 5; case 5: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
186258
+ $r = w.domEvents.Release(); /* */ $s = 6; case 6: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
186259
+ $s = -1; return;
186260
+ /* */ } return; } var $f = {$blk: windowImpl.ptr.prototype.Release, $c: true, $r, w, $s};return $f;
186261
+ };
186262
+ windowImpl.prototype.Release = function() { return this.$val.Release(); };
186263
+ windowImpl.ptr.prototype.CancelPendingUploads = function() {
185930
186264
  var {w, $s, $deferred, $r, $c} = $restore(this, {});
185931
186265
  /* */ $s = $s || 0; var $err = null; try { s: while (true) { switch ($s) { case 0: $deferred = []; $curGoroutine.deferStack.push($deferred);
185932
186266
  w = this;
@@ -185937,12 +186271,12 @@ $packages["github.com/supraio/client-daemon/pkg/decoder/nacldecoder/nacldriver"]
185937
186271
  /* if (w.released) { */ case 2:
185938
186272
  $s = 4; case 4: return;
185939
186273
  /* } */ case 3:
185940
- $r = w.domEvents.Release(); /* */ $s = 5; case 5: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
185941
- w.released = true;
186274
+ $close(w.renderDone);
186275
+ w.renderDone = new $Chan(structType, 0);
185942
186276
  $s = -1; return;
185943
- /* */ } return; } } catch(err) { $err = err; $s = -1; } finally { $callDeferred($deferred, $err); if($curGoroutine.asleep) { var $f = {$blk: windowImpl.ptr.prototype.Release, $c: true, $r, w, $s, $deferred};return $f; } }
186277
+ /* */ } return; } } catch(err) { $err = err; $s = -1; } finally { $callDeferred($deferred, $err); if($curGoroutine.asleep) { var $f = {$blk: windowImpl.ptr.prototype.CancelPendingUploads, $c: true, $r, w, $s, $deferred};return $f; } }
185944
186278
  };
185945
- windowImpl.prototype.Release = function() { return this.$val.Release(); };
186279
+ windowImpl.prototype.CancelPendingUploads = function() { return this.$val.CancelPendingUploads(); };
185946
186280
  windowImpl.ptr.prototype.Publish = function() {
185947
186281
  var w;
185948
186282
  w = this;
@@ -185953,21 +186287,55 @@ $packages["github.com/supraio/client-daemon/pkg/decoder/nacldecoder/nacldriver"]
185953
186287
  };
185954
186288
  windowImpl.prototype.Publish = function() { return this.$val.Publish(); };
185955
186289
  windowImpl.ptr.prototype.Send = function(event) {
185956
- var event, w;
186290
+ var {event, w, $s, $deferred, $r, $c} = $restore(this, {event});
186291
+ /* */ $s = $s || 0; var $err = null; try { s: while (true) { switch ($s) { case 0: $deferred = []; $curGoroutine.deferStack.push($deferred);
185957
186292
  w = this;
185958
- if (w.released) {
185959
- return;
185960
- }
185961
- $panic(new $String("Not implemented"));
186293
+ $r = w.mutex.Lock(); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
186294
+ $deferred.push([$methodVal(w.mutex, "Unlock"), []]);
186295
+ /* */ if (w.released) { $s = 2; continue; }
186296
+ /* */ $s = 3; continue;
186297
+ /* if (w.released) { */ case 2:
186298
+ $s = 4; case 4: return;
186299
+ /* } */ case 3:
186300
+ $r = $send(w.domEvents.GetEventChan(), event); /* */ $s = 5; case 5: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
186301
+ $s = -1; return;
186302
+ /* */ } return; } } catch(err) { $err = err; $s = -1; } finally { $callDeferred($deferred, $err); if($curGoroutine.asleep) { var $f = {$blk: windowImpl.ptr.prototype.Send, $c: true, $r, event, w, $s, $deferred};return $f; } }
185962
186303
  };
185963
186304
  windowImpl.prototype.Send = function(event) { return this.$val.Send(event); };
186305
+ windowImpl.ptr.prototype.SendNonBlocking = function(event) {
186306
+ var {$24r, $24r$1, $24r$2, _selection, event, w, $s, $deferred, $r, $c} = $restore(this, {event});
186307
+ /* */ $s = $s || 0; var $err = null; try { s: while (true) { switch ($s) { case 0: $deferred = []; $curGoroutine.deferStack.push($deferred);
186308
+ w = this;
186309
+ $r = w.mutex.Lock(); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
186310
+ $deferred.push([$methodVal(w.mutex, "Unlock"), []]);
186311
+ /* */ if (w.released) { $s = 2; continue; }
186312
+ /* */ $s = 3; continue;
186313
+ /* if (w.released) { */ case 2:
186314
+ $24r = false;
186315
+ $s = 4; case 4: return $24r;
186316
+ /* } */ case 3:
186317
+ _selection = $select([[w.domEvents.GetEventChan(), event], []]);
186318
+ /* */ if (_selection[0] === 0) { $s = 5; continue; }
186319
+ /* */ if (_selection[0] === 1) { $s = 6; continue; }
186320
+ /* */ $s = 7; continue;
186321
+ /* if (_selection[0] === 0) { */ case 5:
186322
+ $24r$1 = true;
186323
+ $s = 8; case 8: return $24r$1;
186324
+ /* } else if (_selection[0] === 1) { */ case 6:
186325
+ $24r$2 = false;
186326
+ $s = 9; case 9: return $24r$2;
186327
+ /* } */ case 7:
186328
+ $s = -1; return false;
186329
+ /* */ } return; } } catch(err) { $err = err; $s = -1; return false; } finally { $callDeferred($deferred, $err); if($curGoroutine.asleep) { var $f = {$blk: windowImpl.ptr.prototype.SendNonBlocking, $c: true, $r, $24r, $24r$1, $24r$2, _selection, event, w, $s, $deferred};return $f; } }
186330
+ };
186331
+ windowImpl.prototype.SendNonBlocking = function(event) { return this.$val.SendNonBlocking(event); };
185964
186332
  windowImpl.ptr.prototype.SendFirst = function(event) {
185965
- var event, w;
186333
+ var {event, w, $s, $r, $c} = $restore(this, {event});
186334
+ /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
185966
186335
  w = this;
185967
- if (w.released) {
185968
- return;
185969
- }
185970
- $panic(new $String("Not implemented"));
186336
+ $r = w.Send(event); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
186337
+ $s = -1; return;
186338
+ /* */ } return; } var $f = {$blk: windowImpl.ptr.prototype.SendFirst, $c: true, $r, event, w, $s};return $f;
185971
186339
  };
185972
186340
  windowImpl.prototype.SendFirst = function(event) { return this.$val.SendFirst(event); };
185973
186341
  windowImpl.ptr.prototype.NextEvent = function() {
@@ -185994,12 +186362,9 @@ $packages["github.com/supraio/client-daemon/pkg/decoder/nacldecoder/nacldriver"]
185994
186362
  };
185995
186363
  windowImpl.prototype.Upload = function(dp, src, sr) { return this.$val.Upload(dp, src, sr); };
185996
186364
  windowImpl.ptr.prototype.UploadYCbCr = function(dp, src, sr) {
185997
- var {_arg, _r, _r$1, _r$2, _tuple, dp, err, jsNaClDecoder, picture, renderPromise, renderResult, sr, src, w, x, $s, $r, $c} = $restore(this, {dp, src, sr});
186365
+ var {_arg, _r, _r$1, _r$2, _tuple, canceled, dp, err, jsNaClDecoder, picture, renderDone, renderPromise, renderResult, sr, src, w, x, $s, $r, $c} = $restore(this, {dp, src, sr});
185998
186366
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
185999
186367
  w = this;
186000
- if (w.released) {
186001
- $s = -1; return;
186002
- }
186003
186368
  /* */ if (jsdecoder.ShouldResetOnNextDecode()) { $s = 1; continue; }
186004
186369
  /* */ $s = 2; continue;
186005
186370
  /* if (jsdecoder.ShouldResetOnNextDecode()) { */ case 1:
@@ -186018,29 +186383,40 @@ $packages["github.com/supraio/client-daemon/pkg/decoder/nacldecoder/nacldriver"]
186018
186383
  $s = -1; return;
186019
186384
  }
186020
186385
  $r = w.mutex.Lock(); /* */ $s = 7; case 7: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
186021
- _r = $clone(jsNaClDecoder, js.Value).Call("render", new sliceType([(x = picture, new x.constructor.elem(x))])); /* */ $s = 8; case 8: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; }
186386
+ /* */ if (w.released) { $s = 8; continue; }
186387
+ /* */ $s = 9; continue;
186388
+ /* if (w.released) { */ case 8:
186389
+ $r = w.mutex.Unlock(); /* */ $s = 10; case 10: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
186390
+ $s = -1; return;
186391
+ /* } */ case 9:
186392
+ _r = $clone(jsNaClDecoder, js.Value).Call("render", new sliceType([(x = picture, new x.constructor.elem(x))])); /* */ $s = 11; case 11: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; }
186022
186393
  renderPromise = $clone(_r, js.Value);
186023
- _r$1 = jshelper.Await($clone(renderPromise, js.Value)); /* */ $s = 9; case 9: if($c) { $c = false; _r$1 = _r$1.$blk(); } if (_r$1 && _r$1.$blk !== undefined) { break s; }
186394
+ renderDone = w.renderDone;
186395
+ $r = w.mutex.Unlock(); /* */ $s = 12; case 12: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
186396
+ _r$1 = jshelper.AwaitWithCancel($clone(renderPromise, js.Value), renderDone); /* */ $s = 13; case 13: if($c) { $c = false; _r$1 = _r$1.$blk(); } if (_r$1 && _r$1.$blk !== undefined) { break s; }
186024
186397
  _tuple = _r$1;
186025
186398
  renderResult = _tuple[0];
186026
186399
  err = _tuple[1];
186027
- $r = w.mutex.Unlock(); /* */ $s = 10; case 10: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
186028
- /* */ if (!(err === ptrType$3.nil)) { $s = 11; continue; }
186029
- /* */ $s = 12; continue;
186030
- /* if (!(err === ptrType$3.nil)) { */ case 11:
186031
- _r$2 = jshelper.GetError(err); /* */ $s = 13; case 13: if($c) { $c = false; _r$2 = _r$2.$blk(); } if (_r$2 && _r$2.$blk !== undefined) { break s; }
186400
+ canceled = _tuple[2];
186401
+ if (canceled) {
186402
+ $s = -1; return;
186403
+ }
186404
+ /* */ if (!(err === ptrType$3.nil)) { $s = 14; continue; }
186405
+ /* */ $s = 15; continue;
186406
+ /* if (!(err === ptrType$3.nil)) { */ case 14:
186407
+ _r$2 = jshelper.GetError(err); /* */ $s = 16; case 16: if($c) { $c = false; _r$2 = _r$2.$blk(); } if (_r$2 && _r$2.$blk !== undefined) { break s; }
186032
186408
  _arg = _r$2;
186033
- $r = errs.Print("Failed to render frame: %s", _arg); /* */ $s = 14; case 14: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
186409
+ $r = errs.Print("Failed to render frame: %s", _arg); /* */ $s = 17; case 17: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
186034
186410
  $s = -1; return;
186035
- /* } */ case 12:
186036
- /* */ if (!(($clone(renderResult, js.Value).Float() === 0))) { $s = 15; continue; }
186037
- /* */ $s = 16; continue;
186038
- /* if (!(($clone(renderResult, js.Value).Float() === 0))) { */ case 15:
186039
- $r = log.Printf("Failed to render frame with code: %f\n", new sliceType([new $Float64($clone(renderResult, js.Value).Float())])); /* */ $s = 17; case 17: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
186411
+ /* } */ case 15:
186412
+ /* */ if (!(($clone(renderResult, js.Value).Float() === 0))) { $s = 18; continue; }
186413
+ /* */ $s = 19; continue;
186414
+ /* if (!(($clone(renderResult, js.Value).Float() === 0))) { */ case 18:
186415
+ $r = log.Printf("Failed to render frame with code: %f\n", new sliceType([new $Float64($clone(renderResult, js.Value).Float())])); /* */ $s = 20; case 20: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
186040
186416
  $s = -1; return;
186041
- /* } */ case 16:
186417
+ /* } */ case 19:
186042
186418
  $s = -1; return;
186043
- /* */ } return; } var $f = {$blk: windowImpl.ptr.prototype.UploadYCbCr, $c: true, $r, _arg, _r, _r$1, _r$2, _tuple, dp, err, jsNaClDecoder, picture, renderPromise, renderResult, sr, src, w, x, $s};return $f;
186419
+ /* */ } return; } var $f = {$blk: windowImpl.ptr.prototype.UploadYCbCr, $c: true, $r, _arg, _r, _r$1, _r$2, _tuple, canceled, dp, err, jsNaClDecoder, picture, renderDone, renderPromise, renderResult, sr, src, w, x, $s};return $f;
186044
186420
  };
186045
186421
  windowImpl.prototype.UploadYCbCr = function(dp, src, sr) { return this.$val.UploadYCbCr(dp, src, sr); };
186046
186422
  windowImpl.ptr.prototype.Fill = function(dr, src, op) {
@@ -186174,10 +186550,10 @@ $packages["github.com/supraio/client-daemon/pkg/decoder/nacldecoder/nacldriver"]
186174
186550
  b = this;
186175
186551
  };
186176
186552
  BufferImpl.prototype.Release = function() { return this.$val.Release(); };
186177
- ptrType$7.methods = [{prop: "Release", name: "Release", pkg: "", typ: $funcType([], [], false)}, {prop: "Publish", name: "Publish", pkg: "", typ: $funcType([], [screen.PublishResult], false)}, {prop: "Send", name: "Send", pkg: "", typ: $funcType([$emptyInterface], [], false)}, {prop: "SendFirst", name: "SendFirst", pkg: "", typ: $funcType([$emptyInterface], [], false)}, {prop: "NextEvent", name: "NextEvent", pkg: "", typ: $funcType([], [$emptyInterface], false)}, {prop: "Upload", name: "Upload", pkg: "", typ: $funcType([image.Point, screen.Buffer, image.Rectangle], [], false)}, {prop: "UploadYCbCr", name: "UploadYCbCr", pkg: "", typ: $funcType([image.Point, screen.Buffer, image.Rectangle], [], false)}, {prop: "Fill", name: "Fill", pkg: "", typ: $funcType([image.Rectangle, color.Color, draw.Op], [], false)}, {prop: "Draw", name: "Draw", pkg: "", typ: $funcType([f64.Aff3, screen.Texture, image.Rectangle, draw.Op, ptrType$6], [], false)}, {prop: "DrawUniform", name: "DrawUniform", pkg: "", typ: $funcType([f64.Aff3, color.Color, image.Rectangle, draw.Op, ptrType$6], [], false)}, {prop: "Copy", name: "Copy", pkg: "", typ: $funcType([image.Point, screen.Texture, image.Rectangle, draw.Op, ptrType$6], [], false)}, {prop: "Scale", name: "Scale", pkg: "", typ: $funcType([image.Rectangle, screen.Texture, image.Rectangle, draw.Op, ptrType$6], [], false)}];
186553
+ ptrType$7.methods = [{prop: "Release", name: "Release", pkg: "", typ: $funcType([], [], false)}, {prop: "CancelPendingUploads", name: "CancelPendingUploads", pkg: "", typ: $funcType([], [], false)}, {prop: "Publish", name: "Publish", pkg: "", typ: $funcType([], [screen.PublishResult], false)}, {prop: "Send", name: "Send", pkg: "", typ: $funcType([$emptyInterface], [], false)}, {prop: "SendNonBlocking", name: "SendNonBlocking", pkg: "", typ: $funcType([$emptyInterface], [$Bool], false)}, {prop: "SendFirst", name: "SendFirst", pkg: "", typ: $funcType([$emptyInterface], [], false)}, {prop: "NextEvent", name: "NextEvent", pkg: "", typ: $funcType([], [$emptyInterface], false)}, {prop: "Upload", name: "Upload", pkg: "", typ: $funcType([image.Point, screen.Buffer, image.Rectangle], [], false)}, {prop: "UploadYCbCr", name: "UploadYCbCr", pkg: "", typ: $funcType([image.Point, screen.Buffer, image.Rectangle], [], false)}, {prop: "Fill", name: "Fill", pkg: "", typ: $funcType([image.Rectangle, color.Color, draw.Op], [], false)}, {prop: "Draw", name: "Draw", pkg: "", typ: $funcType([f64.Aff3, screen.Texture, image.Rectangle, draw.Op, ptrType$6], [], false)}, {prop: "DrawUniform", name: "DrawUniform", pkg: "", typ: $funcType([f64.Aff3, color.Color, image.Rectangle, draw.Op, ptrType$6], [], false)}, {prop: "Copy", name: "Copy", pkg: "", typ: $funcType([image.Point, screen.Texture, image.Rectangle, draw.Op, ptrType$6], [], false)}, {prop: "Scale", name: "Scale", pkg: "", typ: $funcType([image.Rectangle, screen.Texture, image.Rectangle, draw.Op, ptrType$6], [], false)}];
186178
186554
  ptrType.methods = [{prop: "NewBuffer", name: "NewBuffer", pkg: "", typ: $funcType([image.Point], [screen.Buffer, $error], false)}, {prop: "NewTexture", name: "NewTexture", pkg: "", typ: $funcType([image.Point], [screen.Texture, $error], false)}, {prop: "NewWindow", name: "NewWindow", pkg: "", typ: $funcType([ptrType$8], [screen.Window, $error], false)}];
186179
186555
  ptrType$4.methods = [{prop: "Size", name: "Size", pkg: "", typ: $funcType([], [image.Point], false)}, {prop: "Bounds", name: "Bounds", pkg: "", typ: $funcType([], [image.Rectangle], false)}, {prop: "RGBA", name: "RGBA", pkg: "", typ: $funcType([], [ptrType$5], false)}, {prop: "YCbCr", name: "YCbCr", pkg: "", typ: $funcType([], [ptrType$9], false)}, {prop: "Release", name: "Release", pkg: "", typ: $funcType([], [], false)}];
186180
- windowImpl.init("github.com/supraio/client-daemon/pkg/decoder/nacldecoder/nacldriver", [{prop: "screen", name: "screen", embedded: false, exported: false, typ: ptrType, tag: ""}, {prop: "mutex", name: "mutex", embedded: false, exported: false, typ: ptrType$1, tag: ""}, {prop: "domEvents", name: "domEvents", embedded: false, exported: false, typ: ptrType$2, tag: ""}, {prop: "released", name: "released", embedded: false, exported: false, typ: $Bool, tag: ""}]);
186556
+ windowImpl.init("github.com/supraio/client-daemon/pkg/decoder/nacldecoder/nacldriver", [{prop: "screen", name: "screen", embedded: false, exported: false, typ: ptrType, tag: ""}, {prop: "mutex", name: "mutex", embedded: false, exported: false, typ: ptrType$1, tag: ""}, {prop: "domEvents", name: "domEvents", embedded: false, exported: false, typ: ptrType$2, tag: ""}, {prop: "released", name: "released", embedded: false, exported: false, typ: $Bool, tag: ""}, {prop: "renderDone", name: "renderDone", embedded: false, exported: false, typ: chanType, tag: ""}]);
186181
186557
  screenImpl.init("github.com/supraio/client-daemon/pkg/decoder/nacldecoder/nacldriver", [{prop: "doc", name: "doc", embedded: false, exported: false, typ: js.Value, tag: ""}]);
186182
186558
  BufferImpl.init("github.com/supraio/client-daemon/pkg/decoder/nacldecoder/nacldriver", [{prop: "screen", name: "screen", embedded: false, exported: false, typ: ptrType, tag: ""}, {prop: "size", name: "size", embedded: false, exported: false, typ: image.Point, tag: ""}, {prop: "Picture", name: "Picture", embedded: false, exported: true, typ: ptrType$3, tag: ""}]);
186183
186559
  $init = function() {
@@ -191065,7 +191441,7 @@ $packages["golang.org/x/exp/shiny/driver/internal/errscreen"] = (function() {
191065
191441
  return $pkg;
191066
191442
  })();
191067
191443
  $packages["golang.org/x/exp/shiny/driver/canvasdriver"] = (function() {
191068
- var $pkg = {}, $init, fmt, errscreen, dom, screen, f64, image, color, draw, sync, js, windowImpl, screenImpl, YCbCrJS, BufferImpl, sliceType, ptrType, ptrType$1, funcType, arrayType, ptrType$2, ptrType$3, sliceType$1, ptrType$4, ptrType$5, ptrType$6, ptrType$7, ptrType$8, ptrType$9, ptrType$10, newWindow, newScreenImpl, main, newBuffer;
191444
+ var $pkg = {}, $init, fmt, errscreen, dom, screen, f64, image, color, draw, sync, js, windowImpl, screenImpl, YCbCrJS, BufferImpl, sliceType, ptrType, ptrType$1, ptrType$2, funcType, arrayType, ptrType$3, structType, ptrType$4, sliceType$1, ptrType$5, ptrType$6, ptrType$7, ptrType$8, chanType, ptrType$9, ptrType$10, newWindow, newScreenImpl, main, newBuffer;
191069
191445
  fmt = $packages["fmt"];
191070
191446
  errscreen = $packages["golang.org/x/exp/shiny/driver/internal/errscreen"];
191071
191447
  dom = $packages["golang.org/x/exp/shiny/driver/util/dom"];
@@ -191076,16 +191452,19 @@ $packages["golang.org/x/exp/shiny/driver/canvasdriver"] = (function() {
191076
191452
  draw = $packages["image/draw"];
191077
191453
  sync = $packages["sync"];
191078
191454
  js = $packages["syscall/js"];
191079
- windowImpl = $pkg.windowImpl = $newType(0, $kindStruct, "canvasdriver.windowImpl", true, "golang.org/x/exp/shiny/driver/canvasdriver", false, function(screen_, mutex_, canvasEl_, ctx2d_, released_, domEvents_, resizeCallback_) {
191455
+ windowImpl = $pkg.windowImpl = $newType(0, $kindStruct, "canvasdriver.windowImpl", true, "golang.org/x/exp/shiny/driver/canvasdriver", false, function(screen_, mutex_, canvasEl_, ctx2d_, released_, domEvents_, resizeCallback_, frontEvents_, backEvents_, eventWake_) {
191080
191456
  this.$val = this;
191081
191457
  if (arguments.length === 0) {
191082
- this.screen = ptrType.nil;
191083
- this.mutex = ptrType$1.nil;
191458
+ this.screen = ptrType$1.nil;
191459
+ this.mutex = ptrType$2.nil;
191084
191460
  this.canvasEl = new js.Value.ptr(null, false, arrayType.zero());
191085
191461
  this.ctx2d = new js.Value.ptr(null, false, arrayType.zero());
191086
191462
  this.released = false;
191087
- this.domEvents = ptrType$2.nil;
191463
+ this.domEvents = ptrType$3.nil;
191088
191464
  this.resizeCallback = new js.Func.ptr(new js.Value.ptr(null, false, arrayType.zero()));
191465
+ this.frontEvents = sliceType.nil;
191466
+ this.backEvents = sliceType.nil;
191467
+ this.eventWake = $chanNil;
191089
191468
  return;
191090
191469
  }
191091
191470
  this.screen = screen_;
@@ -191095,6 +191474,9 @@ $packages["golang.org/x/exp/shiny/driver/canvasdriver"] = (function() {
191095
191474
  this.released = released_;
191096
191475
  this.domEvents = domEvents_;
191097
191476
  this.resizeCallback = resizeCallback_;
191477
+ this.frontEvents = frontEvents_;
191478
+ this.backEvents = backEvents_;
191479
+ this.eventWake = eventWake_;
191098
191480
  });
191099
191481
  screenImpl = $pkg.screenImpl = $newType(0, $kindStruct, "canvasdriver.screenImpl", true, "golang.org/x/exp/shiny/driver/canvasdriver", false, function(doc_) {
191100
191482
  this.$val = this;
@@ -191107,7 +191489,7 @@ $packages["golang.org/x/exp/shiny/driver/canvasdriver"] = (function() {
191107
191489
  YCbCrJS = $pkg.YCbCrJS = $newType(0, $kindStruct, "canvasdriver.YCbCrJS", true, "golang.org/x/exp/shiny/driver/canvasdriver", true, function(CanvasImageSource_) {
191108
191490
  this.$val = this;
191109
191491
  if (arguments.length === 0) {
191110
- this.CanvasImageSource = ptrType$5.nil;
191492
+ this.CanvasImageSource = ptrType$6.nil;
191111
191493
  return;
191112
191494
  }
191113
191495
  this.CanvasImageSource = CanvasImageSource_;
@@ -191115,13 +191497,13 @@ $packages["golang.org/x/exp/shiny/driver/canvasdriver"] = (function() {
191115
191497
  BufferImpl = $pkg.BufferImpl = $newType(0, $kindStruct, "canvasdriver.BufferImpl", true, "golang.org/x/exp/shiny/driver/canvasdriver", true, function(screen_, size_, mutex_, released_, rgba_, ycbcr_, ycbcrJS_) {
191116
191498
  this.$val = this;
191117
191499
  if (arguments.length === 0) {
191118
- this.screen = ptrType.nil;
191500
+ this.screen = ptrType$1.nil;
191119
191501
  this.size = new image.Point.ptr(0, 0);
191120
- this.mutex = ptrType$1.nil;
191502
+ this.mutex = ptrType$2.nil;
191121
191503
  this.released = false;
191122
191504
  this.rgba = new image.RGBA.ptr(sliceType$1.nil, 0, new image.Rectangle.ptr(new image.Point.ptr(0, 0), new image.Point.ptr(0, 0)));
191123
191505
  this.ycbcr = new image.YCbCr.ptr(sliceType$1.nil, sliceType$1.nil, sliceType$1.nil, 0, 0, 0, new image.Rectangle.ptr(new image.Point.ptr(0, 0), new image.Point.ptr(0, 0)));
191124
- this.ycbcrJS = ptrType$4.nil;
191506
+ this.ycbcrJS = ptrType$5.nil;
191125
191507
  return;
191126
191508
  }
191127
191509
  this.screen = screen_;
@@ -191133,81 +191515,101 @@ $packages["golang.org/x/exp/shiny/driver/canvasdriver"] = (function() {
191133
191515
  this.ycbcrJS = ycbcrJS_;
191134
191516
  });
191135
191517
  sliceType = $sliceType($emptyInterface);
191136
- ptrType = $ptrType(screenImpl);
191137
- ptrType$1 = $ptrType(sync.Mutex);
191518
+ ptrType = $ptrType(screen.NewWindowOptions);
191519
+ ptrType$1 = $ptrType(screenImpl);
191520
+ ptrType$2 = $ptrType(sync.Mutex);
191138
191521
  funcType = $funcType([], [], false);
191139
191522
  arrayType = $arrayType(funcType, 0);
191140
- ptrType$2 = $ptrType(dom.DomEvents);
191141
- ptrType$3 = $ptrType(BufferImpl);
191523
+ ptrType$3 = $ptrType(dom.DomEvents);
191524
+ structType = $structType("", []);
191525
+ ptrType$4 = $ptrType(BufferImpl);
191142
191526
  sliceType$1 = $sliceType($Uint8);
191143
- ptrType$4 = $ptrType(YCbCrJS);
191144
- ptrType$5 = $ptrType(js.Value);
191145
- ptrType$6 = $ptrType(screen.DrawOptions);
191146
- ptrType$7 = $ptrType(windowImpl);
191147
- ptrType$8 = $ptrType(screen.NewWindowOptions);
191527
+ ptrType$5 = $ptrType(YCbCrJS);
191528
+ ptrType$6 = $ptrType(js.Value);
191529
+ ptrType$7 = $ptrType(screen.DrawOptions);
191530
+ ptrType$8 = $ptrType(windowImpl);
191531
+ chanType = $chanType(structType, false, false);
191148
191532
  ptrType$9 = $ptrType(image.RGBA);
191149
191533
  ptrType$10 = $ptrType(image.YCbCr);
191150
191534
  newWindow = function(screen$1, opts) {
191151
- var {_r, _r$1, _r$2, _r$3, _r$4, _r$5, _r$6, adaptCanvas, canvasEl, ctx2d, domEvents, opts, resizeCallback, screen$1, w, $s, $r, $c} = $restore(this, {screen$1, opts});
191535
+ var {_arg, _arg$1, _r, _r$1, _r$2, _r$3, _r$4, _r$5, _r$6, _r$7, _r$8, adaptCanvas, canvasEl, ctx2d, domEvents, hasGeometry, opts, resizeCallback, screen$1, style, w, $s, $r, $c} = $restore(this, {screen$1, opts});
191152
191536
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
191153
191537
  adaptCanvas = [adaptCanvas];
191154
191538
  canvasEl = [canvasEl];
191539
+ hasGeometry = [hasGeometry];
191155
191540
  _r = $clone(screen$1.doc, js.Value).Call("createElement", new sliceType([new $String("canvas")])); /* */ $s = 1; case 1: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; }
191156
191541
  canvasEl[0] = $clone(_r, js.Value);
191157
191542
  _r$1 = $clone($clone(screen$1.doc, js.Value).Get("body"), js.Value).Call("appendChild", new sliceType([new canvasEl[0].constructor.elem(canvasEl[0])])); /* */ $s = 2; case 2: if($c) { $c = false; _r$1 = _r$1.$blk(); } if (_r$1 && _r$1.$blk !== undefined) { break s; }
191158
191543
  _r$1;
191159
- adaptCanvas[0] = (function(adaptCanvas, canvasEl) { return function() {
191160
- var height, scale, width;
191161
- scale = dom.GetBrowserZoomRatio();
191162
- width = (((dom.GetDocWidth()) / scale >> 0));
191544
+ hasGeometry[0] = !(opts === ptrType.nil) && opts.Width > 0 && opts.Height > 0;
191545
+ /* */ if (hasGeometry[0]) { $s = 3; continue; }
191546
+ /* */ $s = 4; continue;
191547
+ /* if (hasGeometry[0]) { */ case 3:
191548
+ style = $clone($clone(canvasEl[0], js.Value).Get("style"), js.Value);
191549
+ $clone(style, js.Value).Set("position", new $String("absolute"));
191550
+ _r$2 = fmt.Sprintf("%dpx", new sliceType([new $Int(opts.X)])); /* */ $s = 5; case 5: if($c) { $c = false; _r$2 = _r$2.$blk(); } if (_r$2 && _r$2.$blk !== undefined) { break s; }
191551
+ _arg = new $String(_r$2);
191552
+ $r = $clone(style, js.Value).Set("left", _arg); /* */ $s = 6; case 6: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
191553
+ _r$3 = fmt.Sprintf("%dpx", new sliceType([new $Int(opts.Y)])); /* */ $s = 7; case 7: if($c) { $c = false; _r$3 = _r$3.$blk(); } if (_r$3 && _r$3.$blk !== undefined) { break s; }
191554
+ _arg$1 = new $String(_r$3);
191555
+ $r = $clone(style, js.Value).Set("top", _arg$1); /* */ $s = 8; case 8: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
191556
+ $clone(canvasEl[0], js.Value).Set("width", new $Int(opts.Width));
191557
+ $clone(canvasEl[0], js.Value).Set("height", new $Int(opts.Height));
191558
+ /* } */ case 4:
191559
+ adaptCanvas[0] = (function(adaptCanvas, canvasEl, hasGeometry) { return function() {
191560
+ var height, width;
191561
+ if (hasGeometry[0]) {
191562
+ return;
191563
+ }
191564
+ width = dom.GetDocWidth();
191163
191565
  if (!(($clone($clone(canvasEl[0], js.Value).Get("width"), js.Value).Int() === width))) {
191164
191566
  $clone(canvasEl[0], js.Value).Set("width", new $Int(width));
191165
191567
  }
191166
- height = (((dom.GetDocHeight()) / scale >> 0));
191568
+ height = dom.GetDocHeight();
191167
191569
  if (!(($clone($clone(canvasEl[0], js.Value).Get("height"), js.Value).Int() === height))) {
191168
191570
  $clone(canvasEl[0], js.Value).Set("height", new $Int(height));
191169
191571
  }
191170
- }; })(adaptCanvas, canvasEl);
191171
- $r = adaptCanvas[0](); /* */ $s = 3; case 3: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
191172
- resizeCallback = $clone(js.FuncOf((function(adaptCanvas, canvasEl) { return function $b(this$1, args) {
191572
+ }; })(adaptCanvas, canvasEl, hasGeometry);
191573
+ $r = adaptCanvas[0](); /* */ $s = 9; case 9: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
191574
+ resizeCallback = $clone(js.FuncOf((function(adaptCanvas, canvasEl, hasGeometry) { return function $b(this$1, args) {
191173
191575
  var {args, this$1, $s, $r, $c} = $restore(this, {this$1, args});
191174
191576
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
191175
191577
  $r = adaptCanvas[0](); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
191176
191578
  $s = -1; return $ifaceNil;
191177
191579
  /* */ } return; } var $f = {$blk: $b, $c: true, $r, args, this$1, $s};return $f;
191178
- }; })(adaptCanvas, canvasEl)), js.Func);
191179
- _r$2 = $clone(js.Global(), js.Value).Call("addEventListener", new sliceType([new $String("resize"), new resizeCallback.constructor.elem(resizeCallback)])); /* */ $s = 4; case 4: if($c) { $c = false; _r$2 = _r$2.$blk(); } if (_r$2 && _r$2.$blk !== undefined) { break s; }
191180
- _r$2;
191181
- /* */ if (!((opts.Width === 0))) { $s = 5; continue; }
191182
- /* */ $s = 6; continue;
191183
- /* if (!((opts.Width === 0))) { */ case 5:
191184
- $r = dom.SetWindowWidth(opts.Width); /* */ $s = 7; case 7: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
191185
- /* } */ case 6:
191186
- /* */ if (!((opts.Height === 0))) { $s = 8; continue; }
191187
- /* */ $s = 9; continue;
191188
- /* if (!((opts.Height === 0))) { */ case 8:
191189
- $r = dom.SetWindowHeight(opts.Height); /* */ $s = 10; case 10: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
191190
- /* } */ case 9:
191191
- /* */ if (!(opts.Title === "")) { $s = 11; continue; }
191580
+ }; })(adaptCanvas, canvasEl, hasGeometry)), js.Func);
191581
+ _r$4 = $clone(js.Global(), js.Value).Call("addEventListener", new sliceType([new $String("resize"), new resizeCallback.constructor.elem(resizeCallback)])); /* */ $s = 10; case 10: if($c) { $c = false; _r$4 = _r$4.$blk(); } if (_r$4 && _r$4.$blk !== undefined) { break s; }
191582
+ _r$4;
191583
+ /* */ if (!((opts.Width === 0))) { $s = 11; continue; }
191192
191584
  /* */ $s = 12; continue;
191193
- /* if (!(opts.Title === "")) { */ case 11:
191194
- _r$3 = $clone($clone(screen$1.doc, js.Value).Get("head"), js.Value).Call("getElementsByTagName", new sliceType([new $String("title")])); /* */ $s = 13; case 13: if($c) { $c = false; _r$3 = _r$3.$blk(); } if (_r$3 && _r$3.$blk !== undefined) { break s; }
191195
- _r$4 = $clone(_r$3, js.Value).Call("item", new sliceType([new $Int(0)])); /* */ $s = 14; case 14: if($c) { $c = false; _r$4 = _r$4.$blk(); } if (_r$4 && _r$4.$blk !== undefined) { break s; }
191196
- $r = $clone(_r$4, js.Value).Set("innerHTML", new $String(opts.Title)); /* */ $s = 15; case 15: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
191585
+ /* if (!((opts.Width === 0))) { */ case 11:
191586
+ $r = dom.SetWindowWidth(opts.Width); /* */ $s = 13; case 13: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
191197
191587
  /* } */ case 12:
191198
- _r$5 = $clone(canvasEl[0], js.Value).Call("getContext", new sliceType([new $String("2d")])); /* */ $s = 16; case 16: if($c) { $c = false; _r$5 = _r$5.$blk(); } if (_r$5 && _r$5.$blk !== undefined) { break s; }
191199
- ctx2d = $clone(_r$5, js.Value);
191200
- /* */ if ($clone(ctx2d, js.Value).IsUndefined() || $clone(ctx2d, js.Value).IsNull()) { $s = 17; continue; }
191588
+ /* */ if (!((opts.Height === 0))) { $s = 14; continue; }
191589
+ /* */ $s = 15; continue;
191590
+ /* if (!((opts.Height === 0))) { */ case 14:
191591
+ $r = dom.SetWindowHeight(opts.Height); /* */ $s = 16; case 16: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
191592
+ /* } */ case 15:
191593
+ /* */ if (!(opts.Title === "")) { $s = 17; continue; }
191201
191594
  /* */ $s = 18; continue;
191202
- /* if ($clone(ctx2d, js.Value).IsUndefined() || $clone(ctx2d, js.Value).IsNull()) { */ case 17:
191203
- _r$6 = fmt.Errorf("Cannot get 2d context of canvas", sliceType.nil); /* */ $s = 19; case 19: if($c) { $c = false; _r$6 = _r$6.$blk(); } if (_r$6 && _r$6.$blk !== undefined) { break s; }
191204
- $panic(_r$6);
191595
+ /* if (!(opts.Title === "")) { */ case 17:
191596
+ _r$5 = $clone($clone(screen$1.doc, js.Value).Get("head"), js.Value).Call("getElementsByTagName", new sliceType([new $String("title")])); /* */ $s = 19; case 19: if($c) { $c = false; _r$5 = _r$5.$blk(); } if (_r$5 && _r$5.$blk !== undefined) { break s; }
191597
+ _r$6 = $clone(_r$5, js.Value).Call("item", new sliceType([new $Int(0)])); /* */ $s = 20; case 20: if($c) { $c = false; _r$6 = _r$6.$blk(); } if (_r$6 && _r$6.$blk !== undefined) { break s; }
191598
+ $r = $clone(_r$6, js.Value).Set("innerHTML", new $String(opts.Title)); /* */ $s = 21; case 21: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
191205
191599
  /* } */ case 18:
191206
- domEvents = dom.NewDomEvents();
191207
- w = new windowImpl.ptr(screen$1, ptrType$1.nil, $clone(canvasEl[0], js.Value), $clone(ctx2d, js.Value), false, domEvents, $clone(resizeCallback, js.Func));
191208
- $r = domEvents.BindEvents(); /* */ $s = 20; case 20: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
191600
+ _r$7 = $clone(canvasEl[0], js.Value).Call("getContext", new sliceType([new $String("2d")])); /* */ $s = 22; case 22: if($c) { $c = false; _r$7 = _r$7.$blk(); } if (_r$7 && _r$7.$blk !== undefined) { break s; }
191601
+ ctx2d = $clone(_r$7, js.Value);
191602
+ /* */ if ($clone(ctx2d, js.Value).IsUndefined() || $clone(ctx2d, js.Value).IsNull()) { $s = 23; continue; }
191603
+ /* */ $s = 24; continue;
191604
+ /* if ($clone(ctx2d, js.Value).IsUndefined() || $clone(ctx2d, js.Value).IsNull()) { */ case 23:
191605
+ _r$8 = fmt.Errorf("Cannot get 2d context of canvas", sliceType.nil); /* */ $s = 25; case 25: if($c) { $c = false; _r$8 = _r$8.$blk(); } if (_r$8 && _r$8.$blk !== undefined) { break s; }
191606
+ $panic(_r$8);
191607
+ /* } */ case 24:
191608
+ domEvents = dom.NewDomEventsForTarget($clone(canvasEl[0], js.Value));
191609
+ w = new windowImpl.ptr(screen$1, new sync.Mutex.ptr(0, 0), $clone(canvasEl[0], js.Value), $clone(ctx2d, js.Value), false, domEvents, $clone(resizeCallback, js.Func), sliceType.nil, sliceType.nil, new $Chan(structType, 1));
191610
+ $r = domEvents.BindEvents(); /* */ $s = 26; case 26: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
191209
191611
  $s = -1; return w;
191210
- /* */ } return; } var $f = {$blk: newWindow, $c: true, $r, _r, _r$1, _r$2, _r$3, _r$4, _r$5, _r$6, adaptCanvas, canvasEl, ctx2d, domEvents, opts, resizeCallback, screen$1, w, $s};return $f;
191612
+ /* */ } return; } var $f = {$blk: newWindow, $c: true, $r, _arg, _arg$1, _r, _r$1, _r$2, _r$3, _r$4, _r$5, _r$6, _r$7, _r$8, adaptCanvas, canvasEl, ctx2d, domEvents, hasGeometry, opts, resizeCallback, screen$1, style, w, $s};return $f;
191211
191613
  };
191212
191614
  windowImpl.ptr.prototype.Release = function() {
191213
191615
  var {_r, _r$1, w, x, $s, $deferred, $r, $c} = $restore(this, {});
@@ -191241,33 +191643,126 @@ $packages["golang.org/x/exp/shiny/driver/canvasdriver"] = (function() {
191241
191643
  };
191242
191644
  windowImpl.prototype.Publish = function() { return this.$val.Publish(); };
191243
191645
  windowImpl.ptr.prototype.Send = function(event) {
191244
- var event, w;
191646
+ var {event, eventChan, w, $s, $r, $c} = $restore(this, {event});
191647
+ /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
191245
191648
  w = this;
191246
- if (w.released) {
191247
- return;
191248
- }
191249
- $panic(new $String("Not implemented"));
191649
+ $r = w.mutex.Lock(); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
191650
+ /* */ if (w.released) { $s = 2; continue; }
191651
+ /* */ $s = 3; continue;
191652
+ /* if (w.released) { */ case 2:
191653
+ $r = w.mutex.Unlock(); /* */ $s = 4; case 4: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
191654
+ $s = -1; return;
191655
+ /* } */ case 3:
191656
+ eventChan = w.domEvents.GetEventChan();
191657
+ $r = w.mutex.Unlock(); /* */ $s = 5; case 5: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
191658
+ $r = $send(eventChan, event); /* */ $s = 6; case 6: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
191659
+ $s = -1; return;
191660
+ /* */ } return; } var $f = {$blk: windowImpl.ptr.prototype.Send, $c: true, $r, event, eventChan, w, $s};return $f;
191250
191661
  };
191251
191662
  windowImpl.prototype.Send = function(event) { return this.$val.Send(event); };
191663
+ windowImpl.ptr.prototype.SendNonBlocking = function(event) {
191664
+ var {$24r, $24r$1, $24r$2, _selection, event, w, $s, $deferred, $r, $c} = $restore(this, {event});
191665
+ /* */ $s = $s || 0; var $err = null; try { s: while (true) { switch ($s) { case 0: $deferred = []; $curGoroutine.deferStack.push($deferred);
191666
+ w = this;
191667
+ $r = w.mutex.Lock(); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
191668
+ $deferred.push([$methodVal(w.mutex, "Unlock"), []]);
191669
+ /* */ if (w.released) { $s = 2; continue; }
191670
+ /* */ $s = 3; continue;
191671
+ /* if (w.released) { */ case 2:
191672
+ $24r = false;
191673
+ $s = 4; case 4: return $24r;
191674
+ /* } */ case 3:
191675
+ _selection = $select([[w.domEvents.GetEventChan(), event], []]);
191676
+ /* */ if (_selection[0] === 0) { $s = 5; continue; }
191677
+ /* */ if (_selection[0] === 1) { $s = 6; continue; }
191678
+ /* */ $s = 7; continue;
191679
+ /* if (_selection[0] === 0) { */ case 5:
191680
+ $24r$1 = true;
191681
+ $s = 8; case 8: return $24r$1;
191682
+ /* } else if (_selection[0] === 1) { */ case 6:
191683
+ $24r$2 = false;
191684
+ $s = 9; case 9: return $24r$2;
191685
+ /* } */ case 7:
191686
+ $s = -1; return false;
191687
+ /* */ } return; } } catch(err) { $err = err; $s = -1; return false; } finally { $callDeferred($deferred, $err); if($curGoroutine.asleep) { var $f = {$blk: windowImpl.ptr.prototype.SendNonBlocking, $c: true, $r, $24r, $24r$1, $24r$2, _selection, event, w, $s, $deferred};return $f; } }
191688
+ };
191689
+ windowImpl.prototype.SendNonBlocking = function(event) { return this.$val.SendNonBlocking(event); };
191252
191690
  windowImpl.ptr.prototype.SendFirst = function(event) {
191253
- var event, w;
191691
+ var {_selection, event, w, $s, $deferred, $r, $c} = $restore(this, {event});
191692
+ /* */ $s = $s || 0; var $err = null; try { s: while (true) { switch ($s) { case 0: $deferred = []; $curGoroutine.deferStack.push($deferred);
191254
191693
  w = this;
191255
- if (w.released) {
191256
- return;
191694
+ $r = w.mutex.Lock(); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
191695
+ $deferred.push([$methodVal(w.mutex, "Unlock"), []]);
191696
+ /* */ if (w.released) { $s = 2; continue; }
191697
+ /* */ $s = 3; continue;
191698
+ /* if (w.released) { */ case 2:
191699
+ $s = 4; case 4: return;
191700
+ /* } */ case 3:
191701
+ w.frontEvents = $append(w.frontEvents, event);
191702
+ _selection = $select([[w.eventWake, $clone(new structType.ptr(), structType)], []]);
191703
+ if (_selection[0] === 0) {
191704
+ } else if (_selection[0] === 1) {
191257
191705
  }
191258
- $panic(new $String("Not implemented"));
191706
+ $s = -1; return;
191707
+ /* */ } return; } } catch(err) { $err = err; $s = -1; } finally { $callDeferred($deferred, $err); if($curGoroutine.asleep) { var $f = {$blk: windowImpl.ptr.prototype.SendFirst, $c: true, $r, _selection, event, w, $s, $deferred};return $f; } }
191259
191708
  };
191260
191709
  windowImpl.prototype.SendFirst = function(event) { return this.$val.SendFirst(event); };
191261
191710
  windowImpl.ptr.prototype.NextEvent = function() {
191262
- var {_r, ev, w, $s, $r, $c} = $restore(this, {});
191711
+ var {_r, _selection, _tuple, event, event$1, ok, w, x, $s, $r, $c} = $restore(this, {});
191263
191712
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
191264
191713
  w = this;
191265
- _r = $recv(w.domEvents.GetEventChan()); /* */ $s = 1; case 1: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; }
191266
- ev = _r[0];
191267
- $s = -1; return ev;
191268
- /* */ } return; } var $f = {$blk: windowImpl.ptr.prototype.NextEvent, $c: true, $r, _r, ev, w, $s};return $f;
191714
+ /* while (true) { */ case 1:
191715
+ $r = w.mutex.Lock(); /* */ $s = 3; case 3: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
191716
+ _tuple = w.nextQueuedEvent();
191717
+ event = _tuple[0];
191718
+ ok = _tuple[1];
191719
+ /* */ if (ok) { $s = 4; continue; }
191720
+ /* */ $s = 5; continue;
191721
+ /* if (ok) { */ case 4:
191722
+ $r = w.mutex.Unlock(); /* */ $s = 6; case 6: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
191723
+ $s = -1; return event;
191724
+ /* } */ case 5:
191725
+ $r = w.mutex.Unlock(); /* */ $s = 7; case 7: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
191726
+ _r = $select([[w.domEvents.GetEventChan()], [w.eventWake]]); /* */ $s = 8; case 8: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; }
191727
+ _selection = _r;
191728
+ /* */ if (_selection[0] === 0) { $s = 9; continue; }
191729
+ /* */ if (_selection[0] === 1) { $s = 10; continue; }
191730
+ /* */ $s = 11; continue;
191731
+ /* if (_selection[0] === 0) { */ case 9:
191732
+ event$1 = _selection[1][0];
191733
+ $r = w.mutex.Lock(); /* */ $s = 12; case 12: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
191734
+ w.backEvents = $append(w.backEvents, $ifaceNil);
191735
+ $copySlice($subslice(w.backEvents, 1), $subslice(w.backEvents, 0, (w.backEvents.$length - 1 >> 0)));
191736
+ (x = w.backEvents, (0 >= x.$length ? ($throwRuntimeError("index out of range"), undefined) : x.$array[x.$offset + 0] = event$1));
191737
+ $r = w.mutex.Unlock(); /* */ $s = 13; case 13: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
191738
+ $s = 11; continue;
191739
+ /* } else if (_selection[0] === 1) { */ case 10:
191740
+ /* } */ case 11:
191741
+ $s = 1; continue;
191742
+ case 2:
191743
+ $s = -1; return $ifaceNil;
191744
+ /* */ } return; } var $f = {$blk: windowImpl.ptr.prototype.NextEvent, $c: true, $r, _r, _selection, _tuple, event, event$1, ok, w, x, $s};return $f;
191269
191745
  };
191270
191746
  windowImpl.prototype.NextEvent = function() { return this.$val.NextEvent(); };
191747
+ windowImpl.ptr.prototype.nextQueuedEvent = function() {
191748
+ var event, event$1, last, w, x, x$1, x$2, x$3;
191749
+ w = this;
191750
+ last = w.frontEvents.$length - 1 >> 0;
191751
+ if (last >= 0) {
191752
+ event = (x = w.frontEvents, ((last < 0 || last >= x.$length) ? ($throwRuntimeError("index out of range"), undefined) : x.$array[x.$offset + last]));
191753
+ (x$1 = w.frontEvents, ((last < 0 || last >= x$1.$length) ? ($throwRuntimeError("index out of range"), undefined) : x$1.$array[x$1.$offset + last] = $ifaceNil));
191754
+ w.frontEvents = $subslice(w.frontEvents, 0, last);
191755
+ return [event, true];
191756
+ }
191757
+ if (w.backEvents.$length > 0) {
191758
+ event$1 = (x$2 = w.backEvents, (0 >= x$2.$length ? ($throwRuntimeError("index out of range"), undefined) : x$2.$array[x$2.$offset + 0]));
191759
+ (x$3 = w.backEvents, (0 >= x$3.$length ? ($throwRuntimeError("index out of range"), undefined) : x$3.$array[x$3.$offset + 0] = $ifaceNil));
191760
+ w.backEvents = $subslice(w.backEvents, 1);
191761
+ return [event$1, true];
191762
+ }
191763
+ return [$ifaceNil, false];
191764
+ };
191765
+ windowImpl.prototype.nextQueuedEvent = function() { return this.$val.nextQueuedEvent(); };
191271
191766
  windowImpl.ptr.prototype.Upload = function(dp, src, sr) {
191272
191767
  var {_r, dp, sr, src, w, $s, $r, $c} = $restore(this, {dp, src, sr});
191273
191768
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
@@ -191289,9 +191784,9 @@ $packages["golang.org/x/exp/shiny/driver/canvasdriver"] = (function() {
191289
191784
  $s = -1; return;
191290
191785
  }
191291
191786
  _ref = src;
191292
- /* */ if ($assertType(_ref, ptrType$3, true)[1]) { $s = 1; continue; }
191787
+ /* */ if ($assertType(_ref, ptrType$4, true)[1]) { $s = 1; continue; }
191293
191788
  /* */ $s = 2; continue;
191294
- /* if ($assertType(_ref, ptrType$3, true)[1]) { */ case 1:
191789
+ /* if ($assertType(_ref, ptrType$4, true)[1]) { */ case 1:
191295
191790
  jsSrc = _ref.$val;
191296
191791
  _r = $clone(w.ctx2d, js.Value).Call("drawImage", new sliceType([(x = jsSrc.YCbCrJS().CanvasImageSource, new x.constructor.elem(x)), new $Int(0), new $Int(0)])); /* */ $s = 3; case 3: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; }
191297
191792
  _r;
@@ -191399,7 +191894,7 @@ $packages["golang.org/x/exp/shiny/driver/canvasdriver"] = (function() {
191399
191894
  newBuffer = function(screen$1, size) {
191400
191895
  var _q, _q$1, _q$2, b, rect, screen$1, size;
191401
191896
  rect = new image.Rectangle.ptr(new image.Point.ptr(0, 0), $clone(size, image.Point));
191402
- b = new BufferImpl.ptr(screen$1, $clone(size, image.Point), new sync.Mutex.ptr(0, 0), false, $clone(new image.RGBA.ptr($makeSlice(sliceType$1, ($imul(($imul(4, size.X)), size.Y))), $imul(4, size.X), $clone(rect, image.Rectangle)), image.RGBA), $clone(new image.YCbCr.ptr($makeSlice(sliceType$1, ($imul(size.X, size.Y))), $makeSlice(sliceType$1, (_q$1 = ($imul(size.X, size.Y)) / 4, (_q$1 === _q$1 && _q$1 !== 1/0 && _q$1 !== -1/0) ? _q$1 >> 0 : $throwRuntimeError("integer divide by zero"))), $makeSlice(sliceType$1, (_q$2 = ($imul(size.X, size.Y)) / 4, (_q$2 === _q$2 && _q$2 !== 1/0 && _q$2 !== -1/0) ? _q$2 >> 0 : $throwRuntimeError("integer divide by zero"))), size.X, (_q = size.X / 2, (_q === _q && _q !== 1/0 && _q !== -1/0) ? _q >> 0 : $throwRuntimeError("integer divide by zero")), 2, $clone(rect, image.Rectangle)), image.YCbCr), ptrType$4.nil);
191897
+ b = new BufferImpl.ptr(screen$1, $clone(size, image.Point), new sync.Mutex.ptr(0, 0), false, $clone(new image.RGBA.ptr($makeSlice(sliceType$1, ($imul(($imul(4, size.X)), size.Y))), $imul(4, size.X), $clone(rect, image.Rectangle)), image.RGBA), $clone(new image.YCbCr.ptr($makeSlice(sliceType$1, ($imul(size.X, size.Y))), $makeSlice(sliceType$1, (_q$1 = ($imul(size.X, size.Y)) / 4, (_q$1 === _q$1 && _q$1 !== 1/0 && _q$1 !== -1/0) ? _q$1 >> 0 : $throwRuntimeError("integer divide by zero"))), $makeSlice(sliceType$1, (_q$2 = ($imul(size.X, size.Y)) / 4, (_q$2 === _q$2 && _q$2 !== 1/0 && _q$2 !== -1/0) ? _q$2 >> 0 : $throwRuntimeError("integer divide by zero"))), size.X, (_q = size.X / 2, (_q === _q && _q !== 1/0 && _q !== -1/0) ? _q >> 0 : $throwRuntimeError("integer divide by zero")), 2, $clone(rect, image.Rectangle)), image.YCbCr), ptrType$5.nil);
191403
191898
  return b;
191404
191899
  };
191405
191900
  BufferImpl.ptr.prototype.Size = function() {
@@ -191429,8 +191924,8 @@ $packages["golang.org/x/exp/shiny/driver/canvasdriver"] = (function() {
191429
191924
  BufferImpl.ptr.prototype.YCbCrJS = function() {
191430
191925
  var b;
191431
191926
  b = this;
191432
- if (b.ycbcrJS === ptrType$4.nil) {
191433
- b.ycbcrJS = new YCbCrJS.ptr(ptrType$5.nil);
191927
+ if (b.ycbcrJS === ptrType$5.nil) {
191928
+ b.ycbcrJS = new YCbCrJS.ptr(ptrType$6.nil);
191434
191929
  }
191435
191930
  return b.ycbcrJS;
191436
191931
  };
@@ -191451,13 +191946,13 @@ $packages["golang.org/x/exp/shiny/driver/canvasdriver"] = (function() {
191451
191946
  /* */ } return; } } catch(err) { $err = err; $s = -1; } finally { $callDeferred($deferred, $err); if($curGoroutine.asleep) { var $f = {$blk: BufferImpl.ptr.prototype.Release, $c: true, $r, b, $s, $deferred};return $f; } }
191452
191947
  };
191453
191948
  BufferImpl.prototype.Release = function() { return this.$val.Release(); };
191454
- ptrType$7.methods = [{prop: "Release", name: "Release", pkg: "", typ: $funcType([], [], false)}, {prop: "Publish", name: "Publish", pkg: "", typ: $funcType([], [screen.PublishResult], false)}, {prop: "Send", name: "Send", pkg: "", typ: $funcType([$emptyInterface], [], false)}, {prop: "SendFirst", name: "SendFirst", pkg: "", typ: $funcType([$emptyInterface], [], false)}, {prop: "NextEvent", name: "NextEvent", pkg: "", typ: $funcType([], [$emptyInterface], false)}, {prop: "Upload", name: "Upload", pkg: "", typ: $funcType([image.Point, screen.Buffer, image.Rectangle], [], false)}, {prop: "UploadYCbCr", name: "UploadYCbCr", pkg: "", typ: $funcType([image.Point, screen.Buffer, image.Rectangle], [], false)}, {prop: "Fill", name: "Fill", pkg: "", typ: $funcType([image.Rectangle, color.Color, draw.Op], [], false)}, {prop: "Draw", name: "Draw", pkg: "", typ: $funcType([f64.Aff3, screen.Texture, image.Rectangle, draw.Op, ptrType$6], [], false)}, {prop: "DrawUniform", name: "DrawUniform", pkg: "", typ: $funcType([f64.Aff3, color.Color, image.Rectangle, draw.Op, ptrType$6], [], false)}, {prop: "Copy", name: "Copy", pkg: "", typ: $funcType([image.Point, screen.Texture, image.Rectangle, draw.Op, ptrType$6], [], false)}, {prop: "Scale", name: "Scale", pkg: "", typ: $funcType([image.Rectangle, screen.Texture, image.Rectangle, draw.Op, ptrType$6], [], false)}];
191455
- ptrType.methods = [{prop: "NewBuffer", name: "NewBuffer", pkg: "", typ: $funcType([image.Point], [screen.Buffer, $error], false)}, {prop: "NewTexture", name: "NewTexture", pkg: "", typ: $funcType([image.Point], [screen.Texture, $error], false)}, {prop: "NewWindow", name: "NewWindow", pkg: "", typ: $funcType([ptrType$8], [screen.Window, $error], false)}];
191456
- ptrType$3.methods = [{prop: "Size", name: "Size", pkg: "", typ: $funcType([], [image.Point], false)}, {prop: "Bounds", name: "Bounds", pkg: "", typ: $funcType([], [image.Rectangle], false)}, {prop: "RGBA", name: "RGBA", pkg: "", typ: $funcType([], [ptrType$9], false)}, {prop: "YCbCr", name: "YCbCr", pkg: "", typ: $funcType([], [ptrType$10], false)}, {prop: "YCbCrJS", name: "YCbCrJS", pkg: "", typ: $funcType([], [ptrType$4], false)}, {prop: "Release", name: "Release", pkg: "", typ: $funcType([], [], false)}];
191457
- windowImpl.init("golang.org/x/exp/shiny/driver/canvasdriver", [{prop: "screen", name: "screen", embedded: false, exported: false, typ: ptrType, tag: ""}, {prop: "mutex", name: "mutex", embedded: false, exported: false, typ: ptrType$1, tag: ""}, {prop: "canvasEl", name: "canvasEl", embedded: false, exported: false, typ: js.Value, tag: ""}, {prop: "ctx2d", name: "ctx2d", embedded: false, exported: false, typ: js.Value, tag: ""}, {prop: "released", name: "released", embedded: false, exported: false, typ: $Bool, tag: ""}, {prop: "domEvents", name: "domEvents", embedded: false, exported: false, typ: ptrType$2, tag: ""}, {prop: "resizeCallback", name: "resizeCallback", embedded: false, exported: false, typ: js.Func, tag: ""}]);
191949
+ ptrType$8.methods = [{prop: "Release", name: "Release", pkg: "", typ: $funcType([], [], false)}, {prop: "Publish", name: "Publish", pkg: "", typ: $funcType([], [screen.PublishResult], false)}, {prop: "Send", name: "Send", pkg: "", typ: $funcType([$emptyInterface], [], false)}, {prop: "SendNonBlocking", name: "SendNonBlocking", pkg: "", typ: $funcType([$emptyInterface], [$Bool], false)}, {prop: "SendFirst", name: "SendFirst", pkg: "", typ: $funcType([$emptyInterface], [], false)}, {prop: "NextEvent", name: "NextEvent", pkg: "", typ: $funcType([], [$emptyInterface], false)}, {prop: "nextQueuedEvent", name: "nextQueuedEvent", pkg: "golang.org/x/exp/shiny/driver/canvasdriver", typ: $funcType([], [$emptyInterface, $Bool], false)}, {prop: "Upload", name: "Upload", pkg: "", typ: $funcType([image.Point, screen.Buffer, image.Rectangle], [], false)}, {prop: "UploadYCbCr", name: "UploadYCbCr", pkg: "", typ: $funcType([image.Point, screen.Buffer, image.Rectangle], [], false)}, {prop: "Fill", name: "Fill", pkg: "", typ: $funcType([image.Rectangle, color.Color, draw.Op], [], false)}, {prop: "Draw", name: "Draw", pkg: "", typ: $funcType([f64.Aff3, screen.Texture, image.Rectangle, draw.Op, ptrType$7], [], false)}, {prop: "DrawUniform", name: "DrawUniform", pkg: "", typ: $funcType([f64.Aff3, color.Color, image.Rectangle, draw.Op, ptrType$7], [], false)}, {prop: "Copy", name: "Copy", pkg: "", typ: $funcType([image.Point, screen.Texture, image.Rectangle, draw.Op, ptrType$7], [], false)}, {prop: "Scale", name: "Scale", pkg: "", typ: $funcType([image.Rectangle, screen.Texture, image.Rectangle, draw.Op, ptrType$7], [], false)}];
191950
+ ptrType$1.methods = [{prop: "NewBuffer", name: "NewBuffer", pkg: "", typ: $funcType([image.Point], [screen.Buffer, $error], false)}, {prop: "NewTexture", name: "NewTexture", pkg: "", typ: $funcType([image.Point], [screen.Texture, $error], false)}, {prop: "NewWindow", name: "NewWindow", pkg: "", typ: $funcType([ptrType], [screen.Window, $error], false)}];
191951
+ ptrType$4.methods = [{prop: "Size", name: "Size", pkg: "", typ: $funcType([], [image.Point], false)}, {prop: "Bounds", name: "Bounds", pkg: "", typ: $funcType([], [image.Rectangle], false)}, {prop: "RGBA", name: "RGBA", pkg: "", typ: $funcType([], [ptrType$9], false)}, {prop: "YCbCr", name: "YCbCr", pkg: "", typ: $funcType([], [ptrType$10], false)}, {prop: "YCbCrJS", name: "YCbCrJS", pkg: "", typ: $funcType([], [ptrType$5], false)}, {prop: "Release", name: "Release", pkg: "", typ: $funcType([], [], false)}];
191952
+ windowImpl.init("golang.org/x/exp/shiny/driver/canvasdriver", [{prop: "screen", name: "screen", embedded: false, exported: false, typ: ptrType$1, tag: ""}, {prop: "mutex", name: "mutex", embedded: false, exported: false, typ: ptrType$2, tag: ""}, {prop: "canvasEl", name: "canvasEl", embedded: false, exported: false, typ: js.Value, tag: ""}, {prop: "ctx2d", name: "ctx2d", embedded: false, exported: false, typ: js.Value, tag: ""}, {prop: "released", name: "released", embedded: false, exported: false, typ: $Bool, tag: ""}, {prop: "domEvents", name: "domEvents", embedded: false, exported: false, typ: ptrType$3, tag: ""}, {prop: "resizeCallback", name: "resizeCallback", embedded: false, exported: false, typ: js.Func, tag: ""}, {prop: "frontEvents", name: "frontEvents", embedded: false, exported: false, typ: sliceType, tag: ""}, {prop: "backEvents", name: "backEvents", embedded: false, exported: false, typ: sliceType, tag: ""}, {prop: "eventWake", name: "eventWake", embedded: false, exported: false, typ: chanType, tag: ""}]);
191458
191953
  screenImpl.init("golang.org/x/exp/shiny/driver/canvasdriver", [{prop: "doc", name: "doc", embedded: false, exported: false, typ: js.Value, tag: ""}]);
191459
- YCbCrJS.init("", [{prop: "CanvasImageSource", name: "CanvasImageSource", embedded: false, exported: true, typ: ptrType$5, tag: ""}]);
191460
- BufferImpl.init("golang.org/x/exp/shiny/driver/canvasdriver", [{prop: "screen", name: "screen", embedded: false, exported: false, typ: ptrType, tag: ""}, {prop: "size", name: "size", embedded: false, exported: false, typ: image.Point, tag: ""}, {prop: "mutex", name: "mutex", embedded: false, exported: false, typ: ptrType$1, tag: ""}, {prop: "released", name: "released", embedded: false, exported: false, typ: $Bool, tag: ""}, {prop: "rgba", name: "rgba", embedded: false, exported: false, typ: image.RGBA, tag: ""}, {prop: "ycbcr", name: "ycbcr", embedded: false, exported: false, typ: image.YCbCr, tag: ""}, {prop: "ycbcrJS", name: "ycbcrJS", embedded: false, exported: false, typ: ptrType$4, tag: ""}]);
191954
+ YCbCrJS.init("", [{prop: "CanvasImageSource", name: "CanvasImageSource", embedded: false, exported: true, typ: ptrType$6, tag: ""}]);
191955
+ BufferImpl.init("golang.org/x/exp/shiny/driver/canvasdriver", [{prop: "screen", name: "screen", embedded: false, exported: false, typ: ptrType$1, tag: ""}, {prop: "size", name: "size", embedded: false, exported: false, typ: image.Point, tag: ""}, {prop: "mutex", name: "mutex", embedded: false, exported: false, typ: ptrType$2, tag: ""}, {prop: "released", name: "released", embedded: false, exported: false, typ: $Bool, tag: ""}, {prop: "rgba", name: "rgba", embedded: false, exported: false, typ: image.RGBA, tag: ""}, {prop: "ycbcr", name: "ycbcr", embedded: false, exported: false, typ: image.YCbCr, tag: ""}, {prop: "ycbcrJS", name: "ycbcrJS", embedded: false, exported: false, typ: ptrType$5, tag: ""}]);
191461
191956
  $init = function() {
191462
191957
  $pkg.$init = function() {};
191463
191958
  /* */ var $f, $c = false, $s = 0, $r; if (this !== undefined && this.$blk !== undefined) { $f = this; $c = true; $s = $f.$s; $r = $f.$r; } s: while (true) { switch ($s) { case 0:
@@ -191673,7 +192168,7 @@ $packages["golang.org/x/exp/shiny/imageutil"] = (function() {
191673
192168
  return $pkg;
191674
192169
  })();
191675
192170
  $packages["golang.org/x/exp/shiny/driver/webgldriver"] = (function() {
191676
- var $pkg = {}, $init, fmt, webgl, types, errscreen, dom, imageutil, screen, f64, image, color, draw, sync, js, windowImpl, screenImpl, ArrayBufferSlice, YCbCrJS, BufferImpl, sliceType, sliceType$1, sliceType$2, ptrType, ptrType$1, funcType, arrayType, ptrType$2, ptrType$3, ptrType$4, ptrType$5, ptrType$6, ptrType$7, sliceType$3, ptrType$8, ptrType$9, ptrType$10, ptrType$11, ptrType$12, ptrType$13, ptrType$14, texCoordsVertices, elementsIndices, newWindow, main, newScreenImpl, newBuffer;
192171
+ var $pkg = {}, $init, fmt, webgl, types, errscreen, dom, imageutil, screen, f64, image, color, draw, sync, js, windowImpl, screenImpl, ArrayBufferSlice, YCbCrJS, BufferImpl, sliceType, sliceType$1, sliceType$2, ptrType, ptrType$1, ptrType$2, funcType, arrayType, ptrType$3, ptrType$4, ptrType$5, ptrType$6, ptrType$7, structType, ptrType$8, sliceType$3, ptrType$9, ptrType$10, ptrType$11, chanType, ptrType$12, ptrType$13, ptrType$14, texCoordsVertices, elementsIndices, newWindow, main, newScreenImpl, newBuffer;
191677
192172
  fmt = $packages["fmt"];
191678
192173
  webgl = $packages["github.com/nuberu/webgl"];
191679
192174
  types = $packages["github.com/nuberu/webgl/types"];
@@ -191687,22 +192182,25 @@ $packages["golang.org/x/exp/shiny/driver/webgldriver"] = (function() {
191687
192182
  draw = $packages["image/draw"];
191688
192183
  sync = $packages["sync"];
191689
192184
  js = $packages["syscall/js"];
191690
- windowImpl = $pkg.windowImpl = $newType(0, $kindStruct, "webgldriver.windowImpl", true, "golang.org/x/exp/shiny/driver/webgldriver", false, function(screen_, mutex_, canvasEl_, gl_, programRGBA_, imageTexRGBA_, programYUV420_, imageTexY_, imageTexU_, imageTexV_, vertexArray_, released_, domEvents_, width_, height_) {
192185
+ windowImpl = $pkg.windowImpl = $newType(0, $kindStruct, "webgldriver.windowImpl", true, "golang.org/x/exp/shiny/driver/webgldriver", false, function(screen_, mutex_, canvasEl_, gl_, programRGBA_, imageTexRGBA_, programYUV420_, imageTexY_, imageTexU_, imageTexV_, vertexArray_, released_, domEvents_, frontEvents_, backEvents_, eventWake_, width_, height_) {
191691
192186
  this.$val = this;
191692
192187
  if (arguments.length === 0) {
191693
- this.screen = ptrType.nil;
191694
- this.mutex = ptrType$1.nil;
192188
+ this.screen = ptrType$1.nil;
192189
+ this.mutex = ptrType$2.nil;
191695
192190
  this.canvasEl = new js.Value.ptr(null, false, arrayType.zero());
191696
- this.gl = ptrType$2.nil;
191697
- this.programRGBA = ptrType$3.nil;
191698
- this.imageTexRGBA = ptrType$4.nil;
191699
- this.programYUV420 = ptrType$3.nil;
191700
- this.imageTexY = ptrType$4.nil;
191701
- this.imageTexU = ptrType$4.nil;
191702
- this.imageTexV = ptrType$4.nil;
191703
- this.vertexArray = ptrType$5.nil;
192191
+ this.gl = ptrType$3.nil;
192192
+ this.programRGBA = ptrType$4.nil;
192193
+ this.imageTexRGBA = ptrType$5.nil;
192194
+ this.programYUV420 = ptrType$4.nil;
192195
+ this.imageTexY = ptrType$5.nil;
192196
+ this.imageTexU = ptrType$5.nil;
192197
+ this.imageTexV = ptrType$5.nil;
192198
+ this.vertexArray = ptrType$6.nil;
191704
192199
  this.released = false;
191705
- this.domEvents = ptrType$6.nil;
192200
+ this.domEvents = ptrType$7.nil;
192201
+ this.frontEvents = sliceType$2.nil;
192202
+ this.backEvents = sliceType$2.nil;
192203
+ this.eventWake = $chanNil;
191706
192204
  this.width = 0;
191707
192205
  this.height = 0;
191708
192206
  return;
@@ -191720,6 +192218,9 @@ $packages["golang.org/x/exp/shiny/driver/webgldriver"] = (function() {
191720
192218
  this.vertexArray = vertexArray_;
191721
192219
  this.released = released_;
191722
192220
  this.domEvents = domEvents_;
192221
+ this.frontEvents = frontEvents_;
192222
+ this.backEvents = backEvents_;
192223
+ this.eventWake = eventWake_;
191723
192224
  this.width = width_;
191724
192225
  this.height = height_;
191725
192226
  });
@@ -191768,13 +192269,13 @@ $packages["golang.org/x/exp/shiny/driver/webgldriver"] = (function() {
191768
192269
  BufferImpl = $pkg.BufferImpl = $newType(0, $kindStruct, "webgldriver.BufferImpl", true, "golang.org/x/exp/shiny/driver/webgldriver", true, function(screen_, size_, mutex_, released_, rgba_, ycbcr_, ycbcrJS_) {
191769
192270
  this.$val = this;
191770
192271
  if (arguments.length === 0) {
191771
- this.screen = ptrType.nil;
192272
+ this.screen = ptrType$1.nil;
191772
192273
  this.size = new image.Point.ptr(0, 0);
191773
- this.mutex = ptrType$1.nil;
192274
+ this.mutex = ptrType$2.nil;
191774
192275
  this.released = false;
191775
192276
  this.rgba = new image.RGBA.ptr(sliceType$3.nil, 0, new image.Rectangle.ptr(new image.Point.ptr(0, 0), new image.Point.ptr(0, 0)));
191776
192277
  this.ycbcr = new image.YCbCr.ptr(sliceType$3.nil, sliceType$3.nil, sliceType$3.nil, 0, 0, 0, new image.Rectangle.ptr(new image.Point.ptr(0, 0), new image.Point.ptr(0, 0)));
191777
- this.ycbcrJS = ptrType$8.nil;
192278
+ this.ycbcrJS = ptrType$9.nil;
191778
192279
  return;
191779
192280
  }
191780
192281
  this.screen = screen_;
@@ -191788,62 +192289,82 @@ $packages["golang.org/x/exp/shiny/driver/webgldriver"] = (function() {
191788
192289
  sliceType = $sliceType($Float32);
191789
192290
  sliceType$1 = $sliceType($Uint16);
191790
192291
  sliceType$2 = $sliceType($emptyInterface);
191791
- ptrType = $ptrType(screenImpl);
191792
- ptrType$1 = $ptrType(sync.Mutex);
192292
+ ptrType = $ptrType(screen.NewWindowOptions);
192293
+ ptrType$1 = $ptrType(screenImpl);
192294
+ ptrType$2 = $ptrType(sync.Mutex);
191793
192295
  funcType = $funcType([], [], false);
191794
192296
  arrayType = $arrayType(funcType, 0);
191795
- ptrType$2 = $ptrType(webgl.RenderingContext);
191796
- ptrType$3 = $ptrType(types.Program);
191797
- ptrType$4 = $ptrType(types.Texture);
191798
- ptrType$5 = $ptrType(types.VertexArray);
191799
- ptrType$6 = $ptrType(dom.DomEvents);
191800
- ptrType$7 = $ptrType(BufferImpl);
192297
+ ptrType$3 = $ptrType(webgl.RenderingContext);
192298
+ ptrType$4 = $ptrType(types.Program);
192299
+ ptrType$5 = $ptrType(types.Texture);
192300
+ ptrType$6 = $ptrType(types.VertexArray);
192301
+ ptrType$7 = $ptrType(dom.DomEvents);
192302
+ structType = $structType("", []);
192303
+ ptrType$8 = $ptrType(BufferImpl);
191801
192304
  sliceType$3 = $sliceType($Uint8);
191802
- ptrType$8 = $ptrType(YCbCrJS);
191803
- ptrType$9 = $ptrType(screen.DrawOptions);
191804
- ptrType$10 = $ptrType(windowImpl);
191805
- ptrType$11 = $ptrType(screen.NewWindowOptions);
192305
+ ptrType$9 = $ptrType(YCbCrJS);
192306
+ ptrType$10 = $ptrType(screen.DrawOptions);
192307
+ ptrType$11 = $ptrType(windowImpl);
192308
+ chanType = $chanType(structType, false, false);
191806
192309
  ptrType$12 = $ptrType(ArrayBufferSlice);
191807
192310
  ptrType$13 = $ptrType(image.RGBA);
191808
192311
  ptrType$14 = $ptrType(image.YCbCr);
191809
192312
  newWindow = function(screen$1, opts) {
191810
- var {_r, _r$1, _r$2, _r$3, _r$4, _r$5, _tuple, canvasEl, domEvents, err, gl, opts, screen$1, w, $s, $r, $c} = $restore(this, {screen$1, opts});
192313
+ var {_arg, _arg$1, _arg$2, _arg$3, _r, _r$1, _r$2, _r$3, _r$4, _r$5, _r$6, _r$7, _r$8, _r$9, _tuple, canvasEl, domEvents, err, gl, opts, screen$1, style, w, $s, $r, $c} = $restore(this, {screen$1, opts});
191811
192314
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
191812
192315
  _r = $clone(screen$1.doc, js.Value).Call("createElement", new sliceType$2([new $String("canvas")])); /* */ $s = 1; case 1: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; }
191813
192316
  canvasEl = $clone(_r, js.Value);
191814
192317
  _r$1 = $clone($clone(screen$1.doc, js.Value).Get("body"), js.Value).Call("appendChild", new sliceType$2([new canvasEl.constructor.elem(canvasEl)])); /* */ $s = 2; case 2: if($c) { $c = false; _r$1 = _r$1.$blk(); } if (_r$1 && _r$1.$blk !== undefined) { break s; }
191815
192318
  _r$1;
191816
- _r$2 = webgl.FromCanvas($clone(canvasEl, js.Value)); /* */ $s = 3; case 3: if($c) { $c = false; _r$2 = _r$2.$blk(); } if (_r$2 && _r$2.$blk !== undefined) { break s; }
191817
- _tuple = _r$2;
192319
+ /* */ if (!(opts === ptrType.nil) && opts.Width > 0 && opts.Height > 0) { $s = 3; continue; }
192320
+ /* */ $s = 4; continue;
192321
+ /* if (!(opts === ptrType.nil) && opts.Width > 0 && opts.Height > 0) { */ case 3:
192322
+ style = $clone($clone(canvasEl, js.Value).Get("style"), js.Value);
192323
+ $clone(style, js.Value).Set("position", new $String("absolute"));
192324
+ _r$2 = fmt.Sprintf("%dpx", new sliceType$2([new $Int(opts.X)])); /* */ $s = 5; case 5: if($c) { $c = false; _r$2 = _r$2.$blk(); } if (_r$2 && _r$2.$blk !== undefined) { break s; }
192325
+ _arg = new $String(_r$2);
192326
+ $r = $clone(style, js.Value).Set("left", _arg); /* */ $s = 6; case 6: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
192327
+ _r$3 = fmt.Sprintf("%dpx", new sliceType$2([new $Int(opts.Y)])); /* */ $s = 7; case 7: if($c) { $c = false; _r$3 = _r$3.$blk(); } if (_r$3 && _r$3.$blk !== undefined) { break s; }
192328
+ _arg$1 = new $String(_r$3);
192329
+ $r = $clone(style, js.Value).Set("top", _arg$1); /* */ $s = 8; case 8: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
192330
+ _r$4 = fmt.Sprintf("%dpx", new sliceType$2([new $Int(opts.Width)])); /* */ $s = 9; case 9: if($c) { $c = false; _r$4 = _r$4.$blk(); } if (_r$4 && _r$4.$blk !== undefined) { break s; }
192331
+ _arg$2 = new $String(_r$4);
192332
+ $r = $clone(style, js.Value).Set("width", _arg$2); /* */ $s = 10; case 10: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
192333
+ _r$5 = fmt.Sprintf("%dpx", new sliceType$2([new $Int(opts.Height)])); /* */ $s = 11; case 11: if($c) { $c = false; _r$5 = _r$5.$blk(); } if (_r$5 && _r$5.$blk !== undefined) { break s; }
192334
+ _arg$3 = new $String(_r$5);
192335
+ $r = $clone(style, js.Value).Set("height", _arg$3); /* */ $s = 12; case 12: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
192336
+ /* } */ case 4:
192337
+ _r$6 = webgl.FromCanvas($clone(canvasEl, js.Value)); /* */ $s = 13; case 13: if($c) { $c = false; _r$6 = _r$6.$blk(); } if (_r$6 && _r$6.$blk !== undefined) { break s; }
192338
+ _tuple = _r$6;
191818
192339
  gl = _tuple[0];
191819
192340
  err = _tuple[1];
191820
192341
  if (!($interfaceIsEqual(err, $ifaceNil))) {
191821
192342
  $panic(err);
191822
192343
  }
191823
- domEvents = dom.NewDomEvents();
191824
- w = new windowImpl.ptr(screen$1, ptrType$1.nil, $clone(canvasEl, js.Value), gl, ptrType$3.nil, ptrType$4.nil, ptrType$3.nil, ptrType$4.nil, ptrType$4.nil, ptrType$4.nil, ptrType$5.nil, false, domEvents, 0, 0);
191825
- /* */ if (!((opts.Width === 0))) { $s = 4; continue; }
191826
- /* */ $s = 5; continue;
191827
- /* if (!((opts.Width === 0))) { */ case 4:
191828
- $r = dom.SetWindowWidth(opts.Width); /* */ $s = 6; case 6: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
191829
- /* } */ case 5:
191830
- /* */ if (!((opts.Height === 0))) { $s = 7; continue; }
191831
- /* */ $s = 8; continue;
191832
- /* if (!((opts.Height === 0))) { */ case 7:
191833
- $r = dom.SetWindowHeight(opts.Height); /* */ $s = 9; case 9: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
191834
- /* } */ case 8:
191835
- /* */ if (!(opts.Title === "")) { $s = 10; continue; }
191836
- /* */ $s = 11; continue;
191837
- /* if (!(opts.Title === "")) { */ case 10:
191838
- _r$3 = $clone($clone(screen$1.doc, js.Value).Get("head"), js.Value).Call("getElementsByTagName", new sliceType$2([new $String("title")])); /* */ $s = 12; case 12: if($c) { $c = false; _r$3 = _r$3.$blk(); } if (_r$3 && _r$3.$blk !== undefined) { break s; }
191839
- _r$4 = $clone(_r$3, js.Value).Call("item", new sliceType$2([new $Int(0)])); /* */ $s = 13; case 13: if($c) { $c = false; _r$4 = _r$4.$blk(); } if (_r$4 && _r$4.$blk !== undefined) { break s; }
191840
- $r = $clone(_r$4, js.Value).Set("innerHTML", new $String(opts.Title)); /* */ $s = 14; case 14: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
191841
- /* } */ case 11:
191842
- _r$5 = w.createBuffers(); /* */ $s = 15; case 15: if($c) { $c = false; _r$5 = _r$5.$blk(); } if (_r$5 && _r$5.$blk !== undefined) { break s; }
191843
- w.vertexArray = _r$5;
191844
- $r = domEvents.BindEvents(); /* */ $s = 16; case 16: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
192344
+ domEvents = dom.NewDomEventsForTarget($clone(canvasEl, js.Value));
192345
+ w = new windowImpl.ptr(screen$1, new sync.Mutex.ptr(0, 0), $clone(canvasEl, js.Value), gl, ptrType$4.nil, ptrType$5.nil, ptrType$4.nil, ptrType$5.nil, ptrType$5.nil, ptrType$5.nil, ptrType$6.nil, false, domEvents, sliceType$2.nil, sliceType$2.nil, new $Chan(structType, 1), 0, 0);
192346
+ /* */ if (!((opts.Width === 0))) { $s = 14; continue; }
192347
+ /* */ $s = 15; continue;
192348
+ /* if (!((opts.Width === 0))) { */ case 14:
192349
+ $r = dom.SetWindowWidth(opts.Width); /* */ $s = 16; case 16: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
192350
+ /* } */ case 15:
192351
+ /* */ if (!((opts.Height === 0))) { $s = 17; continue; }
192352
+ /* */ $s = 18; continue;
192353
+ /* if (!((opts.Height === 0))) { */ case 17:
192354
+ $r = dom.SetWindowHeight(opts.Height); /* */ $s = 19; case 19: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
192355
+ /* } */ case 18:
192356
+ /* */ if (!(opts.Title === "")) { $s = 20; continue; }
192357
+ /* */ $s = 21; continue;
192358
+ /* if (!(opts.Title === "")) { */ case 20:
192359
+ _r$7 = $clone($clone(screen$1.doc, js.Value).Get("head"), js.Value).Call("getElementsByTagName", new sliceType$2([new $String("title")])); /* */ $s = 22; case 22: if($c) { $c = false; _r$7 = _r$7.$blk(); } if (_r$7 && _r$7.$blk !== undefined) { break s; }
192360
+ _r$8 = $clone(_r$7, js.Value).Call("item", new sliceType$2([new $Int(0)])); /* */ $s = 23; case 23: if($c) { $c = false; _r$8 = _r$8.$blk(); } if (_r$8 && _r$8.$blk !== undefined) { break s; }
192361
+ $r = $clone(_r$8, js.Value).Set("innerHTML", new $String(opts.Title)); /* */ $s = 24; case 24: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
192362
+ /* } */ case 21:
192363
+ _r$9 = w.createBuffers(); /* */ $s = 25; case 25: if($c) { $c = false; _r$9 = _r$9.$blk(); } if (_r$9 && _r$9.$blk !== undefined) { break s; }
192364
+ w.vertexArray = _r$9;
192365
+ $r = domEvents.BindEvents(); /* */ $s = 26; case 26: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
191845
192366
  $s = -1; return w;
191846
- /* */ } return; } var $f = {$blk: newWindow, $c: true, $r, _r, _r$1, _r$2, _r$3, _r$4, _r$5, _tuple, canvasEl, domEvents, err, gl, opts, screen$1, w, $s};return $f;
192367
+ /* */ } return; } var $f = {$blk: newWindow, $c: true, $r, _arg, _arg$1, _arg$2, _arg$3, _r, _r$1, _r$2, _r$3, _r$4, _r$5, _r$6, _r$7, _r$8, _r$9, _tuple, canvasEl, domEvents, err, gl, opts, screen$1, style, w, $s};return $f;
191847
192368
  };
191848
192369
  windowImpl.ptr.prototype.ensureCanvasSize = function(width, height) {
191849
192370
  var height, w, width;
@@ -191895,33 +192416,126 @@ $packages["golang.org/x/exp/shiny/driver/webgldriver"] = (function() {
191895
192416
  };
191896
192417
  windowImpl.prototype.Publish = function() { return this.$val.Publish(); };
191897
192418
  windowImpl.ptr.prototype.Send = function(event) {
191898
- var event, w;
192419
+ var {event, eventChan, w, $s, $r, $c} = $restore(this, {event});
192420
+ /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
191899
192421
  w = this;
191900
- if (w.released) {
191901
- return;
191902
- }
191903
- $panic(new $String("Not implemented"));
192422
+ $r = w.mutex.Lock(); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
192423
+ /* */ if (w.released) { $s = 2; continue; }
192424
+ /* */ $s = 3; continue;
192425
+ /* if (w.released) { */ case 2:
192426
+ $r = w.mutex.Unlock(); /* */ $s = 4; case 4: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
192427
+ $s = -1; return;
192428
+ /* } */ case 3:
192429
+ eventChan = w.domEvents.GetEventChan();
192430
+ $r = w.mutex.Unlock(); /* */ $s = 5; case 5: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
192431
+ $r = $send(eventChan, event); /* */ $s = 6; case 6: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
192432
+ $s = -1; return;
192433
+ /* */ } return; } var $f = {$blk: windowImpl.ptr.prototype.Send, $c: true, $r, event, eventChan, w, $s};return $f;
191904
192434
  };
191905
192435
  windowImpl.prototype.Send = function(event) { return this.$val.Send(event); };
192436
+ windowImpl.ptr.prototype.SendNonBlocking = function(event) {
192437
+ var {$24r, $24r$1, $24r$2, _selection, event, w, $s, $deferred, $r, $c} = $restore(this, {event});
192438
+ /* */ $s = $s || 0; var $err = null; try { s: while (true) { switch ($s) { case 0: $deferred = []; $curGoroutine.deferStack.push($deferred);
192439
+ w = this;
192440
+ $r = w.mutex.Lock(); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
192441
+ $deferred.push([$methodVal(w.mutex, "Unlock"), []]);
192442
+ /* */ if (w.released) { $s = 2; continue; }
192443
+ /* */ $s = 3; continue;
192444
+ /* if (w.released) { */ case 2:
192445
+ $24r = false;
192446
+ $s = 4; case 4: return $24r;
192447
+ /* } */ case 3:
192448
+ _selection = $select([[w.domEvents.GetEventChan(), event], []]);
192449
+ /* */ if (_selection[0] === 0) { $s = 5; continue; }
192450
+ /* */ if (_selection[0] === 1) { $s = 6; continue; }
192451
+ /* */ $s = 7; continue;
192452
+ /* if (_selection[0] === 0) { */ case 5:
192453
+ $24r$1 = true;
192454
+ $s = 8; case 8: return $24r$1;
192455
+ /* } else if (_selection[0] === 1) { */ case 6:
192456
+ $24r$2 = false;
192457
+ $s = 9; case 9: return $24r$2;
192458
+ /* } */ case 7:
192459
+ $s = -1; return false;
192460
+ /* */ } return; } } catch(err) { $err = err; $s = -1; return false; } finally { $callDeferred($deferred, $err); if($curGoroutine.asleep) { var $f = {$blk: windowImpl.ptr.prototype.SendNonBlocking, $c: true, $r, $24r, $24r$1, $24r$2, _selection, event, w, $s, $deferred};return $f; } }
192461
+ };
192462
+ windowImpl.prototype.SendNonBlocking = function(event) { return this.$val.SendNonBlocking(event); };
191906
192463
  windowImpl.ptr.prototype.SendFirst = function(event) {
191907
- var event, w;
192464
+ var {_selection, event, w, $s, $deferred, $r, $c} = $restore(this, {event});
192465
+ /* */ $s = $s || 0; var $err = null; try { s: while (true) { switch ($s) { case 0: $deferred = []; $curGoroutine.deferStack.push($deferred);
191908
192466
  w = this;
191909
- if (w.released) {
191910
- return;
192467
+ $r = w.mutex.Lock(); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
192468
+ $deferred.push([$methodVal(w.mutex, "Unlock"), []]);
192469
+ /* */ if (w.released) { $s = 2; continue; }
192470
+ /* */ $s = 3; continue;
192471
+ /* if (w.released) { */ case 2:
192472
+ $s = 4; case 4: return;
192473
+ /* } */ case 3:
192474
+ w.frontEvents = $append(w.frontEvents, event);
192475
+ _selection = $select([[w.eventWake, $clone(new structType.ptr(), structType)], []]);
192476
+ if (_selection[0] === 0) {
192477
+ } else if (_selection[0] === 1) {
191911
192478
  }
191912
- $panic(new $String("Not implemented"));
192479
+ $s = -1; return;
192480
+ /* */ } return; } } catch(err) { $err = err; $s = -1; } finally { $callDeferred($deferred, $err); if($curGoroutine.asleep) { var $f = {$blk: windowImpl.ptr.prototype.SendFirst, $c: true, $r, _selection, event, w, $s, $deferred};return $f; } }
191913
192481
  };
191914
192482
  windowImpl.prototype.SendFirst = function(event) { return this.$val.SendFirst(event); };
191915
192483
  windowImpl.ptr.prototype.NextEvent = function() {
191916
- var {_r, ev, w, $s, $r, $c} = $restore(this, {});
192484
+ var {_r, _selection, _tuple, event, event$1, ok, w, x, $s, $r, $c} = $restore(this, {});
191917
192485
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
191918
192486
  w = this;
191919
- _r = $recv(w.domEvents.GetEventChan()); /* */ $s = 1; case 1: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; }
191920
- ev = _r[0];
191921
- $s = -1; return ev;
191922
- /* */ } return; } var $f = {$blk: windowImpl.ptr.prototype.NextEvent, $c: true, $r, _r, ev, w, $s};return $f;
192487
+ /* while (true) { */ case 1:
192488
+ $r = w.mutex.Lock(); /* */ $s = 3; case 3: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
192489
+ _tuple = w.nextQueuedEvent();
192490
+ event = _tuple[0];
192491
+ ok = _tuple[1];
192492
+ /* */ if (ok) { $s = 4; continue; }
192493
+ /* */ $s = 5; continue;
192494
+ /* if (ok) { */ case 4:
192495
+ $r = w.mutex.Unlock(); /* */ $s = 6; case 6: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
192496
+ $s = -1; return event;
192497
+ /* } */ case 5:
192498
+ $r = w.mutex.Unlock(); /* */ $s = 7; case 7: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
192499
+ _r = $select([[w.domEvents.GetEventChan()], [w.eventWake]]); /* */ $s = 8; case 8: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; }
192500
+ _selection = _r;
192501
+ /* */ if (_selection[0] === 0) { $s = 9; continue; }
192502
+ /* */ if (_selection[0] === 1) { $s = 10; continue; }
192503
+ /* */ $s = 11; continue;
192504
+ /* if (_selection[0] === 0) { */ case 9:
192505
+ event$1 = _selection[1][0];
192506
+ $r = w.mutex.Lock(); /* */ $s = 12; case 12: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
192507
+ w.backEvents = $append(w.backEvents, $ifaceNil);
192508
+ $copySlice($subslice(w.backEvents, 1), $subslice(w.backEvents, 0, (w.backEvents.$length - 1 >> 0)));
192509
+ (x = w.backEvents, (0 >= x.$length ? ($throwRuntimeError("index out of range"), undefined) : x.$array[x.$offset + 0] = event$1));
192510
+ $r = w.mutex.Unlock(); /* */ $s = 13; case 13: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
192511
+ $s = 11; continue;
192512
+ /* } else if (_selection[0] === 1) { */ case 10:
192513
+ /* } */ case 11:
192514
+ $s = 1; continue;
192515
+ case 2:
192516
+ $s = -1; return $ifaceNil;
192517
+ /* */ } return; } var $f = {$blk: windowImpl.ptr.prototype.NextEvent, $c: true, $r, _r, _selection, _tuple, event, event$1, ok, w, x, $s};return $f;
191923
192518
  };
191924
192519
  windowImpl.prototype.NextEvent = function() { return this.$val.NextEvent(); };
192520
+ windowImpl.ptr.prototype.nextQueuedEvent = function() {
192521
+ var event, event$1, last, w, x, x$1, x$2, x$3;
192522
+ w = this;
192523
+ last = w.frontEvents.$length - 1 >> 0;
192524
+ if (last >= 0) {
192525
+ event = (x = w.frontEvents, ((last < 0 || last >= x.$length) ? ($throwRuntimeError("index out of range"), undefined) : x.$array[x.$offset + last]));
192526
+ (x$1 = w.frontEvents, ((last < 0 || last >= x$1.$length) ? ($throwRuntimeError("index out of range"), undefined) : x$1.$array[x$1.$offset + last] = $ifaceNil));
192527
+ w.frontEvents = $subslice(w.frontEvents, 0, last);
192528
+ return [event, true];
192529
+ }
192530
+ if (w.backEvents.$length > 0) {
192531
+ event$1 = (x$2 = w.backEvents, (0 >= x$2.$length ? ($throwRuntimeError("index out of range"), undefined) : x$2.$array[x$2.$offset + 0]));
192532
+ (x$3 = w.backEvents, (0 >= x$3.$length ? ($throwRuntimeError("index out of range"), undefined) : x$3.$array[x$3.$offset + 0] = $ifaceNil));
192533
+ w.backEvents = $subslice(w.backEvents, 1);
192534
+ return [event$1, true];
192535
+ }
192536
+ return [$ifaceNil, false];
192537
+ };
192538
+ windowImpl.prototype.nextQueuedEvent = function() { return this.$val.nextQueuedEvent(); };
191925
192539
  windowImpl.ptr.prototype.Upload = function(dp, src, sr) {
191926
192540
  var {dp, sr, src, w, $s, $r, $c} = $restore(this, {dp, src, sr});
191927
192541
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
@@ -191942,9 +192556,9 @@ $packages["golang.org/x/exp/shiny/driver/webgldriver"] = (function() {
191942
192556
  $s = -1; return;
191943
192557
  }
191944
192558
  _ref = src;
191945
- /* */ if ($assertType(_ref, ptrType$7, true)[1]) { $s = 1; continue; }
192559
+ /* */ if ($assertType(_ref, ptrType$8, true)[1]) { $s = 1; continue; }
191946
192560
  /* */ $s = 2; continue;
191947
- /* if ($assertType(_ref, ptrType$7, true)[1]) { */ case 1:
192561
+ /* if ($assertType(_ref, ptrType$8, true)[1]) { */ case 1:
191948
192562
  jsSrc = _ref.$val;
191949
192563
  _r = jsSrc.YCbCrJS(); /* */ $s = 5; case 5: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; }
191950
192564
  /* */ if (_r.Use) { $s = 3; continue; }
@@ -192113,9 +192727,9 @@ $packages["golang.org/x/exp/shiny/driver/webgldriver"] = (function() {
192113
192727
  var {_q, _q$1, _q$2, _q$3, _r, _r$1, _r$2, _r$3, _tuple, err, height, w, width, $s, $r, $c} = $restore(this, {width, height});
192114
192728
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
192115
192729
  w = this;
192116
- /* */ if (w.programYUV420 === ptrType$3.nil) { $s = 1; continue; }
192730
+ /* */ if (w.programYUV420 === ptrType$4.nil) { $s = 1; continue; }
192117
192731
  /* */ $s = 2; continue;
192118
- /* if (w.programYUV420 === ptrType$3.nil) { */ case 1:
192732
+ /* if (w.programYUV420 === ptrType$4.nil) { */ case 1:
192119
192733
  err = $ifaceNil;
192120
192734
  _r = w.createAndLinkProgramYUV420(); /* */ $s = 3; case 3: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; }
192121
192735
  _tuple = _r;
@@ -192153,12 +192767,12 @@ $packages["golang.org/x/exp/shiny/driver/webgldriver"] = (function() {
192153
192767
  _r$1 = w.createAndAttachVertexShader(shaderProgram); /* */ $s = 2; case 2: if($c) { $c = false; _r$1 = _r$1.$blk(); } if (_r$1 && _r$1.$blk !== undefined) { break s; }
192154
192768
  err = _r$1;
192155
192769
  if (!($interfaceIsEqual(err, $ifaceNil))) {
192156
- $s = -1; return [ptrType$3.nil, err];
192770
+ $s = -1; return [ptrType$4.nil, err];
192157
192771
  }
192158
192772
  _r$2 = w.createAndAttachFragmentShader(shaderProgram, "\nprecision mediump float;\nvarying vec2 v_texCoord;\nuniform sampler2D u_imageY;\nuniform sampler2D u_imageU;\nuniform sampler2D u_imageV;\n\nvoid main(void) {\n\tfloat yChannel = texture2D(u_imageY, v_texCoord).x;\n\tfloat uChannel = texture2D(u_imageU, v_texCoord).x;\n\tfloat vChannel = texture2D(u_imageV, v_texCoord).x;\n\n\t// This does the colorspace conversion from Y'UV to RGB as a matrix\n\t// multiply. It also does the offset of the U and V channels from\n\t// [0,1] to [-.5,.5] as part of the transform.\n\tvec4 channels = vec4(yChannel, uChannel, vChannel, 1.0);\n\n\tmat4 conversion = mat4(1.0, 0.0, 1.402, -0.701,\n\t\t\t\t\t\t\t1.0, -0.344, -0.714, 0.529,\n\t\t\t\t\t\t\t1.0, 1.772, 0.0, -0.886,\n\t\t\t\t\t\t\t0, 0, 0, 0);\n\tvec3 rgb = (channels * conversion).xyz;\n\n\t// This is another Y'UV transform that can be used, but it doesn't\n\t// accurately transform my source image. Your images may well fare\n\t// better with it, however, considering they come from a different\n\t// source, and because I'm not sure that my original was converted\n\t// to Y'UV420p with the same RGB->YUV (or YCrCb) conversion as\n\t// yours.\n\t//\n\t// vec4 channels = vec4(yChannel, uChannel, vChannel, 1.0);\n\t// float3x4 conversion = float3x4(1.0, 0.0, 1.13983, -0.569915,\n\t// 1.0, -0.39465, -0.58060, 0.487625,\n\t// 1.0, 2.03211, 0.0, -1.016055);\n\t// float3 rgb = mul(conversion, channels);\n\tgl_FragColor = vec4(rgb, 1.0);\n}\n"); /* */ $s = 3; case 3: if($c) { $c = false; _r$2 = _r$2.$blk(); } if (_r$2 && _r$2.$blk !== undefined) { break s; }
192159
192773
  err = _r$2;
192160
192774
  if (!($interfaceIsEqual(err, $ifaceNil))) {
192161
- $s = -1; return [ptrType$3.nil, err];
192775
+ $s = -1; return [ptrType$4.nil, err];
192162
192776
  }
192163
192777
  $r = w.gl.LinkProgram(shaderProgram); /* */ $s = 4; case 4: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
192164
192778
  _r$3 = w.gl.GetProgramParameterLinkStatus(shaderProgram); /* */ $s = 7; case 7: if($c) { $c = false; _r$3 = _r$3.$blk(); } if (_r$3 && _r$3.$blk !== undefined) { break s; }
@@ -192168,7 +192782,7 @@ $packages["golang.org/x/exp/shiny/driver/webgldriver"] = (function() {
192168
192782
  _r$4 = w.gl.GetProgramInfoLog(shaderProgram); /* */ $s = 8; case 8: if($c) { $c = false; _r$4 = _r$4.$blk(); } if (_r$4 && _r$4.$blk !== undefined) { break s; }
192169
192783
  _arg = new $String(_r$4);
192170
192784
  _r$5 = fmt.Errorf("Program: %s", new sliceType$2([_arg])); /* */ $s = 9; case 9: if($c) { $c = false; _r$5 = _r$5.$blk(); } if (_r$5 && _r$5.$blk !== undefined) { break s; }
192171
- $24r = [ptrType$3.nil, _r$5];
192785
+ $24r = [ptrType$4.nil, _r$5];
192172
192786
  $s = 10; case 10: return $24r;
192173
192787
  /* } */ case 6:
192174
192788
  $r = w.gl.UseProgram(shaderProgram); /* */ $s = 11; case 11: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
@@ -192227,9 +192841,9 @@ $packages["golang.org/x/exp/shiny/driver/webgldriver"] = (function() {
192227
192841
  var {_r, _r$1, _tuple, err, height, w, width, $s, $r, $c} = $restore(this, {width, height});
192228
192842
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
192229
192843
  w = this;
192230
- /* */ if (w.programRGBA === ptrType$3.nil) { $s = 1; continue; }
192844
+ /* */ if (w.programRGBA === ptrType$4.nil) { $s = 1; continue; }
192231
192845
  /* */ $s = 2; continue;
192232
- /* if (w.programRGBA === ptrType$3.nil) { */ case 1:
192846
+ /* if (w.programRGBA === ptrType$4.nil) { */ case 1:
192233
192847
  err = $ifaceNil;
192234
192848
  _r = w.createAndLinkProgramRGBA(); /* */ $s = 3; case 3: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; }
192235
192849
  _tuple = _r;
@@ -192263,12 +192877,12 @@ $packages["golang.org/x/exp/shiny/driver/webgldriver"] = (function() {
192263
192877
  _r$1 = w.createAndAttachVertexShader(shaderProgram); /* */ $s = 2; case 2: if($c) { $c = false; _r$1 = _r$1.$blk(); } if (_r$1 && _r$1.$blk !== undefined) { break s; }
192264
192878
  err = _r$1;
192265
192879
  if (!($interfaceIsEqual(err, $ifaceNil))) {
192266
- $s = -1; return [ptrType$3.nil, err];
192880
+ $s = -1; return [ptrType$4.nil, err];
192267
192881
  }
192268
192882
  _r$2 = w.createAndAttachFragmentShader(shaderProgram, "\nprecision mediump float;\nvarying vec2 v_texCoord;\nuniform sampler2D u_image;\n\nvoid main(void) {\n\tgl_FragColor = texture2D(u_image, v_texCoord);\n}\n"); /* */ $s = 3; case 3: if($c) { $c = false; _r$2 = _r$2.$blk(); } if (_r$2 && _r$2.$blk !== undefined) { break s; }
192269
192883
  err = _r$2;
192270
192884
  if (!($interfaceIsEqual(err, $ifaceNil))) {
192271
- $s = -1; return [ptrType$3.nil, err];
192885
+ $s = -1; return [ptrType$4.nil, err];
192272
192886
  }
192273
192887
  $r = w.gl.LinkProgram(shaderProgram); /* */ $s = 4; case 4: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
192274
192888
  _r$3 = w.gl.GetProgramParameterLinkStatus(shaderProgram); /* */ $s = 7; case 7: if($c) { $c = false; _r$3 = _r$3.$blk(); } if (_r$3 && _r$3.$blk !== undefined) { break s; }
@@ -192278,7 +192892,7 @@ $packages["golang.org/x/exp/shiny/driver/webgldriver"] = (function() {
192278
192892
  _r$4 = w.gl.GetProgramInfoLog(shaderProgram); /* */ $s = 8; case 8: if($c) { $c = false; _r$4 = _r$4.$blk(); } if (_r$4 && _r$4.$blk !== undefined) { break s; }
192279
192893
  _arg = new $String(_r$4);
192280
192894
  _r$5 = fmt.Errorf("Program: %s", new sliceType$2([_arg])); /* */ $s = 9; case 9: if($c) { $c = false; _r$5 = _r$5.$blk(); } if (_r$5 && _r$5.$blk !== undefined) { break s; }
192281
- $24r = [ptrType$3.nil, _r$5];
192895
+ $24r = [ptrType$4.nil, _r$5];
192282
192896
  $s = 10; case 10: return $24r;
192283
192897
  /* } */ case 6:
192284
192898
  $r = w.gl.UseProgram(shaderProgram); /* */ $s = 11; case 11: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
@@ -192389,7 +193003,7 @@ $packages["golang.org/x/exp/shiny/driver/webgldriver"] = (function() {
192389
193003
  newBuffer = function(screen$1, size) {
192390
193004
  var _q, _q$1, _q$2, b, rect, screen$1, size;
192391
193005
  rect = new image.Rectangle.ptr(new image.Point.ptr(0, 0), $clone(size, image.Point));
192392
- b = new BufferImpl.ptr(screen$1, $clone(size, image.Point), new sync.Mutex.ptr(0, 0), false, $clone(new image.RGBA.ptr($makeSlice(sliceType$3, ($imul(($imul(4, size.X)), size.Y))), $imul(4, size.X), $clone(rect, image.Rectangle)), image.RGBA), $clone(new image.YCbCr.ptr($makeSlice(sliceType$3, ($imul(size.X, size.Y))), $makeSlice(sliceType$3, (_q$1 = ($imul(size.X, size.Y)) / 4, (_q$1 === _q$1 && _q$1 !== 1/0 && _q$1 !== -1/0) ? _q$1 >> 0 : $throwRuntimeError("integer divide by zero"))), $makeSlice(sliceType$3, (_q$2 = ($imul(size.X, size.Y)) / 4, (_q$2 === _q$2 && _q$2 !== 1/0 && _q$2 !== -1/0) ? _q$2 >> 0 : $throwRuntimeError("integer divide by zero"))), size.X, (_q = size.X / 2, (_q === _q && _q !== 1/0 && _q !== -1/0) ? _q >> 0 : $throwRuntimeError("integer divide by zero")), 2, $clone(rect, image.Rectangle)), image.YCbCr), ptrType$8.nil);
193006
+ b = new BufferImpl.ptr(screen$1, $clone(size, image.Point), new sync.Mutex.ptr(0, 0), false, $clone(new image.RGBA.ptr($makeSlice(sliceType$3, ($imul(($imul(4, size.X)), size.Y))), $imul(4, size.X), $clone(rect, image.Rectangle)), image.RGBA), $clone(new image.YCbCr.ptr($makeSlice(sliceType$3, ($imul(size.X, size.Y))), $makeSlice(sliceType$3, (_q$1 = ($imul(size.X, size.Y)) / 4, (_q$1 === _q$1 && _q$1 !== 1/0 && _q$1 !== -1/0) ? _q$1 >> 0 : $throwRuntimeError("integer divide by zero"))), $makeSlice(sliceType$3, (_q$2 = ($imul(size.X, size.Y)) / 4, (_q$2 === _q$2 && _q$2 !== 1/0 && _q$2 !== -1/0) ? _q$2 >> 0 : $throwRuntimeError("integer divide by zero"))), size.X, (_q = size.X / 2, (_q === _q && _q !== 1/0 && _q !== -1/0) ? _q >> 0 : $throwRuntimeError("integer divide by zero")), 2, $clone(rect, image.Rectangle)), image.YCbCr), ptrType$9.nil);
192393
193007
  return b;
192394
193008
  };
192395
193009
  BufferImpl.ptr.prototype.Size = function() {
@@ -192420,9 +193034,9 @@ $packages["golang.org/x/exp/shiny/driver/webgldriver"] = (function() {
192420
193034
  var {_r, b, emptyBuffer, $s, $r, $c} = $restore(this, {});
192421
193035
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
192422
193036
  b = this;
192423
- /* */ if (b.ycbcrJS === ptrType$8.nil) { $s = 1; continue; }
193037
+ /* */ if (b.ycbcrJS === ptrType$9.nil) { $s = 1; continue; }
192424
193038
  /* */ $s = 2; continue;
192425
- /* if (b.ycbcrJS === ptrType$8.nil) { */ case 1:
193039
+ /* if (b.ycbcrJS === ptrType$9.nil) { */ case 1:
192426
193040
  _r = $clone($clone(js.Global(), js.Value).Get("ArrayBuffer"), js.Value).New(sliceType$2.nil); /* */ $s = 3; case 3: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; }
192427
193041
  emptyBuffer = $clone(_r, js.Value);
192428
193042
  b.ycbcrJS = new YCbCrJS.ptr($clone(new ArrayBufferSlice.ptr($clone(emptyBuffer, js.Value), 0, 0), ArrayBufferSlice), $clone(new ArrayBufferSlice.ptr($clone(emptyBuffer, js.Value), 0, 0), ArrayBufferSlice), $clone(new ArrayBufferSlice.ptr($clone(emptyBuffer, js.Value), 0, 0), ArrayBufferSlice), b.ycbcr.YStride, b.ycbcr.CStride, 2, $clone(b.ycbcr.Rect, image.Rectangle), false);
@@ -192447,15 +193061,15 @@ $packages["golang.org/x/exp/shiny/driver/webgldriver"] = (function() {
192447
193061
  /* */ } return; } } catch(err) { $err = err; $s = -1; } finally { $callDeferred($deferred, $err); if($curGoroutine.asleep) { var $f = {$blk: BufferImpl.ptr.prototype.Release, $c: true, $r, b, $s, $deferred};return $f; } }
192448
193062
  };
192449
193063
  BufferImpl.prototype.Release = function() { return this.$val.Release(); };
192450
- ptrType$10.methods = [{prop: "ensureCanvasSize", name: "ensureCanvasSize", pkg: "golang.org/x/exp/shiny/driver/webgldriver", typ: $funcType([$Int, $Int], [], false)}, {prop: "clear", name: "clear", pkg: "golang.org/x/exp/shiny/driver/webgldriver", typ: $funcType([], [], false)}, {prop: "Release", name: "Release", pkg: "", typ: $funcType([], [], false)}, {prop: "Publish", name: "Publish", pkg: "", typ: $funcType([], [screen.PublishResult], false)}, {prop: "Send", name: "Send", pkg: "", typ: $funcType([$emptyInterface], [], false)}, {prop: "SendFirst", name: "SendFirst", pkg: "", typ: $funcType([$emptyInterface], [], false)}, {prop: "NextEvent", name: "NextEvent", pkg: "", typ: $funcType([], [$emptyInterface], false)}, {prop: "Upload", name: "Upload", pkg: "", typ: $funcType([image.Point, screen.Buffer, image.Rectangle], [], false)}, {prop: "UploadYCbCr", name: "UploadYCbCr", pkg: "", typ: $funcType([image.Point, screen.Buffer, image.Rectangle], [], false)}, {prop: "Fill", name: "Fill", pkg: "", typ: $funcType([image.Rectangle, color.Color, draw.Op], [], false)}, {prop: "Draw", name: "Draw", pkg: "", typ: $funcType([f64.Aff3, screen.Texture, image.Rectangle, draw.Op, ptrType$9], [], false)}, {prop: "DrawUniform", name: "DrawUniform", pkg: "", typ: $funcType([f64.Aff3, color.Color, image.Rectangle, draw.Op, ptrType$9], [], false)}, {prop: "Copy", name: "Copy", pkg: "", typ: $funcType([image.Point, screen.Texture, image.Rectangle, draw.Op, ptrType$9], [], false)}, {prop: "Scale", name: "Scale", pkg: "", typ: $funcType([image.Rectangle, screen.Texture, image.Rectangle, draw.Op, ptrType$9], [], false)}, {prop: "createAndAttachVertexShader", name: "createAndAttachVertexShader", pkg: "golang.org/x/exp/shiny/driver/webgldriver", typ: $funcType([ptrType$3], [$error], false)}, {prop: "ensureYUV420Textures", name: "ensureYUV420Textures", pkg: "golang.org/x/exp/shiny/driver/webgldriver", typ: $funcType([$Int, $Int], [], false)}, {prop: "createAndLinkProgramYUV420", name: "createAndLinkProgramYUV420", pkg: "golang.org/x/exp/shiny/driver/webgldriver", typ: $funcType([], [ptrType$3, $error], false)}, {prop: "drawBufferYUV420", name: "drawBufferYUV420", pkg: "golang.org/x/exp/shiny/driver/webgldriver", typ: $funcType([image.Point, screen.Buffer, image.Rectangle], [], false)}, {prop: "drawBufferYUV420JSArrayBuffers", name: "drawBufferYUV420JSArrayBuffers", pkg: "golang.org/x/exp/shiny/driver/webgldriver", typ: $funcType([image.Point, js.Value, js.Value, js.Value, image.Rectangle], [], false)}, {prop: "ensureRGBATextures", name: "ensureRGBATextures", pkg: "golang.org/x/exp/shiny/driver/webgldriver", typ: $funcType([$Int, $Int], [], false)}, {prop: "createAndLinkProgramRGBA", name: "createAndLinkProgramRGBA", pkg: "golang.org/x/exp/shiny/driver/webgldriver", typ: $funcType([], [ptrType$3, $error], false)}, {prop: "drawBufferRGBA", name: "drawBufferRGBA", pkg: "golang.org/x/exp/shiny/driver/webgldriver", typ: $funcType([image.Point, screen.Buffer, image.Rectangle], [], false)}, {prop: "createBuffers", name: "createBuffers", pkg: "golang.org/x/exp/shiny/driver/webgldriver", typ: $funcType([], [ptrType$5], false)}, {prop: "createAndAttachFragmentShader", name: "createAndAttachFragmentShader", pkg: "golang.org/x/exp/shiny/driver/webgldriver", typ: $funcType([ptrType$3, $String], [$error], false)}, {prop: "createTexture", name: "createTexture", pkg: "golang.org/x/exp/shiny/driver/webgldriver", typ: $funcType([types.GLEnum, types.GLEnum, $Int, $Int], [ptrType$4], false)}];
192451
- ptrType.methods = [{prop: "NewBuffer", name: "NewBuffer", pkg: "", typ: $funcType([image.Point], [screen.Buffer, $error], false)}, {prop: "NewTexture", name: "NewTexture", pkg: "", typ: $funcType([image.Point], [screen.Texture, $error], false)}, {prop: "NewWindow", name: "NewWindow", pkg: "", typ: $funcType([ptrType$11], [screen.Window, $error], false)}];
193064
+ ptrType$11.methods = [{prop: "ensureCanvasSize", name: "ensureCanvasSize", pkg: "golang.org/x/exp/shiny/driver/webgldriver", typ: $funcType([$Int, $Int], [], false)}, {prop: "clear", name: "clear", pkg: "golang.org/x/exp/shiny/driver/webgldriver", typ: $funcType([], [], false)}, {prop: "Release", name: "Release", pkg: "", typ: $funcType([], [], false)}, {prop: "Publish", name: "Publish", pkg: "", typ: $funcType([], [screen.PublishResult], false)}, {prop: "Send", name: "Send", pkg: "", typ: $funcType([$emptyInterface], [], false)}, {prop: "SendNonBlocking", name: "SendNonBlocking", pkg: "", typ: $funcType([$emptyInterface], [$Bool], false)}, {prop: "SendFirst", name: "SendFirst", pkg: "", typ: $funcType([$emptyInterface], [], false)}, {prop: "NextEvent", name: "NextEvent", pkg: "", typ: $funcType([], [$emptyInterface], false)}, {prop: "nextQueuedEvent", name: "nextQueuedEvent", pkg: "golang.org/x/exp/shiny/driver/webgldriver", typ: $funcType([], [$emptyInterface, $Bool], false)}, {prop: "Upload", name: "Upload", pkg: "", typ: $funcType([image.Point, screen.Buffer, image.Rectangle], [], false)}, {prop: "UploadYCbCr", name: "UploadYCbCr", pkg: "", typ: $funcType([image.Point, screen.Buffer, image.Rectangle], [], false)}, {prop: "Fill", name: "Fill", pkg: "", typ: $funcType([image.Rectangle, color.Color, draw.Op], [], false)}, {prop: "Draw", name: "Draw", pkg: "", typ: $funcType([f64.Aff3, screen.Texture, image.Rectangle, draw.Op, ptrType$10], [], false)}, {prop: "DrawUniform", name: "DrawUniform", pkg: "", typ: $funcType([f64.Aff3, color.Color, image.Rectangle, draw.Op, ptrType$10], [], false)}, {prop: "Copy", name: "Copy", pkg: "", typ: $funcType([image.Point, screen.Texture, image.Rectangle, draw.Op, ptrType$10], [], false)}, {prop: "Scale", name: "Scale", pkg: "", typ: $funcType([image.Rectangle, screen.Texture, image.Rectangle, draw.Op, ptrType$10], [], false)}, {prop: "createAndAttachVertexShader", name: "createAndAttachVertexShader", pkg: "golang.org/x/exp/shiny/driver/webgldriver", typ: $funcType([ptrType$4], [$error], false)}, {prop: "ensureYUV420Textures", name: "ensureYUV420Textures", pkg: "golang.org/x/exp/shiny/driver/webgldriver", typ: $funcType([$Int, $Int], [], false)}, {prop: "createAndLinkProgramYUV420", name: "createAndLinkProgramYUV420", pkg: "golang.org/x/exp/shiny/driver/webgldriver", typ: $funcType([], [ptrType$4, $error], false)}, {prop: "drawBufferYUV420", name: "drawBufferYUV420", pkg: "golang.org/x/exp/shiny/driver/webgldriver", typ: $funcType([image.Point, screen.Buffer, image.Rectangle], [], false)}, {prop: "drawBufferYUV420JSArrayBuffers", name: "drawBufferYUV420JSArrayBuffers", pkg: "golang.org/x/exp/shiny/driver/webgldriver", typ: $funcType([image.Point, js.Value, js.Value, js.Value, image.Rectangle], [], false)}, {prop: "ensureRGBATextures", name: "ensureRGBATextures", pkg: "golang.org/x/exp/shiny/driver/webgldriver", typ: $funcType([$Int, $Int], [], false)}, {prop: "createAndLinkProgramRGBA", name: "createAndLinkProgramRGBA", pkg: "golang.org/x/exp/shiny/driver/webgldriver", typ: $funcType([], [ptrType$4, $error], false)}, {prop: "drawBufferRGBA", name: "drawBufferRGBA", pkg: "golang.org/x/exp/shiny/driver/webgldriver", typ: $funcType([image.Point, screen.Buffer, image.Rectangle], [], false)}, {prop: "createBuffers", name: "createBuffers", pkg: "golang.org/x/exp/shiny/driver/webgldriver", typ: $funcType([], [ptrType$6], false)}, {prop: "createAndAttachFragmentShader", name: "createAndAttachFragmentShader", pkg: "golang.org/x/exp/shiny/driver/webgldriver", typ: $funcType([ptrType$4, $String], [$error], false)}, {prop: "createTexture", name: "createTexture", pkg: "golang.org/x/exp/shiny/driver/webgldriver", typ: $funcType([types.GLEnum, types.GLEnum, $Int, $Int], [ptrType$5], false)}];
193065
+ ptrType$1.methods = [{prop: "NewBuffer", name: "NewBuffer", pkg: "", typ: $funcType([image.Point], [screen.Buffer, $error], false)}, {prop: "NewTexture", name: "NewTexture", pkg: "", typ: $funcType([image.Point], [screen.Texture, $error], false)}, {prop: "NewWindow", name: "NewWindow", pkg: "", typ: $funcType([ptrType], [screen.Window, $error], false)}];
192452
193066
  ptrType$12.methods = [{prop: "slice", name: "slice", pkg: "golang.org/x/exp/shiny/driver/webgldriver", typ: $funcType([], [js.Value], false)}];
192453
- ptrType$7.methods = [{prop: "Size", name: "Size", pkg: "", typ: $funcType([], [image.Point], false)}, {prop: "Bounds", name: "Bounds", pkg: "", typ: $funcType([], [image.Rectangle], false)}, {prop: "RGBA", name: "RGBA", pkg: "", typ: $funcType([], [ptrType$13], false)}, {prop: "YCbCr", name: "YCbCr", pkg: "", typ: $funcType([], [ptrType$14], false)}, {prop: "YCbCrJS", name: "YCbCrJS", pkg: "", typ: $funcType([], [ptrType$8], false)}, {prop: "Release", name: "Release", pkg: "", typ: $funcType([], [], false)}];
192454
- windowImpl.init("golang.org/x/exp/shiny/driver/webgldriver", [{prop: "screen", name: "screen", embedded: false, exported: false, typ: ptrType, tag: ""}, {prop: "mutex", name: "mutex", embedded: false, exported: false, typ: ptrType$1, tag: ""}, {prop: "canvasEl", name: "canvasEl", embedded: false, exported: false, typ: js.Value, tag: ""}, {prop: "gl", name: "gl", embedded: false, exported: false, typ: ptrType$2, tag: ""}, {prop: "programRGBA", name: "programRGBA", embedded: false, exported: false, typ: ptrType$3, tag: ""}, {prop: "imageTexRGBA", name: "imageTexRGBA", embedded: false, exported: false, typ: ptrType$4, tag: ""}, {prop: "programYUV420", name: "programYUV420", embedded: false, exported: false, typ: ptrType$3, tag: ""}, {prop: "imageTexY", name: "imageTexY", embedded: false, exported: false, typ: ptrType$4, tag: ""}, {prop: "imageTexU", name: "imageTexU", embedded: false, exported: false, typ: ptrType$4, tag: ""}, {prop: "imageTexV", name: "imageTexV", embedded: false, exported: false, typ: ptrType$4, tag: ""}, {prop: "vertexArray", name: "vertexArray", embedded: false, exported: false, typ: ptrType$5, tag: ""}, {prop: "released", name: "released", embedded: false, exported: false, typ: $Bool, tag: ""}, {prop: "domEvents", name: "domEvents", embedded: false, exported: false, typ: ptrType$6, tag: ""}, {prop: "width", name: "width", embedded: false, exported: false, typ: $Int, tag: ""}, {prop: "height", name: "height", embedded: false, exported: false, typ: $Int, tag: ""}]);
193067
+ ptrType$8.methods = [{prop: "Size", name: "Size", pkg: "", typ: $funcType([], [image.Point], false)}, {prop: "Bounds", name: "Bounds", pkg: "", typ: $funcType([], [image.Rectangle], false)}, {prop: "RGBA", name: "RGBA", pkg: "", typ: $funcType([], [ptrType$13], false)}, {prop: "YCbCr", name: "YCbCr", pkg: "", typ: $funcType([], [ptrType$14], false)}, {prop: "YCbCrJS", name: "YCbCrJS", pkg: "", typ: $funcType([], [ptrType$9], false)}, {prop: "Release", name: "Release", pkg: "", typ: $funcType([], [], false)}];
193068
+ windowImpl.init("golang.org/x/exp/shiny/driver/webgldriver", [{prop: "screen", name: "screen", embedded: false, exported: false, typ: ptrType$1, tag: ""}, {prop: "mutex", name: "mutex", embedded: false, exported: false, typ: ptrType$2, tag: ""}, {prop: "canvasEl", name: "canvasEl", embedded: false, exported: false, typ: js.Value, tag: ""}, {prop: "gl", name: "gl", embedded: false, exported: false, typ: ptrType$3, tag: ""}, {prop: "programRGBA", name: "programRGBA", embedded: false, exported: false, typ: ptrType$4, tag: ""}, {prop: "imageTexRGBA", name: "imageTexRGBA", embedded: false, exported: false, typ: ptrType$5, tag: ""}, {prop: "programYUV420", name: "programYUV420", embedded: false, exported: false, typ: ptrType$4, tag: ""}, {prop: "imageTexY", name: "imageTexY", embedded: false, exported: false, typ: ptrType$5, tag: ""}, {prop: "imageTexU", name: "imageTexU", embedded: false, exported: false, typ: ptrType$5, tag: ""}, {prop: "imageTexV", name: "imageTexV", embedded: false, exported: false, typ: ptrType$5, tag: ""}, {prop: "vertexArray", name: "vertexArray", embedded: false, exported: false, typ: ptrType$6, tag: ""}, {prop: "released", name: "released", embedded: false, exported: false, typ: $Bool, tag: ""}, {prop: "domEvents", name: "domEvents", embedded: false, exported: false, typ: ptrType$7, tag: ""}, {prop: "frontEvents", name: "frontEvents", embedded: false, exported: false, typ: sliceType$2, tag: ""}, {prop: "backEvents", name: "backEvents", embedded: false, exported: false, typ: sliceType$2, tag: ""}, {prop: "eventWake", name: "eventWake", embedded: false, exported: false, typ: chanType, tag: ""}, {prop: "width", name: "width", embedded: false, exported: false, typ: $Int, tag: ""}, {prop: "height", name: "height", embedded: false, exported: false, typ: $Int, tag: ""}]);
192455
193069
  screenImpl.init("golang.org/x/exp/shiny/driver/webgldriver", [{prop: "doc", name: "doc", embedded: false, exported: false, typ: js.Value, tag: ""}]);
192456
193070
  ArrayBufferSlice.init("", [{prop: "ArrayBuffer", name: "ArrayBuffer", embedded: false, exported: true, typ: js.Value, tag: ""}, {prop: "Offset", name: "Offset", embedded: false, exported: true, typ: $Int, tag: ""}, {prop: "Length", name: "Length", embedded: false, exported: true, typ: $Int, tag: ""}]);
192457
193071
  YCbCrJS.init("", [{prop: "Y", name: "Y", embedded: false, exported: true, typ: ArrayBufferSlice, tag: ""}, {prop: "Cb", name: "Cb", embedded: false, exported: true, typ: ArrayBufferSlice, tag: ""}, {prop: "Cr", name: "Cr", embedded: false, exported: true, typ: ArrayBufferSlice, tag: ""}, {prop: "YStride", name: "YStride", embedded: false, exported: true, typ: $Int, tag: ""}, {prop: "CStride", name: "CStride", embedded: false, exported: true, typ: $Int, tag: ""}, {prop: "SubsampleRatio", name: "SubsampleRatio", embedded: false, exported: true, typ: image.YCbCrSubsampleRatio, tag: ""}, {prop: "Rect", name: "Rect", embedded: false, exported: true, typ: image.Rectangle, tag: ""}, {prop: "Use", name: "Use", embedded: false, exported: true, typ: $Bool, tag: ""}]);
192458
- BufferImpl.init("golang.org/x/exp/shiny/driver/webgldriver", [{prop: "screen", name: "screen", embedded: false, exported: false, typ: ptrType, tag: ""}, {prop: "size", name: "size", embedded: false, exported: false, typ: image.Point, tag: ""}, {prop: "mutex", name: "mutex", embedded: false, exported: false, typ: ptrType$1, tag: ""}, {prop: "released", name: "released", embedded: false, exported: false, typ: $Bool, tag: ""}, {prop: "rgba", name: "rgba", embedded: false, exported: false, typ: image.RGBA, tag: ""}, {prop: "ycbcr", name: "ycbcr", embedded: false, exported: false, typ: image.YCbCr, tag: ""}, {prop: "ycbcrJS", name: "ycbcrJS", embedded: false, exported: false, typ: ptrType$8, tag: ""}]);
193072
+ BufferImpl.init("golang.org/x/exp/shiny/driver/webgldriver", [{prop: "screen", name: "screen", embedded: false, exported: false, typ: ptrType$1, tag: ""}, {prop: "size", name: "size", embedded: false, exported: false, typ: image.Point, tag: ""}, {prop: "mutex", name: "mutex", embedded: false, exported: false, typ: ptrType$2, tag: ""}, {prop: "released", name: "released", embedded: false, exported: false, typ: $Bool, tag: ""}, {prop: "rgba", name: "rgba", embedded: false, exported: false, typ: image.RGBA, tag: ""}, {prop: "ycbcr", name: "ycbcr", embedded: false, exported: false, typ: image.YCbCr, tag: ""}, {prop: "ycbcrJS", name: "ycbcrJS", embedded: false, exported: false, typ: ptrType$9, tag: ""}]);
192459
193073
  $init = function() {
192460
193074
  $pkg.$init = function() {};
192461
193075
  /* */ var $f, $c = false, $s = 0, $r; if (this !== undefined && this.$blk !== undefined) { $f = this; $c = true; $s = $f.$s; $r = $f.$r; } s: while (true) { switch ($s) { case 0:
@@ -192522,7 +193136,7 @@ $packages["github.com/supraio/client-daemon/pkg/videostream"] = (function() {
192522
193136
  return $pkg;
192523
193137
  })();
192524
193138
  $packages["github.com/supraio/client-daemon/pkg/decoder/sosstream"] = (function() {
192525
- var $pkg = {}, $init, fmt, general, errs, jshelper, frame, videostream, js, SOSVideoStreamer, funcType, arrayType, sliceType, ptrType, ptrType$1, init;
193139
+ var $pkg = {}, $init, fmt, general, errs, jshelper, frame, videostream, js, SOSVideoStreamer, streamGeometry, funcType, arrayType, sliceType, ptrType, ptrType$1, init, getStreamGeometry;
192526
193140
  fmt = $packages["fmt"];
192527
193141
  general = $packages["github.com/supraio/client-daemon/pkg/decoder/general"];
192528
193142
  errs = $packages["github.com/supraio/client-daemon/pkg/errs"];
@@ -192540,6 +193154,20 @@ $packages["github.com/supraio/client-daemon/pkg/decoder/sosstream"] = (function(
192540
193154
  this.sos = sos_;
192541
193155
  this.started = started_;
192542
193156
  });
193157
+ streamGeometry = $pkg.streamGeometry = $newType(0, $kindStruct, "sosstream.streamGeometry", true, "github.com/supraio/client-daemon/pkg/decoder/sosstream", false, function(x_, y_, width_, height_) {
193158
+ this.$val = this;
193159
+ if (arguments.length === 0) {
193160
+ this.x = 0;
193161
+ this.y = 0;
193162
+ this.width = 0;
193163
+ this.height = 0;
193164
+ return;
193165
+ }
193166
+ this.x = x_;
193167
+ this.y = y_;
193168
+ this.width = width_;
193169
+ this.height = height_;
193170
+ });
192543
193171
  funcType = $funcType([], [], false);
192544
193172
  arrayType = $arrayType(funcType, 0);
192545
193173
  sliceType = $sliceType($emptyInterface);
@@ -192557,7 +193185,7 @@ $packages["github.com/supraio/client-daemon/pkg/decoder/sosstream"] = (function(
192557
193185
  };
192558
193186
  SOSVideoStreamer.prototype.IsAvailable = function() { return this.$val.IsAvailable(); };
192559
193187
  SOSVideoStreamer.ptr.prototype.Play = function() {
192560
- var {$24r, $24r$1, _arg, _arg$1, _r, _r$1, _r$10, _r$11, _r$2, _r$3, _r$4, _r$5, _r$6, _r$7, _r$8, _r$9, _tuple, _tuple$1, err, height, hostname, m, options, playStream, port, preparePromise, protocol, sosProtocol, url, urlProtocol, width, $s, $r, $c} = $restore(this, {});
193188
+ var {$24r, $24r$1, _arg, _arg$1, _r, _r$1, _r$10, _r$11, _r$2, _r$3, _r$4, _r$5, _r$6, _r$7, _r$8, _r$9, _tuple, _tuple$1, err, geometry, hostname, m, options, playStream, port, preparePromise, protocol, sosProtocol, url, urlProtocol, $s, $r, $c} = $restore(this, {});
192561
193189
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
192562
193190
  m = this;
192563
193191
  /* */ if (!m.started) { $s = 1; continue; }
@@ -192570,14 +193198,13 @@ $packages["github.com/supraio/client-daemon/pkg/decoder/sosstream"] = (function(
192570
193198
  sosProtocol = m.getSOSProtocol(protocol);
192571
193199
  _r = fmt.Sprintf("%s://%s:%d", new sliceType([new $String(urlProtocol), new $String(hostname), new $Uint16(port)])); /* */ $s = 3; case 3: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; }
192572
193200
  url = _r;
192573
- width = $clone($clone($clone(js.Global(), js.Value).Get("screen"), js.Value).Get("width"), js.Value).Int();
192574
- height = $clone($clone($clone(js.Global(), js.Value).Get("screen"), js.Value).Get("height"), js.Value).Int();
193201
+ geometry = $clone(getStreamGeometry(), streamGeometry);
192575
193202
  _r$1 = $clone($clone(js.Global(), js.Value).Get("Object"), js.Value).New(sliceType.nil); /* */ $s = 4; case 4: if($c) { $c = false; _r$1 = _r$1.$blk(); } if (_r$1 && _r$1.$blk !== undefined) { break s; }
192576
193203
  options = $clone(_r$1, js.Value);
192577
193204
  $clone(options, js.Value).Set("background", new $Bool(true));
192578
193205
  $clone(options, js.Value).Set("protocol", new $String(sosProtocol));
192579
193206
  $clone(options, js.Value).Set("lowLatency", new $Bool(true));
192580
- _r$2 = $clone($clone(m.sos, js.Value).Get("stream"), js.Value).Call("prepare", new sliceType([new $String(url), new $Int(0), new $Int(0), new $Int(width), new $Int(height), new options.constructor.elem(options)])); /* */ $s = 5; case 5: if($c) { $c = false; _r$2 = _r$2.$blk(); } if (_r$2 && _r$2.$blk !== undefined) { break s; }
193207
+ _r$2 = $clone($clone(m.sos, js.Value).Get("stream"), js.Value).Call("prepare", new sliceType([new $String(url), new $Int(geometry.x), new $Int(geometry.y), new $Int(geometry.width), new $Int(geometry.height), new options.constructor.elem(options)])); /* */ $s = 5; case 5: if($c) { $c = false; _r$2 = _r$2.$blk(); } if (_r$2 && _r$2.$blk !== undefined) { break s; }
192581
193208
  preparePromise = $clone(_r$2, js.Value);
192582
193209
  _r$3 = jshelper.Await($clone(preparePromise, js.Value)); /* */ $s = 6; case 6: if($c) { $c = false; _r$3 = _r$3.$blk(); } if (_r$3 && _r$3.$blk !== undefined) { break s; }
192583
193210
  _tuple = _r$3;
@@ -192592,7 +193219,7 @@ $packages["github.com/supraio/client-daemon/pkg/decoder/sosstream"] = (function(
192592
193219
  $24r = _r$6;
192593
193220
  $s = 12; case 12: return $24r;
192594
193221
  /* } */ case 8:
192595
- _r$7 = $clone($clone(m.sos, js.Value).Get("stream"), js.Value).Call("play", new sliceType([new $String(url), new $Int(0), new $Int(0), new $Int(width), new $Int(height), new options.constructor.elem(options)])); /* */ $s = 13; case 13: if($c) { $c = false; _r$7 = _r$7.$blk(); } if (_r$7 && _r$7.$blk !== undefined) { break s; }
193222
+ _r$7 = $clone($clone(m.sos, js.Value).Get("stream"), js.Value).Call("play", new sliceType([new $String(url), new $Int(geometry.x), new $Int(geometry.y), new $Int(geometry.width), new $Int(geometry.height), new options.constructor.elem(options)])); /* */ $s = 13; case 13: if($c) { $c = false; _r$7 = _r$7.$blk(); } if (_r$7 && _r$7.$blk !== undefined) { break s; }
192596
193223
  playStream = $clone(_r$7, js.Value);
192597
193224
  _r$8 = jshelper.Await($clone(playStream, js.Value)); /* */ $s = 14; case 14: if($c) { $c = false; _r$8 = _r$8.$blk(); } if (_r$8 && _r$8.$blk !== undefined) { break s; }
192598
193225
  _tuple$1 = _r$8;
@@ -192610,11 +193237,11 @@ $packages["github.com/supraio/client-daemon/pkg/decoder/sosstream"] = (function(
192610
193237
  m.started = true;
192611
193238
  /* } */ case 2:
192612
193239
  $s = -1; return $ifaceNil;
192613
- /* */ } return; } var $f = {$blk: SOSVideoStreamer.ptr.prototype.Play, $c: true, $r, $24r, $24r$1, _arg, _arg$1, _r, _r$1, _r$10, _r$11, _r$2, _r$3, _r$4, _r$5, _r$6, _r$7, _r$8, _r$9, _tuple, _tuple$1, err, height, hostname, m, options, playStream, port, preparePromise, protocol, sosProtocol, url, urlProtocol, width, $s};return $f;
193240
+ /* */ } return; } var $f = {$blk: SOSVideoStreamer.ptr.prototype.Play, $c: true, $r, $24r, $24r$1, _arg, _arg$1, _r, _r$1, _r$10, _r$11, _r$2, _r$3, _r$4, _r$5, _r$6, _r$7, _r$8, _r$9, _tuple, _tuple$1, err, geometry, hostname, m, options, playStream, port, preparePromise, protocol, sosProtocol, url, urlProtocol, $s};return $f;
192614
193241
  };
192615
193242
  SOSVideoStreamer.prototype.Play = function() { return this.$val.Play(); };
192616
193243
  SOSVideoStreamer.ptr.prototype.Stop = function() {
192617
- var {$24r, _arg, _r, _r$1, _r$2, _r$3, _r$4, _r$5, _tuple, err, height, hostname, m, port, protocol, stopPromise, url, urlProtocol, width, $s, $r, $c} = $restore(this, {});
193244
+ var {$24r, _arg, _r, _r$1, _r$2, _r$3, _r$4, _r$5, _tuple, err, geometry, hostname, m, port, protocol, stopPromise, url, urlProtocol, $s, $r, $c} = $restore(this, {});
192618
193245
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
192619
193246
  m = this;
192620
193247
  /* */ if (m.started) { $s = 1; continue; }
@@ -192626,9 +193253,8 @@ $packages["github.com/supraio/client-daemon/pkg/decoder/sosstream"] = (function(
192626
193253
  urlProtocol = m.getURLProtocol(protocol);
192627
193254
  _r = fmt.Sprintf("%s://%s:%d", new sliceType([new $String(urlProtocol), new $String(hostname), new $Uint16(port)])); /* */ $s = 3; case 3: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; }
192628
193255
  url = _r;
192629
- width = $clone($clone($clone(js.Global(), js.Value).Get("screen"), js.Value).Get("width"), js.Value).Int();
192630
- height = $clone($clone($clone(js.Global(), js.Value).Get("screen"), js.Value).Get("height"), js.Value).Int();
192631
- _r$1 = $clone($clone(m.sos, js.Value).Get("stream"), js.Value).Call("stop", new sliceType([new $String(url), new $Int(0), new $Int(0), new $Int(width), new $Int(height)])); /* */ $s = 4; case 4: if($c) { $c = false; _r$1 = _r$1.$blk(); } if (_r$1 && _r$1.$blk !== undefined) { break s; }
193256
+ geometry = $clone(getStreamGeometry(), streamGeometry);
193257
+ _r$1 = $clone($clone(m.sos, js.Value).Get("stream"), js.Value).Call("stop", new sliceType([new $String(url), new $Int(geometry.x), new $Int(geometry.y), new $Int(geometry.width), new $Int(geometry.height)])); /* */ $s = 4; case 4: if($c) { $c = false; _r$1 = _r$1.$blk(); } if (_r$1 && _r$1.$blk !== undefined) { break s; }
192632
193258
  stopPromise = $clone(_r$1, js.Value);
192633
193259
  _r$2 = jshelper.Await($clone(stopPromise, js.Value)); /* */ $s = 5; case 5: if($c) { $c = false; _r$2 = _r$2.$blk(); } if (_r$2 && _r$2.$blk !== undefined) { break s; }
192634
193260
  _tuple = _r$2;
@@ -192646,9 +193272,22 @@ $packages["github.com/supraio/client-daemon/pkg/decoder/sosstream"] = (function(
192646
193272
  m.started = false;
192647
193273
  /* } */ case 2:
192648
193274
  $s = -1; return $ifaceNil;
192649
- /* */ } return; } var $f = {$blk: SOSVideoStreamer.ptr.prototype.Stop, $c: true, $r, $24r, _arg, _r, _r$1, _r$2, _r$3, _r$4, _r$5, _tuple, err, height, hostname, m, port, protocol, stopPromise, url, urlProtocol, width, $s};return $f;
193275
+ /* */ } return; } var $f = {$blk: SOSVideoStreamer.ptr.prototype.Stop, $c: true, $r, $24r, _arg, _r, _r$1, _r$2, _r$3, _r$4, _r$5, _tuple, err, geometry, hostname, m, port, protocol, stopPromise, url, urlProtocol, $s};return $f;
192650
193276
  };
192651
193277
  SOSVideoStreamer.prototype.Stop = function() { return this.$val.Stop(); };
193278
+ getStreamGeometry = function() {
193279
+ var configuredGeometry, geometry;
193280
+ geometry = new streamGeometry.ptr(0, 0, $clone($clone($clone(js.Global(), js.Value).Get("screen"), js.Value).Get("width"), js.Value).Int(), $clone($clone($clone(js.Global(), js.Value).Get("screen"), js.Value).Get("height"), js.Value).Int());
193281
+ configuredGeometry = $clone($clone($clone(js.Global(), js.Value).Get("__supra"), js.Value).Get("geometry"), js.Value);
193282
+ if ($clone(configuredGeometry, js.Value).IsUndefined() || $clone(configuredGeometry, js.Value).IsNull()) {
193283
+ return geometry;
193284
+ }
193285
+ geometry.x = $clone($clone(configuredGeometry, js.Value).Get("x"), js.Value).Int();
193286
+ geometry.y = $clone($clone(configuredGeometry, js.Value).Get("y"), js.Value).Int();
193287
+ geometry.width = $clone($clone(configuredGeometry, js.Value).Get("width"), js.Value).Int();
193288
+ geometry.height = $clone($clone(configuredGeometry, js.Value).Get("height"), js.Value).Int();
193289
+ return geometry;
193290
+ };
192652
193291
  SOSVideoStreamer.ptr.prototype.GetProtocol = function() {
192653
193292
  var _1, m, protocol, protocolValue;
192654
193293
  m = this;
@@ -192753,6 +193392,7 @@ $packages["github.com/supraio/client-daemon/pkg/decoder/sosstream"] = (function(
192753
193392
  SOSVideoStreamer.prototype.getSOSProtocol = function(protocol) { return this.$val.getSOSProtocol(protocol); };
192754
193393
  ptrType$1.methods = [{prop: "IsAvailable", name: "IsAvailable", pkg: "", typ: $funcType([], [$Bool], false)}, {prop: "Play", name: "Play", pkg: "", typ: $funcType([], [$error], false)}, {prop: "Stop", name: "Stop", pkg: "", typ: $funcType([], [$error], false)}, {prop: "GetProtocol", name: "GetProtocol", pkg: "", typ: $funcType([], [videostream.Protocol], false)}, {prop: "GetPort", name: "GetPort", pkg: "", typ: $funcType([], [$Uint16], false)}, {prop: "GetHostname", name: "GetHostname", pkg: "", typ: $funcType([], [$String], false)}, {prop: "getServerHostname", name: "getServerHostname", pkg: "github.com/supraio/client-daemon/pkg/decoder/sosstream", typ: $funcType([], [$String], false)}, {prop: "getStreamHostname", name: "getStreamHostname", pkg: "github.com/supraio/client-daemon/pkg/decoder/sosstream", typ: $funcType([videostream.Protocol], [$String], false)}, {prop: "getURLProtocol", name: "getURLProtocol", pkg: "github.com/supraio/client-daemon/pkg/decoder/sosstream", typ: $funcType([videostream.Protocol], [$String], false)}, {prop: "getSOSProtocol", name: "getSOSProtocol", pkg: "github.com/supraio/client-daemon/pkg/decoder/sosstream", typ: $funcType([videostream.Protocol], [$String], false)}];
192755
193394
  SOSVideoStreamer.init("github.com/supraio/client-daemon/pkg/decoder/sosstream", [{prop: "sos", name: "sos", embedded: false, exported: false, typ: js.Value, tag: ""}, {prop: "started", name: "started", embedded: false, exported: false, typ: $Bool, tag: ""}]);
193395
+ streamGeometry.init("github.com/supraio/client-daemon/pkg/decoder/sosstream", [{prop: "x", name: "x", embedded: false, exported: false, typ: $Int, tag: ""}, {prop: "y", name: "y", embedded: false, exported: false, typ: $Int, tag: ""}, {prop: "width", name: "width", embedded: false, exported: false, typ: $Int, tag: ""}, {prop: "height", name: "height", embedded: false, exported: false, typ: $Int, tag: ""}]);
192756
193396
  $init = function() {
192757
193397
  $pkg.$init = function() {};
192758
193398
  /* */ var $f, $c = false, $s = 0, $r; if (this !== undefined && this.$blk !== undefined) { $f = this; $c = true; $s = $f.$s; $r = $f.$r; } s: while (true) { switch ($s) { case 0:
@@ -192851,7 +193491,7 @@ $packages["github.com/supraio/client-daemon/pkg/stats"] = (function() {
192851
193491
  return $pkg;
192852
193492
  })();
192853
193493
  $packages["github.com/supraio/client-daemon/pkg/render/player"] = (function() {
192854
- var $pkg = {}, $init, decoder, errs, frame, netframe, screenbuffer, stats, screen, image, time;
193494
+ var $pkg = {}, $init, decoder, errs, frame, netframe, screenbuffer, stats, screen, image, sync, time;
192855
193495
  decoder = $packages["github.com/supraio/client-daemon/pkg/decoder"];
192856
193496
  errs = $packages["github.com/supraio/client-daemon/pkg/errs"];
192857
193497
  frame = $packages["github.com/supraio/client-daemon/pkg/render/frame"];
@@ -192860,6 +193500,7 @@ $packages["github.com/supraio/client-daemon/pkg/render/player"] = (function() {
192860
193500
  stats = $packages["github.com/supraio/client-daemon/pkg/stats"];
192861
193501
  screen = $packages["golang.org/x/exp/shiny/screen"];
192862
193502
  image = $packages["image"];
193503
+ sync = $packages["sync"];
192863
193504
  time = $packages["time"];
192864
193505
  $init = function() {
192865
193506
  $pkg.$init = function() {};
@@ -192872,14 +193513,16 @@ $packages["github.com/supraio/client-daemon/pkg/render/player"] = (function() {
192872
193513
  $r = stats.$init(); /* */ $s = 6; case 6: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
192873
193514
  $r = screen.$init(); /* */ $s = 7; case 7: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
192874
193515
  $r = image.$init(); /* */ $s = 8; case 8: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
192875
- $r = time.$init(); /* */ $s = 9; case 9: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193516
+ $r = sync.$init(); /* */ $s = 9; case 9: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193517
+ $r = time.$init(); /* */ $s = 10; case 10: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
192876
193518
  /* */ } return; } if ($f === undefined) { $f = { $blk: $init }; } $f.$s = $s; $f.$r = $r; return $f;
192877
193519
  };
192878
193520
  $pkg.$init = $init;
192879
193521
  return $pkg;
192880
193522
  })();
192881
193523
  $packages["github.com/supraio/client-daemon/pkg/shiny/driver/overlaydriver"] = (function() {
192882
- var $pkg = {}, $init, errs, dom, screen, f64, image, color, draw, sync, js, windowImpl, screenImpl, BufferImpl, sliceType, ptrType, ptrType$1, ptrType$2, funcType, arrayType, ptrType$3, sliceType$1, ptrType$4, ptrType$5, ptrType$6, ptrType$7, ptrType$8, newWindow, newScreenImpl, main, newBuffer;
193524
+ var $pkg = {}, $init, fmt, errs, dom, screen, f64, image, color, draw, sync, js, windowImpl, screenImpl, BufferImpl, sliceType, ptrType, ptrType$1, ptrType$2, funcType, arrayType, ptrType$3, sliceType$1, ptrType$4, ptrType$5, ptrType$6, ptrType$7, ptrType$8, newWindow, overlayDimension, newScreenImpl, main, newBuffer;
193525
+ fmt = $packages["fmt"];
192883
193526
  errs = $packages["github.com/supraio/client-daemon/pkg/errs"];
192884
193527
  dom = $packages["golang.org/x/exp/shiny/driver/util/dom"];
192885
193528
  screen = $packages["golang.org/x/exp/shiny/screen"];
@@ -192889,13 +193532,15 @@ $packages["github.com/supraio/client-daemon/pkg/shiny/driver/overlaydriver"] = (
192889
193532
  draw = $packages["image/draw"];
192890
193533
  sync = $packages["sync"];
192891
193534
  js = $packages["syscall/js"];
192892
- windowImpl = $pkg.windowImpl = $newType(0, $kindStruct, "overlaydriver.windowImpl", true, "github.com/supraio/client-daemon/pkg/shiny/driver/overlaydriver", false, function(screen_, mutex_, renderingInProgress_, domEvents_, released_) {
193535
+ windowImpl = $pkg.windowImpl = $newType(0, $kindStruct, "overlaydriver.windowImpl", true, "github.com/supraio/client-daemon/pkg/shiny/driver/overlaydriver", false, function(screen_, mutex_, renderingInProgress_, domEvents_, inputTarget_, ownsInputTarget_, released_) {
192893
193536
  this.$val = this;
192894
193537
  if (arguments.length === 0) {
192895
193538
  this.screen = ptrType.nil;
192896
193539
  this.mutex = ptrType$1.nil;
192897
193540
  this.renderingInProgress = false;
192898
193541
  this.domEvents = ptrType$2.nil;
193542
+ this.inputTarget = new js.Value.ptr(null, false, arrayType.zero());
193543
+ this.ownsInputTarget = false;
192899
193544
  this.released = false;
192900
193545
  return;
192901
193546
  }
@@ -192903,15 +193548,19 @@ $packages["github.com/supraio/client-daemon/pkg/shiny/driver/overlaydriver"] = (
192903
193548
  this.mutex = mutex_;
192904
193549
  this.renderingInProgress = renderingInProgress_;
192905
193550
  this.domEvents = domEvents_;
193551
+ this.inputTarget = inputTarget_;
193552
+ this.ownsInputTarget = ownsInputTarget_;
192906
193553
  this.released = released_;
192907
193554
  });
192908
- screenImpl = $pkg.screenImpl = $newType(0, $kindStruct, "overlaydriver.screenImpl", true, "github.com/supraio/client-daemon/pkg/shiny/driver/overlaydriver", false, function(doc_) {
193555
+ screenImpl = $pkg.screenImpl = $newType(0, $kindStruct, "overlaydriver.screenImpl", true, "github.com/supraio/client-daemon/pkg/shiny/driver/overlaydriver", false, function(doc_, inputTarget_) {
192909
193556
  this.$val = this;
192910
193557
  if (arguments.length === 0) {
192911
193558
  this.doc = new js.Value.ptr(null, false, arrayType.zero());
193559
+ this.inputTarget = new js.Value.ptr(null, false, arrayType.zero());
192912
193560
  return;
192913
193561
  }
192914
193562
  this.doc = doc_;
193563
+ this.inputTarget = inputTarget_;
192915
193564
  });
192916
193565
  BufferImpl = $pkg.BufferImpl = $newType(0, $kindStruct, "overlaydriver.BufferImpl", true, "github.com/supraio/client-daemon/pkg/shiny/driver/overlaydriver", true, function(screen_, size_) {
192917
193566
  this.$val = this;
@@ -192937,7 +193586,7 @@ $packages["github.com/supraio/client-daemon/pkg/shiny/driver/overlaydriver"] = (
192937
193586
  ptrType$7 = $ptrType(image.YCbCr);
192938
193587
  ptrType$8 = $ptrType(BufferImpl);
192939
193588
  newWindow = function(screen$1, opts) {
192940
- var {_r, _r$1, domEvents, opts, screen$1, w, $s, $r, $c} = $restore(this, {screen$1, opts});
193589
+ var {_arg, _arg$1, _arg$2, _arg$3, _r, _r$1, _r$2, _r$3, _r$4, _r$5, _r$6, _r$7, domEvents, inputTarget, opts, ownsInputTarget, screen$1, style, w, $s, $r, $c} = $restore(this, {screen$1, opts});
192941
193590
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
192942
193591
  /* */ if (!(opts.Title === "")) { $s = 1; continue; }
192943
193592
  /* */ $s = 2; continue;
@@ -192946,14 +193595,52 @@ $packages["github.com/supraio/client-daemon/pkg/shiny/driver/overlaydriver"] = (
192946
193595
  _r$1 = $clone(_r, js.Value).Call("item", new sliceType([new $Int(0)])); /* */ $s = 4; case 4: if($c) { $c = false; _r$1 = _r$1.$blk(); } if (_r$1 && _r$1.$blk !== undefined) { break s; }
192947
193596
  $r = $clone(_r$1, js.Value).Set("innerHTML", new $String(opts.Title)); /* */ $s = 5; case 5: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
192948
193597
  /* } */ case 2:
192949
- domEvents = dom.NewDomEvents();
192950
- w = new windowImpl.ptr(screen$1, new sync.Mutex.ptr(0, 0), false, domEvents, false);
192951
- $r = domEvents.BindEvents(); /* */ $s = 6; case 6: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193598
+ inputTarget = $clone(screen$1.inputTarget, js.Value);
193599
+ ownsInputTarget = false;
193600
+ /* */ if ($clone(inputTarget, js.Value).IsNull() || $clone(inputTarget, js.Value).IsUndefined()) { $s = 6; continue; }
193601
+ /* */ $s = 7; continue;
193602
+ /* if ($clone(inputTarget, js.Value).IsNull() || $clone(inputTarget, js.Value).IsUndefined()) { */ case 6:
193603
+ _r$2 = $clone(screen$1.doc, js.Value).Call("createElement", new sliceType([new $String("div")])); /* */ $s = 8; case 8: if($c) { $c = false; _r$2 = _r$2.$blk(); } if (_r$2 && _r$2.$blk !== undefined) { break s; }
193604
+ js.Value.copy(inputTarget, _r$2);
193605
+ style = $clone($clone(inputTarget, js.Value).Get("style"), js.Value);
193606
+ $clone(style, js.Value).Set("position", new $String("fixed"));
193607
+ _r$3 = fmt.Sprintf("%dpx", new sliceType([new $Int(opts.X)])); /* */ $s = 9; case 9: if($c) { $c = false; _r$3 = _r$3.$blk(); } if (_r$3 && _r$3.$blk !== undefined) { break s; }
193608
+ _arg = new $String(_r$3);
193609
+ $r = $clone(style, js.Value).Set("left", _arg); /* */ $s = 10; case 10: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193610
+ _r$4 = fmt.Sprintf("%dpx", new sliceType([new $Int(opts.Y)])); /* */ $s = 11; case 11: if($c) { $c = false; _r$4 = _r$4.$blk(); } if (_r$4 && _r$4.$blk !== undefined) { break s; }
193611
+ _arg$1 = new $String(_r$4);
193612
+ $r = $clone(style, js.Value).Set("top", _arg$1); /* */ $s = 12; case 12: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193613
+ _r$5 = overlayDimension(opts.Width, $clone($clone($clone(screen$1.doc, js.Value).Get("documentElement"), js.Value).Get("clientWidth"), js.Value)); /* */ $s = 13; case 13: if($c) { $c = false; _r$5 = _r$5.$blk(); } if (_r$5 && _r$5.$blk !== undefined) { break s; }
193614
+ _arg$2 = new $String(_r$5);
193615
+ $r = $clone(style, js.Value).Set("width", _arg$2); /* */ $s = 14; case 14: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193616
+ _r$6 = overlayDimension(opts.Height, $clone($clone($clone(screen$1.doc, js.Value).Get("documentElement"), js.Value).Get("clientHeight"), js.Value)); /* */ $s = 15; case 15: if($c) { $c = false; _r$6 = _r$6.$blk(); } if (_r$6 && _r$6.$blk !== undefined) { break s; }
193617
+ _arg$3 = new $String(_r$6);
193618
+ $r = $clone(style, js.Value).Set("height", _arg$3); /* */ $s = 16; case 16: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193619
+ $clone(style, js.Value).Set("zIndex", new $String("2147483647"));
193620
+ _r$7 = $clone($clone(screen$1.doc, js.Value).Get("body"), js.Value).Call("appendChild", new sliceType([new inputTarget.constructor.elem(inputTarget)])); /* */ $s = 17; case 17: if($c) { $c = false; _r$7 = _r$7.$blk(); } if (_r$7 && _r$7.$blk !== undefined) { break s; }
193621
+ _r$7;
193622
+ ownsInputTarget = true;
193623
+ /* } */ case 7:
193624
+ $clone($clone(inputTarget, js.Value).Get("style"), js.Value).Set("touchAction", new $String("none"));
193625
+ domEvents = dom.NewDomEventsForTarget($clone(inputTarget, js.Value));
193626
+ w = new windowImpl.ptr(screen$1, new sync.Mutex.ptr(0, 0), false, domEvents, $clone(inputTarget, js.Value), ownsInputTarget, false);
193627
+ $r = domEvents.BindEvents(); /* */ $s = 18; case 18: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
192952
193628
  $s = -1; return w;
192953
- /* */ } return; } var $f = {$blk: newWindow, $c: true, $r, _r, _r$1, domEvents, opts, screen$1, w, $s};return $f;
193629
+ /* */ } return; } var $f = {$blk: newWindow, $c: true, $r, _arg, _arg$1, _arg$2, _arg$3, _r, _r$1, _r$2, _r$3, _r$4, _r$5, _r$6, _r$7, domEvents, inputTarget, opts, ownsInputTarget, screen$1, style, w, $s};return $f;
193630
+ };
193631
+ overlayDimension = function(size, fallback) {
193632
+ var {$24r, _r, fallback, size, $s, $r, $c} = $restore(this, {size, fallback});
193633
+ /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
193634
+ if (size <= 0) {
193635
+ size = $clone(fallback, js.Value).Int();
193636
+ }
193637
+ _r = fmt.Sprintf("%dpx", new sliceType([new $Int(size)])); /* */ $s = 1; case 1: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; }
193638
+ $24r = _r;
193639
+ $s = 2; case 2: return $24r;
193640
+ /* */ } return; } var $f = {$blk: overlayDimension, $c: true, $r, $24r, _r, fallback, size, $s};return $f;
192954
193641
  };
192955
193642
  windowImpl.ptr.prototype.Release = function() {
192956
- var {w, $s, $deferred, $r, $c} = $restore(this, {});
193643
+ var {_r, parent, w, x, $s, $deferred, $r, $c} = $restore(this, {});
192957
193644
  /* */ $s = $s || 0; var $err = null; try { s: while (true) { switch ($s) { case 0: $deferred = []; $curGoroutine.deferStack.push($deferred);
192958
193645
  w = this;
192959
193646
  $r = w.mutex.Lock(); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
@@ -192964,9 +193651,20 @@ $packages["github.com/supraio/client-daemon/pkg/shiny/driver/overlaydriver"] = (
192964
193651
  $s = 4; case 4: return;
192965
193652
  /* } */ case 3:
192966
193653
  $r = w.domEvents.Release(); /* */ $s = 5; case 5: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193654
+ /* */ if (w.ownsInputTarget) { $s = 6; continue; }
193655
+ /* */ $s = 7; continue;
193656
+ /* if (w.ownsInputTarget) { */ case 6:
193657
+ parent = $clone($clone(w.inputTarget, js.Value).Get("parentNode"), js.Value);
193658
+ /* */ if (!$clone(parent, js.Value).IsNull() && !$clone(parent, js.Value).IsUndefined()) { $s = 8; continue; }
193659
+ /* */ $s = 9; continue;
193660
+ /* if (!$clone(parent, js.Value).IsNull() && !$clone(parent, js.Value).IsUndefined()) { */ case 8:
193661
+ _r = $clone(parent, js.Value).Call("removeChild", new sliceType([(x = w.inputTarget, new x.constructor.elem(x))])); /* */ $s = 10; case 10: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; }
193662
+ _r;
193663
+ /* } */ case 9:
193664
+ /* } */ case 7:
192967
193665
  w.released = true;
192968
193666
  $s = -1; return;
192969
- /* */ } return; } } catch(err) { $err = err; $s = -1; } finally { $callDeferred($deferred, $err); if($curGoroutine.asleep) { var $f = {$blk: windowImpl.ptr.prototype.Release, $c: true, $r, w, $s, $deferred};return $f; } }
193667
+ /* */ } return; } } catch(err) { $err = err; $s = -1; } finally { $callDeferred($deferred, $err); if($curGoroutine.asleep) { var $f = {$blk: windowImpl.ptr.prototype.Release, $c: true, $r, _r, parent, w, x, $s, $deferred};return $f; } }
192970
193668
  };
192971
193669
  windowImpl.prototype.Release = function() { return this.$val.Release(); };
192972
193670
  windowImpl.ptr.prototype.Publish = function() {
@@ -192979,21 +193677,55 @@ $packages["github.com/supraio/client-daemon/pkg/shiny/driver/overlaydriver"] = (
192979
193677
  };
192980
193678
  windowImpl.prototype.Publish = function() { return this.$val.Publish(); };
192981
193679
  windowImpl.ptr.prototype.Send = function(event) {
192982
- var event, w;
193680
+ var {event, w, $s, $deferred, $r, $c} = $restore(this, {event});
193681
+ /* */ $s = $s || 0; var $err = null; try { s: while (true) { switch ($s) { case 0: $deferred = []; $curGoroutine.deferStack.push($deferred);
192983
193682
  w = this;
192984
- if (w.released) {
192985
- return;
192986
- }
192987
- $panic(new $String("Not implemented"));
193683
+ $r = w.mutex.Lock(); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193684
+ $deferred.push([$methodVal(w.mutex, "Unlock"), []]);
193685
+ /* */ if (w.released) { $s = 2; continue; }
193686
+ /* */ $s = 3; continue;
193687
+ /* if (w.released) { */ case 2:
193688
+ $s = 4; case 4: return;
193689
+ /* } */ case 3:
193690
+ $r = $send(w.domEvents.GetEventChan(), event); /* */ $s = 5; case 5: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193691
+ $s = -1; return;
193692
+ /* */ } return; } } catch(err) { $err = err; $s = -1; } finally { $callDeferred($deferred, $err); if($curGoroutine.asleep) { var $f = {$blk: windowImpl.ptr.prototype.Send, $c: true, $r, event, w, $s, $deferred};return $f; } }
192988
193693
  };
192989
193694
  windowImpl.prototype.Send = function(event) { return this.$val.Send(event); };
193695
+ windowImpl.ptr.prototype.SendNonBlocking = function(event) {
193696
+ var {$24r, $24r$1, $24r$2, _selection, event, w, $s, $deferred, $r, $c} = $restore(this, {event});
193697
+ /* */ $s = $s || 0; var $err = null; try { s: while (true) { switch ($s) { case 0: $deferred = []; $curGoroutine.deferStack.push($deferred);
193698
+ w = this;
193699
+ $r = w.mutex.Lock(); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193700
+ $deferred.push([$methodVal(w.mutex, "Unlock"), []]);
193701
+ /* */ if (w.released) { $s = 2; continue; }
193702
+ /* */ $s = 3; continue;
193703
+ /* if (w.released) { */ case 2:
193704
+ $24r = false;
193705
+ $s = 4; case 4: return $24r;
193706
+ /* } */ case 3:
193707
+ _selection = $select([[w.domEvents.GetEventChan(), event], []]);
193708
+ /* */ if (_selection[0] === 0) { $s = 5; continue; }
193709
+ /* */ if (_selection[0] === 1) { $s = 6; continue; }
193710
+ /* */ $s = 7; continue;
193711
+ /* if (_selection[0] === 0) { */ case 5:
193712
+ $24r$1 = true;
193713
+ $s = 8; case 8: return $24r$1;
193714
+ /* } else if (_selection[0] === 1) { */ case 6:
193715
+ $24r$2 = false;
193716
+ $s = 9; case 9: return $24r$2;
193717
+ /* } */ case 7:
193718
+ $s = -1; return false;
193719
+ /* */ } return; } } catch(err) { $err = err; $s = -1; return false; } finally { $callDeferred($deferred, $err); if($curGoroutine.asleep) { var $f = {$blk: windowImpl.ptr.prototype.SendNonBlocking, $c: true, $r, $24r, $24r$1, $24r$2, _selection, event, w, $s, $deferred};return $f; } }
193720
+ };
193721
+ windowImpl.prototype.SendNonBlocking = function(event) { return this.$val.SendNonBlocking(event); };
192990
193722
  windowImpl.ptr.prototype.SendFirst = function(event) {
192991
- var event, w;
193723
+ var {event, w, $s, $r, $c} = $restore(this, {event});
193724
+ /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
192992
193725
  w = this;
192993
- if (w.released) {
192994
- return;
192995
- }
192996
- $panic(new $String("Not implemented"));
193726
+ $r = w.Send(event); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193727
+ $s = -1; return;
193728
+ /* */ } return; } var $f = {$blk: windowImpl.ptr.prototype.SendFirst, $c: true, $r, event, w, $s};return $f;
192997
193729
  };
192998
193730
  windowImpl.prototype.SendFirst = function(event) { return this.$val.SendFirst(event); };
192999
193731
  windowImpl.ptr.prototype.NextEvent = function() {
@@ -193072,9 +193804,9 @@ $packages["github.com/supraio/client-daemon/pkg/shiny/driver/overlaydriver"] = (
193072
193804
  $panic(new $String("Not implemented"));
193073
193805
  };
193074
193806
  windowImpl.prototype.Scale = function(dr, src, sr, op, opts) { return this.$val.Scale(dr, src, sr, op, opts); };
193075
- newScreenImpl = function() {
193076
- var s;
193077
- s = new screenImpl.ptr($clone($clone(js.Global(), js.Value).Get("document"), js.Value));
193807
+ newScreenImpl = function(inputTarget) {
193808
+ var inputTarget, s;
193809
+ s = new screenImpl.ptr($clone($clone(js.Global(), js.Value).Get("document"), js.Value), $clone(inputTarget, js.Value));
193078
193810
  return [s, $ifaceNil];
193079
193811
  };
193080
193812
  screenImpl.ptr.prototype.NewBuffer = function(size) {
@@ -193104,11 +193836,11 @@ $packages["github.com/supraio/client-daemon/pkg/shiny/driver/overlaydriver"] = (
193104
193836
  /* */ } return; } var $f = {$blk: screenImpl.ptr.prototype.NewWindow, $c: true, $r, _r, opts, s, window, $s};return $f;
193105
193837
  };
193106
193838
  screenImpl.prototype.NewWindow = function(opts) { return this.$val.NewWindow(opts); };
193107
- main = function(f) {
193108
- var {_tuple, err, f, retErr, s, $s, $r, $c} = $restore(this, {f});
193839
+ main = function(f, inputTarget) {
193840
+ var {_tuple, err, f, inputTarget, retErr, s, $s, $r, $c} = $restore(this, {f, inputTarget});
193109
193841
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
193110
193842
  retErr = $ifaceNil;
193111
- _tuple = newScreenImpl();
193843
+ _tuple = newScreenImpl($clone(inputTarget, js.Value));
193112
193844
  s = _tuple[0];
193113
193845
  err = _tuple[1];
193114
193846
  if (!($interfaceIsEqual(err, $ifaceNil))) {
@@ -193118,7 +193850,7 @@ $packages["github.com/supraio/client-daemon/pkg/shiny/driver/overlaydriver"] = (
193118
193850
  $r = f(s); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193119
193851
  retErr = $ifaceNil;
193120
193852
  $s = -1; return retErr;
193121
- /* */ } return; } var $f = {$blk: main, $c: true, $r, _tuple, err, f, retErr, s, $s};return $f;
193853
+ /* */ } return; } var $f = {$blk: main, $c: true, $r, _tuple, err, f, inputTarget, retErr, s, $s};return $f;
193122
193854
  };
193123
193855
  newBuffer = function(screen$1, size) {
193124
193856
  var b, screen$1, size;
@@ -193158,24 +193890,25 @@ $packages["github.com/supraio/client-daemon/pkg/shiny/driver/overlaydriver"] = (
193158
193890
  b = this;
193159
193891
  };
193160
193892
  BufferImpl.prototype.Release = function() { return this.$val.Release(); };
193161
- ptrType$5.methods = [{prop: "Release", name: "Release", pkg: "", typ: $funcType([], [], false)}, {prop: "Publish", name: "Publish", pkg: "", typ: $funcType([], [screen.PublishResult], false)}, {prop: "Send", name: "Send", pkg: "", typ: $funcType([$emptyInterface], [], false)}, {prop: "SendFirst", name: "SendFirst", pkg: "", typ: $funcType([$emptyInterface], [], false)}, {prop: "NextEvent", name: "NextEvent", pkg: "", typ: $funcType([], [$emptyInterface], false)}, {prop: "Upload", name: "Upload", pkg: "", typ: $funcType([image.Point, screen.Buffer, image.Rectangle], [], false)}, {prop: "UploadYCbCr", name: "UploadYCbCr", pkg: "", typ: $funcType([image.Point, screen.Buffer, image.Rectangle], [], false)}, {prop: "Fill", name: "Fill", pkg: "", typ: $funcType([image.Rectangle, color.Color, draw.Op], [], false)}, {prop: "Draw", name: "Draw", pkg: "", typ: $funcType([f64.Aff3, screen.Texture, image.Rectangle, draw.Op, ptrType$4], [], false)}, {prop: "DrawUniform", name: "DrawUniform", pkg: "", typ: $funcType([f64.Aff3, color.Color, image.Rectangle, draw.Op, ptrType$4], [], false)}, {prop: "Copy", name: "Copy", pkg: "", typ: $funcType([image.Point, screen.Texture, image.Rectangle, draw.Op, ptrType$4], [], false)}, {prop: "Scale", name: "Scale", pkg: "", typ: $funcType([image.Rectangle, screen.Texture, image.Rectangle, draw.Op, ptrType$4], [], false)}];
193893
+ ptrType$5.methods = [{prop: "Release", name: "Release", pkg: "", typ: $funcType([], [], false)}, {prop: "Publish", name: "Publish", pkg: "", typ: $funcType([], [screen.PublishResult], false)}, {prop: "Send", name: "Send", pkg: "", typ: $funcType([$emptyInterface], [], false)}, {prop: "SendNonBlocking", name: "SendNonBlocking", pkg: "", typ: $funcType([$emptyInterface], [$Bool], false)}, {prop: "SendFirst", name: "SendFirst", pkg: "", typ: $funcType([$emptyInterface], [], false)}, {prop: "NextEvent", name: "NextEvent", pkg: "", typ: $funcType([], [$emptyInterface], false)}, {prop: "Upload", name: "Upload", pkg: "", typ: $funcType([image.Point, screen.Buffer, image.Rectangle], [], false)}, {prop: "UploadYCbCr", name: "UploadYCbCr", pkg: "", typ: $funcType([image.Point, screen.Buffer, image.Rectangle], [], false)}, {prop: "Fill", name: "Fill", pkg: "", typ: $funcType([image.Rectangle, color.Color, draw.Op], [], false)}, {prop: "Draw", name: "Draw", pkg: "", typ: $funcType([f64.Aff3, screen.Texture, image.Rectangle, draw.Op, ptrType$4], [], false)}, {prop: "DrawUniform", name: "DrawUniform", pkg: "", typ: $funcType([f64.Aff3, color.Color, image.Rectangle, draw.Op, ptrType$4], [], false)}, {prop: "Copy", name: "Copy", pkg: "", typ: $funcType([image.Point, screen.Texture, image.Rectangle, draw.Op, ptrType$4], [], false)}, {prop: "Scale", name: "Scale", pkg: "", typ: $funcType([image.Rectangle, screen.Texture, image.Rectangle, draw.Op, ptrType$4], [], false)}];
193162
193894
  ptrType.methods = [{prop: "NewBuffer", name: "NewBuffer", pkg: "", typ: $funcType([image.Point], [screen.Buffer, $error], false)}, {prop: "NewTexture", name: "NewTexture", pkg: "", typ: $funcType([image.Point], [screen.Texture, $error], false)}, {prop: "NewWindow", name: "NewWindow", pkg: "", typ: $funcType([ptrType$6], [screen.Window, $error], false)}];
193163
193895
  ptrType$8.methods = [{prop: "Size", name: "Size", pkg: "", typ: $funcType([], [image.Point], false)}, {prop: "Bounds", name: "Bounds", pkg: "", typ: $funcType([], [image.Rectangle], false)}, {prop: "RGBA", name: "RGBA", pkg: "", typ: $funcType([], [ptrType$3], false)}, {prop: "YCbCr", name: "YCbCr", pkg: "", typ: $funcType([], [ptrType$7], false)}, {prop: "Release", name: "Release", pkg: "", typ: $funcType([], [], false)}];
193164
- windowImpl.init("github.com/supraio/client-daemon/pkg/shiny/driver/overlaydriver", [{prop: "screen", name: "screen", embedded: false, exported: false, typ: ptrType, tag: ""}, {prop: "mutex", name: "mutex", embedded: false, exported: false, typ: ptrType$1, tag: ""}, {prop: "renderingInProgress", name: "renderingInProgress", embedded: false, exported: false, typ: $Bool, tag: ""}, {prop: "domEvents", name: "domEvents", embedded: false, exported: false, typ: ptrType$2, tag: ""}, {prop: "released", name: "released", embedded: false, exported: false, typ: $Bool, tag: ""}]);
193165
- screenImpl.init("github.com/supraio/client-daemon/pkg/shiny/driver/overlaydriver", [{prop: "doc", name: "doc", embedded: false, exported: false, typ: js.Value, tag: ""}]);
193896
+ windowImpl.init("github.com/supraio/client-daemon/pkg/shiny/driver/overlaydriver", [{prop: "screen", name: "screen", embedded: false, exported: false, typ: ptrType, tag: ""}, {prop: "mutex", name: "mutex", embedded: false, exported: false, typ: ptrType$1, tag: ""}, {prop: "renderingInProgress", name: "renderingInProgress", embedded: false, exported: false, typ: $Bool, tag: ""}, {prop: "domEvents", name: "domEvents", embedded: false, exported: false, typ: ptrType$2, tag: ""}, {prop: "inputTarget", name: "inputTarget", embedded: false, exported: false, typ: js.Value, tag: ""}, {prop: "ownsInputTarget", name: "ownsInputTarget", embedded: false, exported: false, typ: $Bool, tag: ""}, {prop: "released", name: "released", embedded: false, exported: false, typ: $Bool, tag: ""}]);
193897
+ screenImpl.init("github.com/supraio/client-daemon/pkg/shiny/driver/overlaydriver", [{prop: "doc", name: "doc", embedded: false, exported: false, typ: js.Value, tag: ""}, {prop: "inputTarget", name: "inputTarget", embedded: false, exported: false, typ: js.Value, tag: ""}]);
193166
193898
  BufferImpl.init("github.com/supraio/client-daemon/pkg/shiny/driver/overlaydriver", [{prop: "screen", name: "screen", embedded: false, exported: false, typ: ptrType, tag: ""}, {prop: "size", name: "size", embedded: false, exported: false, typ: image.Point, tag: ""}]);
193167
193899
  $init = function() {
193168
193900
  $pkg.$init = function() {};
193169
193901
  /* */ var $f, $c = false, $s = 0, $r; if (this !== undefined && this.$blk !== undefined) { $f = this; $c = true; $s = $f.$s; $r = $f.$r; } s: while (true) { switch ($s) { case 0:
193170
- $r = errs.$init(); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193171
- $r = dom.$init(); /* */ $s = 2; case 2: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193172
- $r = screen.$init(); /* */ $s = 3; case 3: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193173
- $r = f64.$init(); /* */ $s = 4; case 4: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193174
- $r = image.$init(); /* */ $s = 5; case 5: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193175
- $r = color.$init(); /* */ $s = 6; case 6: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193176
- $r = draw.$init(); /* */ $s = 7; case 7: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193177
- $r = sync.$init(); /* */ $s = 8; case 8: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193178
- $r = js.$init(); /* */ $s = 9; case 9: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193902
+ $r = fmt.$init(); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193903
+ $r = errs.$init(); /* */ $s = 2; case 2: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193904
+ $r = dom.$init(); /* */ $s = 3; case 3: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193905
+ $r = screen.$init(); /* */ $s = 4; case 4: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193906
+ $r = f64.$init(); /* */ $s = 5; case 5: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193907
+ $r = image.$init(); /* */ $s = 6; case 6: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193908
+ $r = color.$init(); /* */ $s = 7; case 7: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193909
+ $r = draw.$init(); /* */ $s = 8; case 8: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193910
+ $r = sync.$init(); /* */ $s = 9; case 9: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193911
+ $r = js.$init(); /* */ $s = 10; case 10: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193179
193912
  /* */ } return; } if ($f === undefined) { $f = { $blk: $init }; } $f.$s = $s; $f.$r = $r; return $f;
193180
193913
  };
193181
193914
  $pkg.$init = $init;
@@ -193216,7 +193949,7 @@ $packages["golang.org/x/mobile/event/lifecycle"] = (function() {
193216
193949
  return $pkg;
193217
193950
  })();
193218
193951
  $packages["github.com/supraio/client-daemon/pkg/render"] = (function() {
193219
- var $pkg = {}, $init, binary, json, query, clientscreen, clipboard, nacldecoder, nacldriver, samsungwasmdecoder, webcodecs, errs, helper, input, message, netclient, netpacket, netstream, netframe, jswebsocketworker, player, overlaydriver, stats, videostream, window, canvasdriver, webgldriver, screen, focus, key, lifecycle, mouse, size, touch, geom, image, io, ioutil, log, os, path, strings, sync, js, time, screenParams, ScreenManager, ProcessInfo, ProcessInfoManager, sliceType, ptrType, funcType, sliceType$2, sliceType$4, arrayType, mapType, ptrType$15, onScreenWindowStarted, openScreenWindows, mutex, NewScreenManager, NewProcessInfoManager, init, registerJSBridge;
193952
+ var $pkg = {}, $init, binary, json, query, clientscreen, clipboard, nacldecoder, nacldriver, samsungwasmdecoder, webcodecs, errs, helper, input, message, netclient, netpacket, netstream, netframe, jswebsocketworker, player, overlaydriver, stats, videostream, window, canvasdriver, webgldriver, screen, focus, key, lifecycle, mouse, size, touch, geom, image, io, ioutil, log, os, path, strconv, strings, sync, js, time, Geometry, screenParams, ScreenManager, ProcessInfo, ProcessInfoManager, sliceType, ptrType, funcType, ptrType$14, sliceType$2, sliceType$4, arrayType, mapType, ptrType$16, onScreenWindowStarted, openScreenWindows, mutex, waitForScreenLifecycleExit, NewScreenManager, NewProcessInfoManager, init, registerJSBridge, newJSBridgeFacades, geometryValue;
193220
193953
  binary = $packages["encoding/binary"];
193221
193954
  json = $packages["encoding/json"];
193222
193955
  query = $packages["github.com/google/go-querystring/query"];
@@ -193256,10 +193989,25 @@ $packages["github.com/supraio/client-daemon/pkg/render"] = (function() {
193256
193989
  log = $packages["log"];
193257
193990
  os = $packages["os"];
193258
193991
  path = $packages["path"];
193992
+ strconv = $packages["strconv"];
193259
193993
  strings = $packages["strings"];
193260
193994
  sync = $packages["sync"];
193261
193995
  js = $packages["syscall/js"];
193262
193996
  time = $packages["time"];
193997
+ Geometry = $pkg.Geometry = $newType(0, $kindStruct, "render.Geometry", true, "github.com/supraio/client-daemon/pkg/render", true, function(X_, Y_, Width_, Height_) {
193998
+ this.$val = this;
193999
+ if (arguments.length === 0) {
194000
+ this.X = 0;
194001
+ this.Y = 0;
194002
+ this.Width = 0;
194003
+ this.Height = 0;
194004
+ return;
194005
+ }
194006
+ this.X = X_;
194007
+ this.Y = Y_;
194008
+ this.Width = Width_;
194009
+ this.Height = Height_;
194010
+ });
193263
194011
  screenParams = $pkg.screenParams = $newType(0, $kindStruct, "render.screenParams", true, "github.com/supraio/client-daemon/pkg/render", false, function(ScreenID_, ScreenDriver_, ScreenHost_, MetadataDriver_, MetadataHost_, ClientID_, ClientSecret_, Secure_) {
193264
194012
  this.$val = this;
193265
194013
  if (arguments.length === 0) {
@@ -193282,17 +194030,19 @@ $packages["github.com/supraio/client-daemon/pkg/render"] = (function() {
193282
194030
  this.ClientSecret = ClientSecret_;
193283
194031
  this.Secure = Secure_;
193284
194032
  });
193285
- ScreenManager = $pkg.ScreenManager = $newType(0, $kindStruct, "render.ScreenManager", true, "github.com/supraio/client-daemon/pkg/render", true, function(screenWindowCmd_, logDir_, processInfoManager_) {
194033
+ ScreenManager = $pkg.ScreenManager = $newType(0, $kindStruct, "render.ScreenManager", true, "github.com/supraio/client-daemon/pkg/render", true, function(screenWindowCmd_, logDir_, processInfoManager_, processMu_) {
193286
194034
  this.$val = this;
193287
194035
  if (arguments.length === 0) {
193288
194036
  this.screenWindowCmd = "";
193289
194037
  this.logDir = "";
193290
194038
  this.processInfoManager = ptrType.nil;
194039
+ this.processMu = new sync.Mutex.ptr(0, 0);
193291
194040
  return;
193292
194041
  }
193293
194042
  this.screenWindowCmd = screenWindowCmd_;
193294
194043
  this.logDir = logDir_;
193295
194044
  this.processInfoManager = processInfoManager_;
194045
+ this.processMu = processMu_;
193296
194046
  });
193297
194047
  ProcessInfo = $pkg.ProcessInfo = $newType(0, $kindStruct, "render.ProcessInfo", true, "github.com/supraio/client-daemon/pkg/render", true, function(ScreenID_, Pid_) {
193298
194048
  this.$val = this;
@@ -193317,36 +194067,39 @@ $packages["github.com/supraio/client-daemon/pkg/render"] = (function() {
193317
194067
  sliceType = $sliceType($Uint8);
193318
194068
  ptrType = $ptrType(ProcessInfoManager);
193319
194069
  funcType = $funcType([], [], false);
194070
+ ptrType$14 = $ptrType(Geometry);
193320
194071
  sliceType$2 = $sliceType($emptyInterface);
193321
194072
  sliceType$4 = $sliceType($String);
193322
194073
  arrayType = $arrayType(funcType, 0);
193323
194074
  mapType = $mapType($String, $emptyInterface);
193324
- ptrType$15 = $ptrType(ScreenManager);
194075
+ ptrType$16 = $ptrType(ScreenManager);
193325
194076
  ScreenManager.ptr.prototype.StartScreen = function(screenID, screenDriver, screenHost, metadataDriver, metadataHost, clientID, clientSecret, secure) {
193326
194077
  var {$24r, $24r$1, $24r$2, _key, _r, _r$1, _tuple, baseUrl, clientID, clientSecret, err, height, killScreen, left, m, metadataDriver, metadataHost, params, screenDriver, screenHost, screenID, screenWindow, secure, top, width, windowOpts, $s, $deferred, $r, $c} = $restore(this, {screenID, screenDriver, screenHost, metadataDriver, metadataHost, clientID, clientSecret, secure});
193327
194078
  /* */ $s = $s || 0; var $err = null; try { s: while (true) { switch ($s) { case 0: $deferred = []; $curGoroutine.deferStack.push($deferred);
193328
194079
  m = [m];
193329
194080
  screenWindow = [screenWindow];
193330
194081
  m[0] = this;
193331
- $r = mutex.Lock(); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
194082
+ $r = m[0].processMu.Lock(); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
194083
+ $deferred.push([$methodVal(m[0].processMu, "Unlock"), []]);
194084
+ $r = mutex.Lock(); /* */ $s = 2; case 2: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193332
194085
  $deferred.push([$methodVal(mutex, "Unlock"), []]);
193333
194086
  width = $clone($clone($clone(js.Global(), js.Value).Get("screen"), js.Value).Get("width"), js.Value).Int();
193334
194087
  height = $clone($clone($clone(js.Global(), js.Value).Get("screen"), js.Value).Get("height"), js.Value).Int();
193335
194088
  left = 0;
193336
194089
  top = 0;
193337
- windowOpts = new sliceType$4(["width=" + ($encodeRune(width)), "height=" + ($encodeRune(height)), "left=" + ($encodeRune(left)), "top=" + ($encodeRune(top)), "location=no", "menubar=no", "status=no", "titlebar=no", "toolbar=no"]);
194090
+ windowOpts = new sliceType$4(["width=" + strconv.Itoa(width), "height=" + strconv.Itoa(height), "left=" + strconv.Itoa(left), "top=" + strconv.Itoa(top), "location=no", "menubar=no", "status=no", "titlebar=no", "toolbar=no"]);
193338
194091
  params = new screenParams.ptr(screenID, (screenDriver), screenHost, (metadataDriver), metadataHost, clientID, clientSecret, secure);
193339
194092
  baseUrl = $clone($clone($clone(js.Global(), js.Value).Get("location"), js.Value).Get("origin"), js.Value).String();
193340
- _r = m[0].openWindow(baseUrl, $clone(params, screenParams), windowOpts); /* */ $s = 2; case 2: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; }
194093
+ _r = m[0].openWindow(baseUrl, $clone(params, screenParams), windowOpts); /* */ $s = 3; case 3: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; }
193341
194094
  _tuple = _r;
193342
194095
  screenWindow[0] = $clone(_tuple[0], js.Value);
193343
194096
  err = _tuple[1];
193344
- /* */ if (!($interfaceIsEqual(err, $ifaceNil))) { $s = 3; continue; }
193345
- /* */ $s = 4; continue;
193346
- /* if (!($interfaceIsEqual(err, $ifaceNil))) { */ case 3:
194097
+ /* */ if (!($interfaceIsEqual(err, $ifaceNil))) { $s = 4; continue; }
194098
+ /* */ $s = 5; continue;
194099
+ /* if (!($interfaceIsEqual(err, $ifaceNil))) { */ case 4:
193347
194100
  $24r = err;
193348
- $s = 5; case 5: return $24r;
193349
- /* } */ case 4:
194101
+ $s = 6; case 6: return $24r;
194102
+ /* } */ case 5:
193350
194103
  killScreen = (function(m, screenWindow) { return function $b() {
193351
194104
  var {_r$1, err$1, $s, $r, $c} = $restore(this, {});
193352
194105
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
@@ -193360,18 +194113,18 @@ $packages["github.com/supraio/client-daemon/pkg/render"] = (function() {
193360
194113
  $s = -1; return;
193361
194114
  /* */ } return; } var $f = {$blk: $b, $c: true, $r, _r$1, err$1, $s};return $f;
193362
194115
  }; })(m, screenWindow);
193363
- _r$1 = m[0].processInfoManager.WaitProcess(screenID); /* */ $s = 6; case 6: if($c) { $c = false; _r$1 = _r$1.$blk(); } if (_r$1 && _r$1.$blk !== undefined) { break s; }
194116
+ _r$1 = m[0].processInfoManager.WaitProcess(screenID); /* */ $s = 7; case 7: if($c) { $c = false; _r$1 = _r$1.$blk(); } if (_r$1 && _r$1.$blk !== undefined) { break s; }
193364
194117
  err = _r$1;
193365
- /* */ if (!($interfaceIsEqual(err, $ifaceNil))) { $s = 7; continue; }
193366
- /* */ $s = 8; continue;
193367
- /* if (!($interfaceIsEqual(err, $ifaceNil))) { */ case 7:
193368
- $r = killScreen(); /* */ $s = 9; case 9: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
194118
+ /* */ if (!($interfaceIsEqual(err, $ifaceNil))) { $s = 8; continue; }
194119
+ /* */ $s = 9; continue;
194120
+ /* if (!($interfaceIsEqual(err, $ifaceNil))) { */ case 8:
194121
+ $r = killScreen(); /* */ $s = 10; case 10: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193369
194122
  $24r$1 = err;
193370
- $s = 10; case 10: return $24r$1;
193371
- /* } */ case 8:
194123
+ $s = 11; case 11: return $24r$1;
194124
+ /* } */ case 9:
193372
194125
  _key = screenID; (openScreenWindows || $throwRuntimeError("assignment to entry in nil map")).set($String.keyFor(_key), { k: _key, v: $clone(screenWindow[0], js.Value) });
193373
194126
  $24r$2 = $ifaceNil;
193374
- $s = 11; case 11: return $24r$2;
194127
+ $s = 12; case 12: return $24r$2;
193375
194128
  /* */ } return; } } catch(err) { $err = err; $s = -1; return $ifaceNil; } finally { $callDeferred($deferred, $err); if($curGoroutine.asleep) { var $f = {$blk: ScreenManager.ptr.prototype.StartScreen, $c: true, $r, $24r, $24r$1, $24r$2, _key, _r, _r$1, _tuple, baseUrl, clientID, clientSecret, err, height, killScreen, left, m, metadataDriver, metadataHost, params, screenDriver, screenHost, screenID, screenWindow, secure, top, width, windowOpts, $s, $deferred};return $f; } }
193376
194129
  };
193377
194130
  ScreenManager.prototype.StartScreen = function(screenID, screenDriver, screenHost, metadataDriver, metadataHost, clientID, clientSecret, secure) { return this.$val.StartScreen(screenID, screenDriver, screenHost, metadataDriver, metadataHost, clientID, clientSecret, secure); };
@@ -193441,46 +194194,116 @@ $packages["github.com/supraio/client-daemon/pkg/render"] = (function() {
193441
194194
  };
193442
194195
  ScreenManager.prototype.closeWindow = function(window$1) { return this.$val.closeWindow(window$1); };
193443
194196
  ScreenManager.ptr.prototype.StopScreen = function(screenID) {
193444
- var {$24r, $24r$1, $24r$2, $24r$3, _entry, _r, _r$1, _tuple, _tuple$1, err, exists, m, screenID, screenWindow, $s, $deferred, $r, $c} = $restore(this, {screenID});
194197
+ var {$24r, $24r$1, $24r$2, $24r$3, $24r$4, $24r$5, $24r$6, _entry, _r, _r$1, _r$2, _r$3, _r$4, _r$5, _r$6, _r$7, _tuple, _tuple$1, bridge, deadline, err, err$1, err$2, exists, m, screenID, screenWindow, stopScreen, $s, $deferred, $r, $c} = $restore(this, {screenID});
193445
194198
  /* */ $s = $s || 0; var $err = null; try { s: while (true) { switch ($s) { case 0: $deferred = []; $curGoroutine.deferStack.push($deferred);
194199
+ bridge = [bridge];
193446
194200
  m = this;
193447
- $r = mutex.Lock(); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
194201
+ $r = m.processMu.Lock(); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
194202
+ $deferred.push([$methodVal(m.processMu, "Unlock"), []]);
194203
+ $r = mutex.Lock(); /* */ $s = 2; case 2: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193448
194204
  $deferred.push([$methodVal(mutex, "Unlock"), []]);
193449
- _r = m.processInfoManager.GetProcessInfo(screenID); /* */ $s = 2; case 2: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; }
194205
+ _r = m.processInfoManager.GetProcessInfo(screenID); /* */ $s = 3; case 3: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; }
193450
194206
  _tuple = _r;
193451
194207
  err = _tuple[1];
193452
- /* */ if (!($interfaceIsEqual(err, $ifaceNil))) { $s = 3; continue; }
193453
- /* */ $s = 4; continue;
193454
- /* if (!($interfaceIsEqual(err, $ifaceNil))) { */ case 3:
194208
+ /* */ if (!($interfaceIsEqual(err, $ifaceNil))) { $s = 4; continue; }
194209
+ /* */ $s = 5; continue;
194210
+ /* if (!($interfaceIsEqual(err, $ifaceNil))) { */ case 4:
193455
194211
  $24r = err;
193456
- $s = 5; case 5: return $24r;
193457
- /* } */ case 4:
194212
+ $s = 6; case 6: return $24r;
194213
+ /* } */ case 5:
193458
194214
  _tuple$1 = (_entry = $mapIndex(openScreenWindows,$String.keyFor(screenID)), _entry !== undefined ? [_entry.v, true] : [new js.Value.ptr(null, false, arrayType.zero()), false]);
193459
194215
  screenWindow = $clone(_tuple$1[0], js.Value);
193460
194216
  exists = _tuple$1[1];
193461
- /* */ if (!exists) { $s = 6; continue; }
193462
- /* */ $s = 7; continue;
193463
- /* if (!exists) { */ case 6:
193464
- $24r$1 = err;
193465
- $s = 8; case 8: return $24r$1;
193466
- /* } */ case 7:
193467
- _r$1 = m.closeWindow($clone(screenWindow, js.Value)); /* */ $s = 9; case 9: if($c) { $c = false; _r$1 = _r$1.$blk(); } if (_r$1 && _r$1.$blk !== undefined) { break s; }
193468
- err = _r$1;
193469
- /* */ if (!($interfaceIsEqual(err, $ifaceNil))) { $s = 10; continue; }
193470
- /* */ $s = 11; continue;
193471
- /* if (!($interfaceIsEqual(err, $ifaceNil))) { */ case 10:
193472
- $24r$2 = err;
193473
- $s = 12; case 12: return $24r$2;
193474
- /* } */ case 11:
194217
+ /* */ if (!exists) { $s = 7; continue; }
194218
+ /* */ $s = 8; continue;
194219
+ /* if (!exists) { */ case 7:
194220
+ _r$1 = errs.Errorf("screen window %s is not open", new sliceType$2([new $String(screenID)])); /* */ $s = 9; case 9: if($c) { $c = false; _r$1 = _r$1.$blk(); } if (_r$1 && _r$1.$blk !== undefined) { break s; }
194221
+ $24r$1 = _r$1;
194222
+ $s = 10; case 10: return $24r$1;
194223
+ /* } */ case 8:
194224
+ bridge[0] = $clone($clone(screenWindow, js.Value).Get("__supra"), js.Value);
194225
+ /* */ if (($clone(bridge[0], js.Value).Type() === 0) || ($clone(bridge[0], js.Value).Type() === 1)) { $s = 11; continue; }
194226
+ /* */ $s = 12; continue;
194227
+ /* if (($clone(bridge[0], js.Value).Type() === 0) || ($clone(bridge[0], js.Value).Type() === 1)) { */ case 11:
194228
+ _r$2 = errs.Errorf("screen window %s control bridge is unavailable", new sliceType$2([new $String(screenID)])); /* */ $s = 13; case 13: if($c) { $c = false; _r$2 = _r$2.$blk(); } if (_r$2 && _r$2.$blk !== undefined) { break s; }
194229
+ $24r$2 = _r$2;
194230
+ $s = 14; case 14: return $24r$2;
194231
+ /* } */ case 12:
194232
+ stopScreen = $clone($clone(bridge[0], js.Value).Get("stopScreen"), js.Value);
194233
+ /* */ if (!(($clone(stopScreen, js.Value).Type() === 7))) { $s = 15; continue; }
194234
+ /* */ $s = 16; continue;
194235
+ /* if (!(($clone(stopScreen, js.Value).Type() === 7))) { */ case 15:
194236
+ _r$3 = errs.Errorf("screen window %s control bridge is unavailable", new sliceType$2([new $String(screenID)])); /* */ $s = 17; case 17: if($c) { $c = false; _r$3 = _r$3.$blk(); } if (_r$3 && _r$3.$blk !== undefined) { break s; }
194237
+ $24r$3 = _r$3;
194238
+ $s = 18; case 18: return $24r$3;
194239
+ /* } */ case 16:
194240
+ $clone(stopScreen, js.Value).Invoke(sliceType$2.nil);
194241
+ _r$4 = time.Now(); /* */ $s = 19; case 19: if($c) { $c = false; _r$4 = _r$4.$blk(); } if (_r$4 && _r$4.$blk !== undefined) { break s; }
194242
+ _r$5 = $clone(_r$4, time.Time).Add(new time.Duration(6, 4230196224)); /* */ $s = 20; case 20: if($c) { $c = false; _r$5 = _r$5.$blk(); } if (_r$5 && _r$5.$blk !== undefined) { break s; }
194243
+ deadline = $clone(_r$5, time.Time);
194244
+ _r$6 = waitForScreenLifecycleExit(screenID, (function(bridge) { return function(marker) {
194245
+ var marker, value;
194246
+ value = $clone($clone(bridge[0], js.Value).Get(marker), js.Value);
194247
+ return ($clone(value, js.Value).Type() === 2) && $clone(value, js.Value).Bool();
194248
+ }; })(bridge), $clone(deadline, time.Time)); /* */ $s = 21; case 21: if($c) { $c = false; _r$6 = _r$6.$blk(); } if (_r$6 && _r$6.$blk !== undefined) { break s; }
194249
+ err$1 = _r$6;
194250
+ /* */ if (!($interfaceIsEqual(err$1, $ifaceNil))) { $s = 22; continue; }
194251
+ /* */ $s = 23; continue;
194252
+ /* if (!($interfaceIsEqual(err$1, $ifaceNil))) { */ case 22:
194253
+ $24r$4 = err$1;
194254
+ $s = 24; case 24: return $24r$4;
194255
+ /* } */ case 23:
194256
+ _r$7 = m.closeWindow($clone(screenWindow, js.Value)); /* */ $s = 25; case 25: if($c) { $c = false; _r$7 = _r$7.$blk(); } if (_r$7 && _r$7.$blk !== undefined) { break s; }
194257
+ err$2 = _r$7;
194258
+ /* */ if (!($interfaceIsEqual(err$2, $ifaceNil))) { $s = 26; continue; }
194259
+ /* */ $s = 27; continue;
194260
+ /* if (!($interfaceIsEqual(err$2, $ifaceNil))) { */ case 26:
194261
+ $24r$5 = err$2;
194262
+ $s = 28; case 28: return $24r$5;
194263
+ /* } */ case 27:
193475
194264
  $mapDelete(openScreenWindows, $String.keyFor(screenID));
193476
- $24r$3 = $ifaceNil;
193477
- $s = 13; case 13: return $24r$3;
193478
- /* */ } return; } } catch(err) { $err = err; $s = -1; return $ifaceNil; } finally { $callDeferred($deferred, $err); if($curGoroutine.asleep) { var $f = {$blk: ScreenManager.ptr.prototype.StopScreen, $c: true, $r, $24r, $24r$1, $24r$2, $24r$3, _entry, _r, _r$1, _tuple, _tuple$1, err, exists, m, screenID, screenWindow, $s, $deferred};return $f; } }
194265
+ $24r$6 = $ifaceNil;
194266
+ $s = 29; case 29: return $24r$6;
194267
+ /* */ } return; } } catch(err) { $err = err; $s = -1; return $ifaceNil; } finally { $callDeferred($deferred, $err); if($curGoroutine.asleep) { var $f = {$blk: ScreenManager.ptr.prototype.StopScreen, $c: true, $r, $24r, $24r$1, $24r$2, $24r$3, $24r$4, $24r$5, $24r$6, _entry, _r, _r$1, _r$2, _r$3, _r$4, _r$5, _r$6, _r$7, _tuple, _tuple$1, bridge, deadline, err, err$1, err$2, exists, m, screenID, screenWindow, stopScreen, $s, $deferred};return $f; } }
193479
194268
  };
193480
194269
  ScreenManager.prototype.StopScreen = function(screenID) { return this.$val.StopScreen(screenID); };
194270
+ waitForScreenLifecycleExit = function(screenID, markerSet, deadline) {
194271
+ var {$24r, _r, _r$1, _r$2, _r$3, _r$4, _v, cleanupCompleted, deadline, markerSet, screenID, $s, $r, $c} = $restore(this, {screenID, markerSet, deadline});
194272
+ /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
194273
+ cleanupCompleted = false;
194274
+ /* while (true) { */ case 1:
194275
+ /* */ if (!cleanupCompleted) { $s = 3; continue; }
194276
+ /* */ $s = 4; continue;
194277
+ /* if (!cleanupCompleted) { */ case 3:
194278
+ _r = markerSet("screenStopCompleted"); /* */ $s = 5; case 5: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; }
194279
+ cleanupCompleted = _r;
194280
+ /* } */ case 4:
194281
+ if (!(cleanupCompleted)) { _v = false; $s = 8; continue s; }
194282
+ _r$1 = markerSet("screenLifecycleExited"); /* */ $s = 9; case 9: if($c) { $c = false; _r$1 = _r$1.$blk(); } if (_r$1 && _r$1.$blk !== undefined) { break s; }
194283
+ _v = _r$1; case 8:
194284
+ /* */ if (_v) { $s = 6; continue; }
194285
+ /* */ $s = 7; continue;
194286
+ /* if (_v) { */ case 6:
194287
+ $s = -1; return $ifaceNil;
194288
+ /* } */ case 7:
194289
+ _r$2 = time.Now(); /* */ $s = 12; case 12: if($c) { $c = false; _r$2 = _r$2.$blk(); } if (_r$2 && _r$2.$blk !== undefined) { break s; }
194290
+ _r$3 = $clone(_r$2, time.Time).After($clone(deadline, time.Time)); /* */ $s = 13; case 13: if($c) { $c = false; _r$3 = _r$3.$blk(); } if (_r$3 && _r$3.$blk !== undefined) { break s; }
194291
+ /* */ if (_r$3) { $s = 10; continue; }
194292
+ /* */ $s = 11; continue;
194293
+ /* if (_r$3) { */ case 10:
194294
+ _r$4 = errs.Errorf("screen window %s stop timed out", new sliceType$2([new $String(screenID)])); /* */ $s = 14; case 14: if($c) { $c = false; _r$4 = _r$4.$blk(); } if (_r$4 && _r$4.$blk !== undefined) { break s; }
194295
+ $24r = _r$4;
194296
+ $s = 15; case 15: return $24r;
194297
+ /* } */ case 11:
194298
+ $r = time.Sleep(new time.Duration(0, 10000000)); /* */ $s = 16; case 16: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
194299
+ $s = 1; continue;
194300
+ case 2:
194301
+ $s = -1; return $ifaceNil;
194302
+ /* */ } return; } var $f = {$blk: waitForScreenLifecycleExit, $c: true, $r, $24r, _r, _r$1, _r$2, _r$3, _r$4, _v, cleanupCompleted, deadline, markerSet, screenID, $s};return $f;
194303
+ };
193481
194304
  NewScreenManager = function(screenWindowCmd, logDir, processInfoManager) {
193482
194305
  var logDir, processInfoManager, screenWindowCmd;
193483
- return new ScreenManager.ptr(screenWindowCmd, logDir, processInfoManager);
194306
+ return new ScreenManager.ptr(screenWindowCmd, logDir, processInfoManager, new sync.Mutex.ptr(0, 0));
193484
194307
  };
193485
194308
  $pkg.NewScreenManager = NewScreenManager;
193486
194309
  ScreenManager.ptr.prototype.ListScreens = function() {
@@ -193550,6 +194373,29 @@ $packages["github.com/supraio/client-daemon/pkg/render"] = (function() {
193550
194373
  /* */ } return; } var $f = {$blk: ProcessInfoManager.ptr.prototype.RemoveProcessInfo, $c: true, $r, _r, _r$1, err, m, screenID, userProcessDirPath, $s};return $f;
193551
194374
  };
193552
194375
  ProcessInfoManager.prototype.RemoveProcessInfo = function(screenID) { return this.$val.RemoveProcessInfo(screenID); };
194376
+ ProcessInfoManager.ptr.prototype.RemoveProcessInfoByPid = function(screenID, pid) {
194377
+ var {$24r, _r, _r$1, _tuple, err, m, pid, processInfo, screenID, $s, $r, $c} = $restore(this, {screenID, pid});
194378
+ /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
194379
+ m = this;
194380
+ _r = m.GetProcessInfo(screenID); /* */ $s = 1; case 1: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; }
194381
+ _tuple = _r;
194382
+ processInfo = $clone(_tuple[0], ProcessInfo);
194383
+ err = _tuple[1];
194384
+ if (os.IsNotExist(err)) {
194385
+ $s = -1; return $ifaceNil;
194386
+ }
194387
+ if (!($interfaceIsEqual(err, $ifaceNil))) {
194388
+ $s = -1; return err;
194389
+ }
194390
+ if (!((processInfo.Pid === pid))) {
194391
+ $s = -1; return $ifaceNil;
194392
+ }
194393
+ _r$1 = m.RemoveProcessInfo(screenID); /* */ $s = 2; case 2: if($c) { $c = false; _r$1 = _r$1.$blk(); } if (_r$1 && _r$1.$blk !== undefined) { break s; }
194394
+ $24r = _r$1;
194395
+ $s = 3; case 3: return $24r;
194396
+ /* */ } return; } var $f = {$blk: ProcessInfoManager.ptr.prototype.RemoveProcessInfoByPid, $c: true, $r, $24r, _r, _r$1, _tuple, err, m, pid, processInfo, screenID, $s};return $f;
194397
+ };
194398
+ ProcessInfoManager.prototype.RemoveProcessInfoByPid = function(screenID, pid) { return this.$val.RemoveProcessInfoByPid(screenID, pid); };
193553
194399
  ProcessInfoManager.ptr.prototype.WaitProcess = function(screenID) {
193554
194400
  var {$24r, _r, _r$1, _r$2, _r$3, _r$4, _r$5, _tuple, err, m, screenID, startTime, x, $s, $r, $c} = $restore(this, {screenID});
193555
194401
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
@@ -193580,6 +194426,37 @@ $packages["github.com/supraio/client-daemon/pkg/render"] = (function() {
193580
194426
  /* */ } return; } var $f = {$blk: ProcessInfoManager.ptr.prototype.WaitProcess, $c: true, $r, $24r, _r, _r$1, _r$2, _r$3, _r$4, _r$5, _tuple, err, m, screenID, startTime, x, $s};return $f;
193581
194427
  };
193582
194428
  ProcessInfoManager.prototype.WaitProcess = function(screenID) { return this.$val.WaitProcess(screenID); };
194429
+ ProcessInfoManager.ptr.prototype.WaitProcessStopped = function(screenID, timeout) {
194430
+ var {$24r, _r, _r$1, _r$2, _r$3, _tuple, err, m, screenID, startTime, timeout, x, $s, $r, $c} = $restore(this, {screenID, timeout});
194431
+ /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
194432
+ m = this;
194433
+ _r = time.Now(); /* */ $s = 1; case 1: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; }
194434
+ startTime = $clone(_r, time.Time);
194435
+ /* while (true) { */ case 2:
194436
+ _r$1 = m.GetProcessInfo(screenID); /* */ $s = 4; case 4: if($c) { $c = false; _r$1 = _r$1.$blk(); } if (_r$1 && _r$1.$blk !== undefined) { break s; }
194437
+ _tuple = _r$1;
194438
+ err = _tuple[1];
194439
+ if (os.IsNotExist(err)) {
194440
+ $s = -1; return $ifaceNil;
194441
+ }
194442
+ if (!($interfaceIsEqual(err, $ifaceNil))) {
194443
+ $s = -1; return err;
194444
+ }
194445
+ _r$2 = time.Since($clone(startTime, time.Time)); /* */ $s = 7; case 7: if($c) { $c = false; _r$2 = _r$2.$blk(); } if (_r$2 && _r$2.$blk !== undefined) { break s; }
194446
+ /* */ if ((x = _r$2, (x.$high > timeout.$high || (x.$high === timeout.$high && x.$low > timeout.$low)))) { $s = 5; continue; }
194447
+ /* */ $s = 6; continue;
194448
+ /* if ((x = _r$2, (x.$high > timeout.$high || (x.$high === timeout.$high && x.$low > timeout.$low)))) { */ case 5:
194449
+ _r$3 = errs.Errorf("Waiting for process %s stop timed out", new sliceType$2([new $String(screenID)])); /* */ $s = 8; case 8: if($c) { $c = false; _r$3 = _r$3.$blk(); } if (_r$3 && _r$3.$blk !== undefined) { break s; }
194450
+ $24r = _r$3;
194451
+ $s = 9; case 9: return $24r;
194452
+ /* } */ case 6:
194453
+ $r = time.Sleep(new time.Duration(0, 100000000)); /* */ $s = 10; case 10: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
194454
+ $s = 2; continue;
194455
+ case 3:
194456
+ $s = -1; return $ifaceNil;
194457
+ /* */ } return; } var $f = {$blk: ProcessInfoManager.ptr.prototype.WaitProcessStopped, $c: true, $r, $24r, _r, _r$1, _r$2, _r$3, _tuple, err, m, screenID, startTime, timeout, x, $s};return $f;
194458
+ };
194459
+ ProcessInfoManager.prototype.WaitProcessStopped = function(screenID, timeout) { return this.$val.WaitProcessStopped(screenID, timeout); };
193583
194460
  ProcessInfoManager.ptr.prototype.GetProcessInfo = function(screenID) {
193584
194461
  var {_r, _r$1, _tmp, _tmp$1, _tmp$2, _tmp$3, _tmp$4, _tmp$5, _tuple, err, fileBuffer, m, processInfo, screenID, userProcessDirPath, $s, $r, $c} = $restore(this, {screenID});
193585
194462
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
@@ -193671,10 +194548,16 @@ $packages["github.com/supraio/client-daemon/pkg/render"] = (function() {
193671
194548
  onScreenWindowStarted = registerJSBridge;
193672
194549
  };
193673
194550
  registerJSBridge = function(w) {
193674
- var {supraObj, w, x, x$1, x$2, $s, $r, $c} = $restore(this, {w});
194551
+ var {_r, _tuple, deactivateFacades, facades, getCurrentStats, setEncodingPreferences, stopScreen, supraObj, supraValue, w, x, x$1, x$2, $s, $r, $c} = $restore(this, {w});
193675
194552
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
194553
+ deactivateFacades = [deactivateFacades];
194554
+ getCurrentStats = [getCurrentStats];
194555
+ setEncodingPreferences = [setEncodingPreferences];
194556
+ stopScreen = [stopScreen];
194557
+ supraValue = [supraValue];
193676
194558
  w = [w];
193677
- supraObj = $makeMap($String.keyFor, [{ k: "setEncodingPreferences", v: (x = js.FuncOf((function(w) { return function $b(this$1, args) {
194559
+ supraValue[0] = new js.Value.ptr(null, false, arrayType.zero());
194560
+ setEncodingPreferences[0] = $clone(js.FuncOf((function(deactivateFacades, getCurrentStats, setEncodingPreferences, stopScreen, supraValue, w) { return function $b(this$1, args) {
193678
194561
  var {_r, args, err, jsonStr, prefs, this$1, $s, $r, $c} = $restore(this, {this$1, args});
193679
194562
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
193680
194563
  prefs = [prefs];
@@ -193698,7 +194581,8 @@ $packages["github.com/supraio/client-daemon/pkg/render"] = (function() {
193698
194581
  w[0].SetEncodingPreferences($clone(prefs[0], stats.EncodingPreferences));
193699
194582
  $s = -1; return $ifaceNil;
193700
194583
  /* */ } return; } var $f = {$blk: $b, $c: true, $r, _r, args, err, jsonStr, prefs, this$1, $s};return $f;
193701
- }; })(w)), new x.constructor.elem(x)) }, { k: "getCurrentStats", v: (x$1 = js.FuncOf((function(w) { return function $b(this$1, args) {
194584
+ }; })(deactivateFacades, getCurrentStats, setEncodingPreferences, stopScreen, supraValue, w)), js.Func);
194585
+ getCurrentStats[0] = $clone(js.FuncOf((function(deactivateFacades, getCurrentStats, setEncodingPreferences, stopScreen, supraValue, w) { return function $b(this$1, args) {
193702
194586
  var {_r, _tuple, args, clientStats, data, err, this$1, $s, $r, $c} = $restore(this, {this$1, args});
193703
194587
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
193704
194588
  clientStats = w[0].stats.GetClientStats();
@@ -193714,16 +194598,70 @@ $packages["github.com/supraio/client-daemon/pkg/render"] = (function() {
193714
194598
  /* } */ case 3:
193715
194599
  $s = -1; return new $String(($bytesToString(data)));
193716
194600
  /* */ } return; } var $f = {$blk: $b, $c: true, $r, _r, _tuple, args, clientStats, data, err, this$1, $s};return $f;
193717
- }; })(w)), new x$1.constructor.elem(x$1)) }]);
193718
- $clone(js.Global(), js.Value).Set("__supra", (x$2 = js.ValueOf(new mapType(supraObj)), new x$2.constructor.elem(x$2)));
193719
- $r = log.Println(new sliceType$2([new $String("Registered window.__supra JS bridge")])); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
194601
+ }; })(deactivateFacades, getCurrentStats, setEncodingPreferences, stopScreen, supraValue, w)), js.Func);
194602
+ stopScreen[0] = $clone(js.FuncOf((function(deactivateFacades, getCurrentStats, setEncodingPreferences, stopScreen, supraValue, w) { return function $b(this$1, args) {
194603
+ var {args, this$1, $s, $r, $c} = $restore(this, {this$1, args});
194604
+ /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
194605
+ $clone(supraValue[0], js.Value).Set("screenStopped", new $Bool(true));
194606
+ $r = log.Println(new sliceType$2([new $String("Screen close lifecycle: JS bridge requested close")])); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
194607
+ $go($methodVal(w[0], "Close"), []);
194608
+ $s = -1; return $ifaceNil;
194609
+ /* */ } return; } var $f = {$blk: $b, $c: true, $r, args, this$1, $s};return $f;
194610
+ }; })(deactivateFacades, getCurrentStats, setEncodingPreferences, stopScreen, supraValue, w)), js.Func);
194611
+ _r = newJSBridgeFacades($clone(setEncodingPreferences[0], js.Func), $clone(getCurrentStats[0], js.Func), $clone(stopScreen[0], js.Func)); /* */ $s = 1; case 1: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; }
194612
+ _tuple = _r;
194613
+ facades = $clone(_tuple[0], js.Value);
194614
+ deactivateFacades[0] = _tuple[1];
194615
+ supraObj = $makeMap($String.keyFor, [{ k: "geometry", v: geometryValue(w[0].Geometry()) }, { k: "screenStopped", v: new $Bool(false) }, { k: "screenStopCompleted", v: new $Bool(false) }, { k: "screenLifecycleExited", v: new $Bool(false) }, { k: "setEncodingPreferences", v: (x = $clone(facades, js.Value).Get("setEncodingPreferences"), new x.constructor.elem(x)) }, { k: "getCurrentStats", v: (x$1 = $clone(facades, js.Value).Get("getCurrentStats"), new x$1.constructor.elem(x$1)) }, { k: "stopScreen", v: (x$2 = $clone(facades, js.Value).Get("stopScreen"), new x$2.constructor.elem(x$2)) }]);
194616
+ js.Value.copy(supraValue[0], js.ValueOf(new mapType(supraObj)));
194617
+ $clone(js.Global(), js.Value).Set("__supra", new supraValue[0].constructor.elem(supraValue[0]));
194618
+ $r = w[0].OnClose((function(deactivateFacades, getCurrentStats, setEncodingPreferences, stopScreen, supraValue, w) { return function $b() {
194619
+ var {$s, $r, $c} = $restore(this, {});
194620
+ /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
194621
+ $r = deactivateFacades[0](); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
194622
+ $clone(setEncodingPreferences[0], js.Func).Release();
194623
+ $clone(getCurrentStats[0], js.Func).Release();
194624
+ $clone(stopScreen[0], js.Func).Release();
194625
+ $r = log.Println(new sliceType$2([new $String("Screen close lifecycle: setting JS completion marker")])); /* */ $s = 2; case 2: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
194626
+ $clone(supraValue[0], js.Value).Set("screenStopCompleted", new $Bool(true));
194627
+ $r = log.Println(new sliceType$2([new $String("Screen close lifecycle: JS completion marker set")])); /* */ $s = 3; case 3: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
194628
+ $s = -1; return;
194629
+ /* */ } return; } var $f = {$blk: $b, $c: true, $r, $s};return $f;
194630
+ }; })(deactivateFacades, getCurrentStats, setEncodingPreferences, stopScreen, supraValue, w)); /* */ $s = 2; case 2: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
194631
+ $r = log.Println(new sliceType$2([new $String("Registered window.__supra JS bridge")])); /* */ $s = 3; case 3: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193720
194632
  $s = -1; return;
193721
- /* */ } return; } var $f = {$blk: registerJSBridge, $c: true, $r, supraObj, w, x, x$1, x$2, $s};return $f;
194633
+ /* */ } return; } var $f = {$blk: registerJSBridge, $c: true, $r, _r, _tuple, deactivateFacades, facades, getCurrentStats, setEncodingPreferences, stopScreen, supraObj, supraValue, w, x, x$1, x$2, $s};return $f;
194634
+ };
194635
+ newJSBridgeFacades = function(setEncodingPreferences, getCurrentStats, stopScreen) {
194636
+ var {_r, _r$1, deactivate, facades, getCurrentStats, setEncodingPreferences, state, stopScreen, $s, $r, $c} = $restore(this, {setEncodingPreferences, getCurrentStats, stopScreen});
194637
+ /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
194638
+ state = [state];
194639
+ state[0] = $clone(js.ValueOf(new mapType($makeMap($String.keyFor, [{ k: "active", v: new $Bool(true) }, { k: "setEncodingPreferences", v: new setEncodingPreferences.constructor.elem(setEncodingPreferences) }, { k: "getCurrentStats", v: new getCurrentStats.constructor.elem(getCurrentStats) }, { k: "stopScreen", v: new stopScreen.constructor.elem(stopScreen) }]))), js.Value);
194640
+ _r = $clone($clone(js.Global(), js.Value).Get("Function"), js.Value).New(new sliceType$2([new $String("state"), new $String("return {\n\t\t\tsetEncodingPreferences: function(json) {\n\t\t\t\tif (state.active) return state.setEncodingPreferences(json);\n\t\t\t},\n\t\t\tgetCurrentStats: function() {\n\t\t\t\tif (state.active) return state.getCurrentStats();\n\t\t\t\treturn null;\n\t\t\t},\n\t\t\tstopScreen: function() {\n\t\t\t\tif (state.active) return state.stopScreen();\n\t\t\t}\n\t\t};")])); /* */ $s = 1; case 1: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; }
194641
+ _r$1 = $clone(_r, js.Value).Invoke(new sliceType$2([new state[0].constructor.elem(state[0])])); /* */ $s = 2; case 2: if($c) { $c = false; _r$1 = _r$1.$blk(); } if (_r$1 && _r$1.$blk !== undefined) { break s; }
194642
+ facades = $clone(_r$1, js.Value);
194643
+ deactivate = (function(state) { return function() {
194644
+ var x, x$1, x$2;
194645
+ $clone(state[0], js.Value).Set("active", new $Bool(false));
194646
+ $clone(state[0], js.Value).Set("setEncodingPreferences", (x = js.Undefined(), new x.constructor.elem(x)));
194647
+ $clone(state[0], js.Value).Set("getCurrentStats", (x$1 = js.Undefined(), new x$1.constructor.elem(x$1)));
194648
+ $clone(state[0], js.Value).Set("stopScreen", (x$2 = js.Undefined(), new x$2.constructor.elem(x$2)));
194649
+ }; })(state);
194650
+ $s = -1; return [facades, deactivate];
194651
+ /* */ } return; } var $f = {$blk: newJSBridgeFacades, $c: true, $r, _r, _r$1, deactivate, facades, getCurrentStats, setEncodingPreferences, state, stopScreen, $s};return $f;
194652
+ };
194653
+ geometryValue = function(g) {
194654
+ var g;
194655
+ if (g === ptrType$14.nil) {
194656
+ return $ifaceNil;
194657
+ }
194658
+ return new mapType($makeMap($String.keyFor, [{ k: "x", v: new $Int(g.X) }, { k: "y", v: new $Int(g.Y) }, { k: "width", v: new $Int(g.Width) }, { k: "height", v: new $Int(g.Height) }]));
193722
194659
  };
193723
- ptrType$15.methods = [{prop: "StartScreen", name: "StartScreen", pkg: "", typ: $funcType([$String, netpacket.Driver, $String, netstream.Driver, $String, $String, $String, $Bool], [$error], false)}, {prop: "openWindow", name: "openWindow", pkg: "github.com/supraio/client-daemon/pkg/render", typ: $funcType([$String, screenParams, sliceType$4], [js.Value, $error], false)}, {prop: "closeWindow", name: "closeWindow", pkg: "github.com/supraio/client-daemon/pkg/render", typ: $funcType([js.Value], [$error], false)}, {prop: "StopScreen", name: "StopScreen", pkg: "", typ: $funcType([$String], [$error], false)}, {prop: "pipeErrLog", name: "pipeErrLog", pkg: "github.com/supraio/client-daemon/pkg/render", typ: $funcType([$String, io.Reader], [$error], false)}, {prop: "ListScreens", name: "ListScreens", pkg: "", typ: $funcType([], [sliceType$4, $error], false)}];
193724
- ptrType.methods = [{prop: "CreateProcessInfo", name: "CreateProcessInfo", pkg: "", typ: $funcType([$String, $Int], [$error], false)}, {prop: "RemoveProcessInfo", name: "RemoveProcessInfo", pkg: "", typ: $funcType([$String], [$error], false)}, {prop: "WaitProcess", name: "WaitProcess", pkg: "", typ: $funcType([$String], [$error], false)}, {prop: "GetProcessInfo", name: "GetProcessInfo", pkg: "", typ: $funcType([$String], [ProcessInfo, $error], false)}, {prop: "ListScreenIDs", name: "ListScreenIDs", pkg: "", typ: $funcType([], [sliceType$4, $error], false)}, {prop: "getUserProcessDirPath", name: "getUserProcessDirPath", pkg: "github.com/supraio/client-daemon/pkg/render", typ: $funcType([], [$String], false)}];
194660
+ ptrType$16.methods = [{prop: "StartScreen", name: "StartScreen", pkg: "", typ: $funcType([$String, netpacket.Driver, $String, netstream.Driver, $String, $String, $String, $Bool], [$error], false)}, {prop: "openWindow", name: "openWindow", pkg: "github.com/supraio/client-daemon/pkg/render", typ: $funcType([$String, screenParams, sliceType$4], [js.Value, $error], false)}, {prop: "closeWindow", name: "closeWindow", pkg: "github.com/supraio/client-daemon/pkg/render", typ: $funcType([js.Value], [$error], false)}, {prop: "StopScreen", name: "StopScreen", pkg: "", typ: $funcType([$String], [$error], false)}, {prop: "pipeErrLog", name: "pipeErrLog", pkg: "github.com/supraio/client-daemon/pkg/render", typ: $funcType([$String, io.Reader], [$error], false)}, {prop: "ListScreens", name: "ListScreens", pkg: "", typ: $funcType([], [sliceType$4, $error], false)}];
194661
+ ptrType.methods = [{prop: "CreateProcessInfo", name: "CreateProcessInfo", pkg: "", typ: $funcType([$String, $Int], [$error], false)}, {prop: "RemoveProcessInfo", name: "RemoveProcessInfo", pkg: "", typ: $funcType([$String], [$error], false)}, {prop: "RemoveProcessInfoByPid", name: "RemoveProcessInfoByPid", pkg: "", typ: $funcType([$String, $Int], [$error], false)}, {prop: "WaitProcess", name: "WaitProcess", pkg: "", typ: $funcType([$String], [$error], false)}, {prop: "WaitProcessStopped", name: "WaitProcessStopped", pkg: "", typ: $funcType([$String, time.Duration], [$error], false)}, {prop: "GetProcessInfo", name: "GetProcessInfo", pkg: "", typ: $funcType([$String], [ProcessInfo, $error], false)}, {prop: "ListScreenIDs", name: "ListScreenIDs", pkg: "", typ: $funcType([], [sliceType$4, $error], false)}, {prop: "getUserProcessDirPath", name: "getUserProcessDirPath", pkg: "github.com/supraio/client-daemon/pkg/render", typ: $funcType([], [$String], false)}];
194662
+ Geometry.init("", [{prop: "X", name: "X", embedded: false, exported: true, typ: $Int, tag: "json:\"x\""}, {prop: "Y", name: "Y", embedded: false, exported: true, typ: $Int, tag: "json:\"y\""}, {prop: "Width", name: "Width", embedded: false, exported: true, typ: $Int, tag: "json:\"width\""}, {prop: "Height", name: "Height", embedded: false, exported: true, typ: $Int, tag: "json:\"height\""}]);
193725
194663
  screenParams.init("", [{prop: "ScreenID", name: "ScreenID", embedded: false, exported: true, typ: $String, tag: "url:\"screenID\""}, {prop: "ScreenDriver", name: "ScreenDriver", embedded: false, exported: true, typ: $String, tag: "url:\"screenDriver\""}, {prop: "ScreenHost", name: "ScreenHost", embedded: false, exported: true, typ: $String, tag: "url:\"screenHost\""}, {prop: "MetadataDriver", name: "MetadataDriver", embedded: false, exported: true, typ: $String, tag: "url:\"metadataDriver\""}, {prop: "MetadataHost", name: "MetadataHost", embedded: false, exported: true, typ: $String, tag: "url:\"metadataHost\""}, {prop: "ClientID", name: "ClientID", embedded: false, exported: true, typ: $String, tag: "url:\"clientID\""}, {prop: "ClientSecret", name: "ClientSecret", embedded: false, exported: true, typ: $String, tag: "url:\"clientSecret\""}, {prop: "Secure", name: "Secure", embedded: false, exported: true, typ: $Bool, tag: "url:\"secure\""}]);
193726
- ScreenManager.init("github.com/supraio/client-daemon/pkg/render", [{prop: "screenWindowCmd", name: "screenWindowCmd", embedded: false, exported: false, typ: $String, tag: ""}, {prop: "logDir", name: "logDir", embedded: false, exported: false, typ: $String, tag: ""}, {prop: "processInfoManager", name: "processInfoManager", embedded: false, exported: false, typ: ptrType, tag: ""}]);
194664
+ ScreenManager.init("github.com/supraio/client-daemon/pkg/render", [{prop: "screenWindowCmd", name: "screenWindowCmd", embedded: false, exported: false, typ: $String, tag: ""}, {prop: "logDir", name: "logDir", embedded: false, exported: false, typ: $String, tag: ""}, {prop: "processInfoManager", name: "processInfoManager", embedded: false, exported: false, typ: ptrType, tag: ""}, {prop: "processMu", name: "processMu", embedded: false, exported: false, typ: sync.Mutex, tag: ""}]);
193727
194665
  ProcessInfo.init("", [{prop: "ScreenID", name: "ScreenID", embedded: false, exported: true, typ: $String, tag: ""}, {prop: "Pid", name: "Pid", embedded: false, exported: true, typ: $Int, tag: ""}]);
193728
194666
  ProcessInfoManager.init("github.com/supraio/client-daemon/pkg/render", [{prop: "username", name: "username", embedded: false, exported: false, typ: $String, tag: ""}, {prop: "processDir", name: "processDir", embedded: false, exported: false, typ: $String, tag: ""}]);
193729
194667
  $init = function() {
@@ -193768,10 +194706,11 @@ $packages["github.com/supraio/client-daemon/pkg/render"] = (function() {
193768
194706
  $r = log.$init(); /* */ $s = 37; case 37: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193769
194707
  $r = os.$init(); /* */ $s = 38; case 38: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193770
194708
  $r = path.$init(); /* */ $s = 39; case 39: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193771
- $r = strings.$init(); /* */ $s = 40; case 40: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193772
- $r = sync.$init(); /* */ $s = 41; case 41: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193773
- $r = js.$init(); /* */ $s = 42; case 42: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193774
- $r = time.$init(); /* */ $s = 43; case 43: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
194709
+ $r = strconv.$init(); /* */ $s = 40; case 40: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
194710
+ $r = strings.$init(); /* */ $s = 41; case 41: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
194711
+ $r = sync.$init(); /* */ $s = 42; case 42: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
194712
+ $r = js.$init(); /* */ $s = 43; case 43: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
194713
+ $r = time.$init(); /* */ $s = 44; case 44: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193775
194714
  onScreenWindowStarted = $throwNilPointerError;
193776
194715
  openScreenWindows = $makeMap($String.keyFor, []);
193777
194716
  mutex = new sync.Mutex.ptr(0, 0);
@@ -193795,7 +194734,7 @@ $packages["main"] = (function() {
193795
194734
  sliceType = $sliceType($String);
193796
194735
  sliceType$1 = $sliceType($emptyInterface);
193797
194736
  main = function() {
193798
- var {_arg, _arg$1, _r, _r$1, _r$2, _r$3, _r$4, _tuple, _tuple$1, cfg, commandHandler, err, err$1, logFile, processInfoManager, screenManager, signalChannel, $s, $deferred, $r, $c} = $restore(this, {});
194737
+ var {_arg, _arg$1, _r, _r$1, _r$2, _r$3, _r$4, _r$5, _tuple, _tuple$1, cfg, commandHandler, err, err$1, logFile, processInfoManager, screenManager, signalChannel, $s, $deferred, $r, $c} = $restore(this, {});
193799
194738
  /* */ $s = $s || 0; var $err = null; try { s: while (true) { switch ($s) { case 0: $deferred = []; $curGoroutine.deferStack.push($deferred);
193800
194739
  commandHandler = [commandHandler];
193801
194740
  logFile = [logFile];
@@ -193863,10 +194802,11 @@ $packages["main"] = (function() {
193863
194802
  /* */ } return; } var $f = {$blk: $b, $c: true, $r, _r$5, err$2, $s};return $f;
193864
194803
  }; })(commandHandler, logFile), []]);
193865
194804
  $r = log.Println(new sliceType$1([new $String("Supra client-daemon started")])); /* */ $s = 21; case 21: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193866
- $r = helper.WaitOnStopSignal(signalChannel); /* */ $s = 22; case 22: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
194805
+ _r$5 = helper.WaitOnStopSignal(signalChannel); /* */ $s = 22; case 22: if($c) { $c = false; _r$5 = _r$5.$blk(); } if (_r$5 && _r$5.$blk !== undefined) { break s; }
194806
+ _r$5;
193867
194807
  $r = log.Println(new sliceType$1([new $String("Supra client-daemon is stopping")])); /* */ $s = 23; case 23: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193868
194808
  $s = -1; return;
193869
- /* */ } return; } } catch(err) { $err = err; $s = -1; } finally { $callDeferred($deferred, $err); if($curGoroutine.asleep) { var $f = {$blk: main, $c: true, $r, _arg, _arg$1, _r, _r$1, _r$2, _r$3, _r$4, _tuple, _tuple$1, cfg, commandHandler, err, err$1, logFile, processInfoManager, screenManager, signalChannel, $s, $deferred};return $f; } }
194809
+ /* */ } return; } } catch(err) { $err = err; $s = -1; } finally { $callDeferred($deferred, $err); if($curGoroutine.asleep) { var $f = {$blk: main, $c: true, $r, _arg, _arg$1, _r, _r$1, _r$2, _r$3, _r$4, _r$5, _tuple, _tuple$1, cfg, commandHandler, err, err$1, logFile, processInfoManager, screenManager, signalChannel, $s, $deferred};return $f; } }
193870
194810
  };
193871
194811
  $init = function() {
193872
194812
  $pkg.$init = function() {};