@supraio/client-daemon-js 1.0.0-mzupdateexptouch.448 → 1.0.0-tsfixstreamgeometrypanic.474

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, NewDomEvents, 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:
@@ -183368,9 +183632,14 @@ $packages["golang.org/x/exp/shiny/driver/util/dom"] = (function() {
183368
183632
  };
183369
183633
  $pkg.GetOrientation = GetOrientation;
183370
183634
  NewDomEvents = function() {
183371
- return new DomEvents.ptr(new $Chan($emptyInterface, 256), $makeSlice(sliceType$1, 0));
183635
+ return NewDomEventsForTarget($clone(js.Global(), js.Value));
183372
183636
  };
183373
183637
  $pkg.NewDomEvents = NewDomEvents;
183638
+ NewDomEventsForTarget = function(inputTarget) {
183639
+ var inputTarget;
183640
+ return new DomEvents.ptr(new $Chan($emptyInterface, 256), $clone(inputTarget, js.Value), $makeSlice(sliceType$1, 0));
183641
+ };
183642
+ $pkg.NewDomEventsForTarget = NewDomEventsForTarget;
183374
183643
  DomEvents.ptr.prototype.GetEventChan = function() {
183375
183644
  var d;
183376
183645
  d = this;
@@ -183467,7 +183736,7 @@ $packages["golang.org/x/exp/shiny/driver/util/dom"] = (function() {
183467
183736
  $s = -1; return $ifaceNil;
183468
183737
  /* */ } return; } var $f = {$blk: $b, $c: true, $r, _r, args, this$1, x, $s};return $f;
183469
183738
  }; })(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; }
183739
+ _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
183740
  _r;
183472
183741
  onClick[0] = $clone(js.FuncOf((function(d, onClick, onMove, onWheel) { return function $b(this$1, args) {
183473
183742
  var {_r$1, args, this$1, x, $s, $r, $c} = $restore(this, {this$1, args});
@@ -183478,9 +183747,9 @@ $packages["golang.org/x/exp/shiny/driver/util/dom"] = (function() {
183478
183747
  $s = -1; return $ifaceNil;
183479
183748
  /* */ } return; } var $f = {$blk: $b, $c: true, $r, _r$1, args, this$1, x, $s};return $f;
183480
183749
  }; })(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; }
183750
+ _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
183751
  _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; }
183752
+ _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
183753
  _r$2;
183485
183754
  onWheel[0] = $clone(js.FuncOf((function(d, onClick, onMove, onWheel) { return function $b(this$1, args) {
183486
183755
  var {args, this$1, x, $s, $r, $c} = $restore(this, {this$1, args});
@@ -183489,18 +183758,18 @@ $packages["golang.org/x/exp/shiny/driver/util/dom"] = (function() {
183489
183758
  $s = -1; return $ifaceNil;
183490
183759
  /* */ } return; } var $f = {$blk: $b, $c: true, $r, args, this$1, x, $s};return $f;
183491
183760
  }; })(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; }
183761
+ _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
183762
  _r$3;
183494
183763
  d[0].releases = $append(d[0].releases, (function(d, onClick, onMove, onWheel) { return function $b() {
183495
183764
  var {_r$4, _r$5, _r$6, _r$7, $s, $r, $c} = $restore(this, {});
183496
183765
  /* */ $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; }
183766
+ _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
183767
  _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; }
183768
+ _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
183769
  _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; }
183770
+ _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
183771
  _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; }
183772
+ _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
183773
  _r$7;
183505
183774
  $clone(onMove[0], js.Func).Release();
183506
183775
  $clone(onClick[0], js.Func).Release();
@@ -183718,12 +183987,12 @@ $packages["golang.org/x/exp/shiny/driver/util/dom"] = (function() {
183718
183987
  opts[0] = $clone(_r, js.Value);
183719
183988
  $clone(opts[0], js.Value).Set("passive", new $Bool(false));
183720
183989
  $clone(opts[0], js.Value).Set("capture", new $Bool(false));
183721
- _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; }
183990
+ _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; }
183722
183991
  _r$1;
183723
183992
  d[0].releases = $append(d[0].releases, (function(d, eventName, eventType, handler, opts) { return function $b() {
183724
183993
  var {_r$2, $s, $r, $c} = $restore(this, {});
183725
183994
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
183726
- _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; }
183995
+ _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; }
183727
183996
  _r$2;
183728
183997
  $clone(handler[0], js.Func).Release();
183729
183998
  $s = -1; return;
@@ -183765,7 +184034,7 @@ $packages["golang.org/x/exp/shiny/driver/util/dom"] = (function() {
183765
184034
  };
183766
184035
  DomEvents.prototype.bindTouchEvents = function() { return this.$val.bindTouchEvents(); };
183767
184036
  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)}];
183768
- 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: ""}]);
184037
+ 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: ""}]);
183769
184038
  $init = function() {
183770
184039
  $pkg.$init = function() {};
183771
184040
  /* */ 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:
@@ -185783,14 +186052,18 @@ $packages["golang.org/x/exp/shiny/screen"] = (function() {
185783
186052
  }
185784
186053
  this.BackBufferPreserved = BackBufferPreserved_;
185785
186054
  });
185786
- NewWindowOptions = $pkg.NewWindowOptions = $newType(0, $kindStruct, "screen.NewWindowOptions", true, "golang.org/x/exp/shiny/screen", true, function(Width_, Height_, Title_) {
186055
+ NewWindowOptions = $pkg.NewWindowOptions = $newType(0, $kindStruct, "screen.NewWindowOptions", true, "golang.org/x/exp/shiny/screen", true, function(X_, Y_, Width_, Height_, Title_) {
185787
186056
  this.$val = this;
185788
186057
  if (arguments.length === 0) {
186058
+ this.X = 0;
186059
+ this.Y = 0;
185789
186060
  this.Width = 0;
185790
186061
  this.Height = 0;
185791
186062
  this.Title = "";
185792
186063
  return;
185793
186064
  }
186065
+ this.X = X_;
186066
+ this.Y = Y_;
185794
186067
  this.Width = Width_;
185795
186068
  this.Height = Height_;
185796
186069
  this.Title = Title_;
@@ -185837,7 +186110,7 @@ $packages["golang.org/x/exp/shiny/screen"] = (function() {
185837
186110
  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)}]);
185838
186111
  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)}]);
185839
186112
  PublishResult.init("", [{prop: "BackBufferPreserved", name: "BackBufferPreserved", embedded: false, exported: true, typ: $Bool, tag: ""}]);
185840
- 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: ""}]);
186113
+ 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: ""}]);
185841
186114
  DrawOptions.init("", []);
185842
186115
  $init = function() {
185843
186116
  $pkg.$init = function() {};
@@ -185853,7 +186126,7 @@ $packages["golang.org/x/exp/shiny/screen"] = (function() {
185853
186126
  return $pkg;
185854
186127
  })();
185855
186128
  $packages["github.com/supraio/client-daemon/pkg/decoder/nacldecoder/nacldriver"] = (function() {
185856
- 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;
186129
+ 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;
185857
186130
  jsdecoder = $packages["github.com/supraio/client-daemon/pkg/decoder/nacldecoder/jsdecoder"];
185858
186131
  errs = $packages["github.com/supraio/client-daemon/pkg/errs"];
185859
186132
  jshelper = $packages["github.com/supraio/client-daemon/pkg/jshelper"];
@@ -185866,19 +186139,21 @@ $packages["github.com/supraio/client-daemon/pkg/decoder/nacldecoder/nacldriver"]
185866
186139
  log = $packages["log"];
185867
186140
  sync = $packages["sync"];
185868
186141
  js = $packages["syscall/js"];
185869
- windowImpl = $pkg.windowImpl = $newType(0, $kindStruct, "nacldriver.windowImpl", true, "github.com/supraio/client-daemon/pkg/decoder/nacldecoder/nacldriver", false, function(screen_, mutex_, domEvents_, released_) {
186142
+ 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_) {
185870
186143
  this.$val = this;
185871
186144
  if (arguments.length === 0) {
185872
186145
  this.screen = ptrType.nil;
185873
186146
  this.mutex = ptrType$1.nil;
185874
186147
  this.domEvents = ptrType$2.nil;
185875
186148
  this.released = false;
186149
+ this.renderDone = $chanNil;
185876
186150
  return;
185877
186151
  }
185878
186152
  this.screen = screen_;
185879
186153
  this.mutex = mutex_;
185880
186154
  this.domEvents = domEvents_;
185881
186155
  this.released = released_;
186156
+ this.renderDone = renderDone_;
185882
186157
  });
185883
186158
  screenImpl = $pkg.screenImpl = $newType(0, $kindStruct, "nacldriver.screenImpl", true, "github.com/supraio/client-daemon/pkg/decoder/nacldecoder/nacldriver", false, function(doc_) {
185884
186159
  this.$val = this;
@@ -185904,6 +186179,7 @@ $packages["github.com/supraio/client-daemon/pkg/decoder/nacldecoder/nacldriver"]
185904
186179
  ptrType = $ptrType(screenImpl);
185905
186180
  ptrType$1 = $ptrType(sync.Mutex);
185906
186181
  ptrType$2 = $ptrType(dom.DomEvents);
186182
+ structType = $structType("", []);
185907
186183
  ptrType$3 = $ptrType(js.Value);
185908
186184
  ptrType$4 = $ptrType(BufferImpl);
185909
186185
  funcType = $funcType([], [], false);
@@ -185912,6 +186188,7 @@ $packages["github.com/supraio/client-daemon/pkg/decoder/nacldecoder/nacldriver"]
185912
186188
  sliceType$1 = $sliceType($Uint8);
185913
186189
  ptrType$6 = $ptrType(screen.DrawOptions);
185914
186190
  ptrType$7 = $ptrType(windowImpl);
186191
+ chanType = $chanType(structType, false, false);
185915
186192
  ptrType$8 = $ptrType(screen.NewWindowOptions);
185916
186193
  ptrType$9 = $ptrType(image.YCbCr);
185917
186194
  newWindow = function(screen$1, opts) {
@@ -185925,12 +186202,31 @@ $packages["github.com/supraio/client-daemon/pkg/decoder/nacldecoder/nacldriver"]
185925
186202
  $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; }
185926
186203
  /* } */ case 2:
185927
186204
  domEvents = dom.NewDomEvents();
185928
- w = new windowImpl.ptr(screen$1, new sync.Mutex.ptr(0, 0), domEvents, false);
186205
+ w = new windowImpl.ptr(screen$1, new sync.Mutex.ptr(0, 0), domEvents, false, new $Chan(structType, 0));
185929
186206
  $r = domEvents.BindEvents(); /* */ $s = 6; case 6: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
185930
186207
  $s = -1; return w;
185931
186208
  /* */ } return; } var $f = {$blk: newWindow, $c: true, $r, _r, _r$1, domEvents, opts, screen$1, w, $s};return $f;
185932
186209
  };
185933
186210
  windowImpl.ptr.prototype.Release = function() {
186211
+ var {w, $s, $r, $c} = $restore(this, {});
186212
+ /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
186213
+ w = this;
186214
+ $r = w.mutex.Lock(); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
186215
+ /* */ if (w.released) { $s = 2; continue; }
186216
+ /* */ $s = 3; continue;
186217
+ /* if (w.released) { */ case 2:
186218
+ $r = w.mutex.Unlock(); /* */ $s = 4; case 4: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
186219
+ $s = -1; return;
186220
+ /* } */ case 3:
186221
+ w.released = true;
186222
+ $close(w.renderDone);
186223
+ $r = w.mutex.Unlock(); /* */ $s = 5; case 5: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
186224
+ $r = w.domEvents.Release(); /* */ $s = 6; case 6: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
186225
+ $s = -1; return;
186226
+ /* */ } return; } var $f = {$blk: windowImpl.ptr.prototype.Release, $c: true, $r, w, $s};return $f;
186227
+ };
186228
+ windowImpl.prototype.Release = function() { return this.$val.Release(); };
186229
+ windowImpl.ptr.prototype.CancelPendingUploads = function() {
185934
186230
  var {w, $s, $deferred, $r, $c} = $restore(this, {});
185935
186231
  /* */ $s = $s || 0; var $err = null; try { s: while (true) { switch ($s) { case 0: $deferred = []; $curGoroutine.deferStack.push($deferred);
185936
186232
  w = this;
@@ -185941,12 +186237,12 @@ $packages["github.com/supraio/client-daemon/pkg/decoder/nacldecoder/nacldriver"]
185941
186237
  /* if (w.released) { */ case 2:
185942
186238
  $s = 4; case 4: return;
185943
186239
  /* } */ case 3:
185944
- $r = w.domEvents.Release(); /* */ $s = 5; case 5: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
185945
- w.released = true;
186240
+ $close(w.renderDone);
186241
+ w.renderDone = new $Chan(structType, 0);
185946
186242
  $s = -1; return;
185947
- /* */ } 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; } }
186243
+ /* */ } 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; } }
185948
186244
  };
185949
- windowImpl.prototype.Release = function() { return this.$val.Release(); };
186245
+ windowImpl.prototype.CancelPendingUploads = function() { return this.$val.CancelPendingUploads(); };
185950
186246
  windowImpl.ptr.prototype.Publish = function() {
185951
186247
  var w;
185952
186248
  w = this;
@@ -185957,21 +186253,55 @@ $packages["github.com/supraio/client-daemon/pkg/decoder/nacldecoder/nacldriver"]
185957
186253
  };
185958
186254
  windowImpl.prototype.Publish = function() { return this.$val.Publish(); };
185959
186255
  windowImpl.ptr.prototype.Send = function(event) {
185960
- var event, w;
186256
+ var {event, w, $s, $deferred, $r, $c} = $restore(this, {event});
186257
+ /* */ $s = $s || 0; var $err = null; try { s: while (true) { switch ($s) { case 0: $deferred = []; $curGoroutine.deferStack.push($deferred);
185961
186258
  w = this;
185962
- if (w.released) {
185963
- return;
185964
- }
185965
- $panic(new $String("Not implemented"));
186259
+ $r = w.mutex.Lock(); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
186260
+ $deferred.push([$methodVal(w.mutex, "Unlock"), []]);
186261
+ /* */ if (w.released) { $s = 2; continue; }
186262
+ /* */ $s = 3; continue;
186263
+ /* if (w.released) { */ case 2:
186264
+ $s = 4; case 4: return;
186265
+ /* } */ case 3:
186266
+ $r = $send(w.domEvents.GetEventChan(), event); /* */ $s = 5; case 5: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
186267
+ $s = -1; return;
186268
+ /* */ } 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; } }
185966
186269
  };
185967
186270
  windowImpl.prototype.Send = function(event) { return this.$val.Send(event); };
186271
+ windowImpl.ptr.prototype.SendNonBlocking = function(event) {
186272
+ var {$24r, $24r$1, $24r$2, _selection, event, w, $s, $deferred, $r, $c} = $restore(this, {event});
186273
+ /* */ $s = $s || 0; var $err = null; try { s: while (true) { switch ($s) { case 0: $deferred = []; $curGoroutine.deferStack.push($deferred);
186274
+ w = this;
186275
+ $r = w.mutex.Lock(); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
186276
+ $deferred.push([$methodVal(w.mutex, "Unlock"), []]);
186277
+ /* */ if (w.released) { $s = 2; continue; }
186278
+ /* */ $s = 3; continue;
186279
+ /* if (w.released) { */ case 2:
186280
+ $24r = false;
186281
+ $s = 4; case 4: return $24r;
186282
+ /* } */ case 3:
186283
+ _selection = $select([[w.domEvents.GetEventChan(), event], []]);
186284
+ /* */ if (_selection[0] === 0) { $s = 5; continue; }
186285
+ /* */ if (_selection[0] === 1) { $s = 6; continue; }
186286
+ /* */ $s = 7; continue;
186287
+ /* if (_selection[0] === 0) { */ case 5:
186288
+ $24r$1 = true;
186289
+ $s = 8; case 8: return $24r$1;
186290
+ /* } else if (_selection[0] === 1) { */ case 6:
186291
+ $24r$2 = false;
186292
+ $s = 9; case 9: return $24r$2;
186293
+ /* } */ case 7:
186294
+ $s = -1; return false;
186295
+ /* */ } 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; } }
186296
+ };
186297
+ windowImpl.prototype.SendNonBlocking = function(event) { return this.$val.SendNonBlocking(event); };
185968
186298
  windowImpl.ptr.prototype.SendFirst = function(event) {
185969
- var event, w;
186299
+ var {event, w, $s, $r, $c} = $restore(this, {event});
186300
+ /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
185970
186301
  w = this;
185971
- if (w.released) {
185972
- return;
185973
- }
185974
- $panic(new $String("Not implemented"));
186302
+ $r = w.Send(event); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
186303
+ $s = -1; return;
186304
+ /* */ } return; } var $f = {$blk: windowImpl.ptr.prototype.SendFirst, $c: true, $r, event, w, $s};return $f;
185975
186305
  };
185976
186306
  windowImpl.prototype.SendFirst = function(event) { return this.$val.SendFirst(event); };
185977
186307
  windowImpl.ptr.prototype.NextEvent = function() {
@@ -185998,12 +186328,9 @@ $packages["github.com/supraio/client-daemon/pkg/decoder/nacldecoder/nacldriver"]
185998
186328
  };
185999
186329
  windowImpl.prototype.Upload = function(dp, src, sr) { return this.$val.Upload(dp, src, sr); };
186000
186330
  windowImpl.ptr.prototype.UploadYCbCr = function(dp, src, sr) {
186001
- 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});
186331
+ 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});
186002
186332
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
186003
186333
  w = this;
186004
- if (w.released) {
186005
- $s = -1; return;
186006
- }
186007
186334
  /* */ if (jsdecoder.ShouldResetOnNextDecode()) { $s = 1; continue; }
186008
186335
  /* */ $s = 2; continue;
186009
186336
  /* if (jsdecoder.ShouldResetOnNextDecode()) { */ case 1:
@@ -186022,29 +186349,40 @@ $packages["github.com/supraio/client-daemon/pkg/decoder/nacldecoder/nacldriver"]
186022
186349
  $s = -1; return;
186023
186350
  }
186024
186351
  $r = w.mutex.Lock(); /* */ $s = 7; case 7: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
186025
- _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; }
186352
+ /* */ if (w.released) { $s = 8; continue; }
186353
+ /* */ $s = 9; continue;
186354
+ /* if (w.released) { */ case 8:
186355
+ $r = w.mutex.Unlock(); /* */ $s = 10; case 10: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
186356
+ $s = -1; return;
186357
+ /* } */ case 9:
186358
+ _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; }
186026
186359
  renderPromise = $clone(_r, js.Value);
186027
- _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; }
186360
+ renderDone = w.renderDone;
186361
+ $r = w.mutex.Unlock(); /* */ $s = 12; case 12: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
186362
+ _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; }
186028
186363
  _tuple = _r$1;
186029
186364
  renderResult = _tuple[0];
186030
186365
  err = _tuple[1];
186031
- $r = w.mutex.Unlock(); /* */ $s = 10; case 10: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
186032
- /* */ if (!(err === ptrType$3.nil)) { $s = 11; continue; }
186033
- /* */ $s = 12; continue;
186034
- /* if (!(err === ptrType$3.nil)) { */ case 11:
186035
- _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; }
186366
+ canceled = _tuple[2];
186367
+ if (canceled) {
186368
+ $s = -1; return;
186369
+ }
186370
+ /* */ if (!(err === ptrType$3.nil)) { $s = 14; continue; }
186371
+ /* */ $s = 15; continue;
186372
+ /* if (!(err === ptrType$3.nil)) { */ case 14:
186373
+ _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; }
186036
186374
  _arg = _r$2;
186037
- $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; }
186375
+ $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; }
186038
186376
  $s = -1; return;
186039
- /* } */ case 12:
186040
- /* */ if (!(($clone(renderResult, js.Value).Float() === 0))) { $s = 15; continue; }
186041
- /* */ $s = 16; continue;
186042
- /* if (!(($clone(renderResult, js.Value).Float() === 0))) { */ case 15:
186043
- $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; }
186377
+ /* } */ case 15:
186378
+ /* */ if (!(($clone(renderResult, js.Value).Float() === 0))) { $s = 18; continue; }
186379
+ /* */ $s = 19; continue;
186380
+ /* if (!(($clone(renderResult, js.Value).Float() === 0))) { */ case 18:
186381
+ $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; }
186044
186382
  $s = -1; return;
186045
- /* } */ case 16:
186383
+ /* } */ case 19:
186046
186384
  $s = -1; return;
186047
- /* */ } 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;
186385
+ /* */ } 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;
186048
186386
  };
186049
186387
  windowImpl.prototype.UploadYCbCr = function(dp, src, sr) { return this.$val.UploadYCbCr(dp, src, sr); };
186050
186388
  windowImpl.ptr.prototype.Fill = function(dr, src, op) {
@@ -186178,10 +186516,10 @@ $packages["github.com/supraio/client-daemon/pkg/decoder/nacldecoder/nacldriver"]
186178
186516
  b = this;
186179
186517
  };
186180
186518
  BufferImpl.prototype.Release = function() { return this.$val.Release(); };
186181
- 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)}];
186519
+ 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)}];
186182
186520
  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)}];
186183
186521
  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)}];
186184
- 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: ""}]);
186522
+ 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: ""}]);
186185
186523
  screenImpl.init("github.com/supraio/client-daemon/pkg/decoder/nacldecoder/nacldriver", [{prop: "doc", name: "doc", embedded: false, exported: false, typ: js.Value, tag: ""}]);
186186
186524
  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: ""}]);
186187
186525
  $init = function() {
@@ -191069,7 +191407,7 @@ $packages["golang.org/x/exp/shiny/driver/internal/errscreen"] = (function() {
191069
191407
  return $pkg;
191070
191408
  })();
191071
191409
  $packages["golang.org/x/exp/shiny/driver/canvasdriver"] = (function() {
191072
- 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;
191410
+ 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, ptrType$4, sliceType$1, ptrType$5, ptrType$6, ptrType$7, ptrType$8, ptrType$9, ptrType$10, newWindow, newScreenImpl, main, newBuffer;
191073
191411
  fmt = $packages["fmt"];
191074
191412
  errscreen = $packages["golang.org/x/exp/shiny/driver/internal/errscreen"];
191075
191413
  dom = $packages["golang.org/x/exp/shiny/driver/util/dom"];
@@ -191083,12 +191421,12 @@ $packages["golang.org/x/exp/shiny/driver/canvasdriver"] = (function() {
191083
191421
  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_) {
191084
191422
  this.$val = this;
191085
191423
  if (arguments.length === 0) {
191086
- this.screen = ptrType.nil;
191087
- this.mutex = ptrType$1.nil;
191424
+ this.screen = ptrType$1.nil;
191425
+ this.mutex = ptrType$2.nil;
191088
191426
  this.canvasEl = new js.Value.ptr(null, false, arrayType.zero());
191089
191427
  this.ctx2d = new js.Value.ptr(null, false, arrayType.zero());
191090
191428
  this.released = false;
191091
- this.domEvents = ptrType$2.nil;
191429
+ this.domEvents = ptrType$3.nil;
191092
191430
  this.resizeCallback = new js.Func.ptr(new js.Value.ptr(null, false, arrayType.zero()));
191093
191431
  return;
191094
191432
  }
@@ -191111,7 +191449,7 @@ $packages["golang.org/x/exp/shiny/driver/canvasdriver"] = (function() {
191111
191449
  YCbCrJS = $pkg.YCbCrJS = $newType(0, $kindStruct, "canvasdriver.YCbCrJS", true, "golang.org/x/exp/shiny/driver/canvasdriver", true, function(CanvasImageSource_) {
191112
191450
  this.$val = this;
191113
191451
  if (arguments.length === 0) {
191114
- this.CanvasImageSource = ptrType$5.nil;
191452
+ this.CanvasImageSource = ptrType$6.nil;
191115
191453
  return;
191116
191454
  }
191117
191455
  this.CanvasImageSource = CanvasImageSource_;
@@ -191119,13 +191457,13 @@ $packages["golang.org/x/exp/shiny/driver/canvasdriver"] = (function() {
191119
191457
  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_) {
191120
191458
  this.$val = this;
191121
191459
  if (arguments.length === 0) {
191122
- this.screen = ptrType.nil;
191460
+ this.screen = ptrType$1.nil;
191123
191461
  this.size = new image.Point.ptr(0, 0);
191124
- this.mutex = ptrType$1.nil;
191462
+ this.mutex = ptrType$2.nil;
191125
191463
  this.released = false;
191126
191464
  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)));
191127
191465
  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)));
191128
- this.ycbcrJS = ptrType$4.nil;
191466
+ this.ycbcrJS = ptrType$5.nil;
191129
191467
  return;
191130
191468
  }
191131
191469
  this.screen = screen_;
@@ -191137,81 +191475,99 @@ $packages["golang.org/x/exp/shiny/driver/canvasdriver"] = (function() {
191137
191475
  this.ycbcrJS = ycbcrJS_;
191138
191476
  });
191139
191477
  sliceType = $sliceType($emptyInterface);
191140
- ptrType = $ptrType(screenImpl);
191141
- ptrType$1 = $ptrType(sync.Mutex);
191478
+ ptrType = $ptrType(screen.NewWindowOptions);
191479
+ ptrType$1 = $ptrType(screenImpl);
191480
+ ptrType$2 = $ptrType(sync.Mutex);
191142
191481
  funcType = $funcType([], [], false);
191143
191482
  arrayType = $arrayType(funcType, 0);
191144
- ptrType$2 = $ptrType(dom.DomEvents);
191145
- ptrType$3 = $ptrType(BufferImpl);
191483
+ ptrType$3 = $ptrType(dom.DomEvents);
191484
+ ptrType$4 = $ptrType(BufferImpl);
191146
191485
  sliceType$1 = $sliceType($Uint8);
191147
- ptrType$4 = $ptrType(YCbCrJS);
191148
- ptrType$5 = $ptrType(js.Value);
191149
- ptrType$6 = $ptrType(screen.DrawOptions);
191150
- ptrType$7 = $ptrType(windowImpl);
191151
- ptrType$8 = $ptrType(screen.NewWindowOptions);
191486
+ ptrType$5 = $ptrType(YCbCrJS);
191487
+ ptrType$6 = $ptrType(js.Value);
191488
+ ptrType$7 = $ptrType(screen.DrawOptions);
191489
+ ptrType$8 = $ptrType(windowImpl);
191152
191490
  ptrType$9 = $ptrType(image.RGBA);
191153
191491
  ptrType$10 = $ptrType(image.YCbCr);
191154
191492
  newWindow = function(screen$1, opts) {
191155
- 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});
191493
+ 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});
191156
191494
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
191157
191495
  adaptCanvas = [adaptCanvas];
191158
191496
  canvasEl = [canvasEl];
191497
+ hasGeometry = [hasGeometry];
191159
191498
  _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; }
191160
191499
  canvasEl[0] = $clone(_r, js.Value);
191161
191500
  _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; }
191162
191501
  _r$1;
191163
- adaptCanvas[0] = (function(adaptCanvas, canvasEl) { return function() {
191164
- var height, scale, width;
191165
- scale = dom.GetBrowserZoomRatio();
191166
- width = (((dom.GetDocWidth()) / scale >> 0));
191502
+ hasGeometry[0] = !(opts === ptrType.nil) && opts.Width > 0 && opts.Height > 0;
191503
+ /* */ if (hasGeometry[0]) { $s = 3; continue; }
191504
+ /* */ $s = 4; continue;
191505
+ /* if (hasGeometry[0]) { */ case 3:
191506
+ style = $clone($clone(canvasEl[0], js.Value).Get("style"), js.Value);
191507
+ $clone(style, js.Value).Set("position", new $String("absolute"));
191508
+ _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; }
191509
+ _arg = new $String(_r$2);
191510
+ $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; }
191511
+ _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; }
191512
+ _arg$1 = new $String(_r$3);
191513
+ $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; }
191514
+ $clone(canvasEl[0], js.Value).Set("width", new $Int(opts.Width));
191515
+ $clone(canvasEl[0], js.Value).Set("height", new $Int(opts.Height));
191516
+ /* } */ case 4:
191517
+ adaptCanvas[0] = (function(adaptCanvas, canvasEl, hasGeometry) { return function() {
191518
+ var height, width;
191519
+ if (hasGeometry[0]) {
191520
+ return;
191521
+ }
191522
+ width = dom.GetDocWidth();
191167
191523
  if (!(($clone($clone(canvasEl[0], js.Value).Get("width"), js.Value).Int() === width))) {
191168
191524
  $clone(canvasEl[0], js.Value).Set("width", new $Int(width));
191169
191525
  }
191170
- height = (((dom.GetDocHeight()) / scale >> 0));
191526
+ height = dom.GetDocHeight();
191171
191527
  if (!(($clone($clone(canvasEl[0], js.Value).Get("height"), js.Value).Int() === height))) {
191172
191528
  $clone(canvasEl[0], js.Value).Set("height", new $Int(height));
191173
191529
  }
191174
- }; })(adaptCanvas, canvasEl);
191175
- $r = adaptCanvas[0](); /* */ $s = 3; case 3: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
191176
- resizeCallback = $clone(js.FuncOf((function(adaptCanvas, canvasEl) { return function $b(this$1, args) {
191530
+ }; })(adaptCanvas, canvasEl, hasGeometry);
191531
+ $r = adaptCanvas[0](); /* */ $s = 9; case 9: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
191532
+ resizeCallback = $clone(js.FuncOf((function(adaptCanvas, canvasEl, hasGeometry) { return function $b(this$1, args) {
191177
191533
  var {args, this$1, $s, $r, $c} = $restore(this, {this$1, args});
191178
191534
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
191179
191535
  $r = adaptCanvas[0](); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
191180
191536
  $s = -1; return $ifaceNil;
191181
191537
  /* */ } return; } var $f = {$blk: $b, $c: true, $r, args, this$1, $s};return $f;
191182
- }; })(adaptCanvas, canvasEl)), js.Func);
191183
- _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; }
191184
- _r$2;
191185
- /* */ if (!((opts.Width === 0))) { $s = 5; continue; }
191186
- /* */ $s = 6; continue;
191187
- /* if (!((opts.Width === 0))) { */ case 5:
191188
- $r = dom.SetWindowWidth(opts.Width); /* */ $s = 7; case 7: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
191189
- /* } */ case 6:
191190
- /* */ if (!((opts.Height === 0))) { $s = 8; continue; }
191191
- /* */ $s = 9; continue;
191192
- /* if (!((opts.Height === 0))) { */ case 8:
191193
- $r = dom.SetWindowHeight(opts.Height); /* */ $s = 10; case 10: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
191194
- /* } */ case 9:
191195
- /* */ if (!(opts.Title === "")) { $s = 11; continue; }
191538
+ }; })(adaptCanvas, canvasEl, hasGeometry)), js.Func);
191539
+ _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; }
191540
+ _r$4;
191541
+ /* */ if (!((opts.Width === 0))) { $s = 11; continue; }
191196
191542
  /* */ $s = 12; continue;
191197
- /* if (!(opts.Title === "")) { */ case 11:
191198
- _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; }
191199
- _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; }
191200
- $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; }
191543
+ /* if (!((opts.Width === 0))) { */ case 11:
191544
+ $r = dom.SetWindowWidth(opts.Width); /* */ $s = 13; case 13: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
191201
191545
  /* } */ case 12:
191202
- _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; }
191203
- ctx2d = $clone(_r$5, js.Value);
191204
- /* */ if ($clone(ctx2d, js.Value).IsUndefined() || $clone(ctx2d, js.Value).IsNull()) { $s = 17; continue; }
191546
+ /* */ if (!((opts.Height === 0))) { $s = 14; continue; }
191547
+ /* */ $s = 15; continue;
191548
+ /* if (!((opts.Height === 0))) { */ case 14:
191549
+ $r = dom.SetWindowHeight(opts.Height); /* */ $s = 16; case 16: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
191550
+ /* } */ case 15:
191551
+ /* */ if (!(opts.Title === "")) { $s = 17; continue; }
191205
191552
  /* */ $s = 18; continue;
191206
- /* if ($clone(ctx2d, js.Value).IsUndefined() || $clone(ctx2d, js.Value).IsNull()) { */ case 17:
191207
- _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; }
191208
- $panic(_r$6);
191553
+ /* if (!(opts.Title === "")) { */ case 17:
191554
+ _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; }
191555
+ _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; }
191556
+ $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; }
191209
191557
  /* } */ case 18:
191210
- domEvents = dom.NewDomEvents();
191211
- w = new windowImpl.ptr(screen$1, ptrType$1.nil, $clone(canvasEl[0], js.Value), $clone(ctx2d, js.Value), false, domEvents, $clone(resizeCallback, js.Func));
191212
- $r = domEvents.BindEvents(); /* */ $s = 20; case 20: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
191558
+ _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; }
191559
+ ctx2d = $clone(_r$7, js.Value);
191560
+ /* */ if ($clone(ctx2d, js.Value).IsUndefined() || $clone(ctx2d, js.Value).IsNull()) { $s = 23; continue; }
191561
+ /* */ $s = 24; continue;
191562
+ /* if ($clone(ctx2d, js.Value).IsUndefined() || $clone(ctx2d, js.Value).IsNull()) { */ case 23:
191563
+ _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; }
191564
+ $panic(_r$8);
191565
+ /* } */ case 24:
191566
+ domEvents = dom.NewDomEventsForTarget($clone(canvasEl[0], js.Value));
191567
+ 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));
191568
+ $r = domEvents.BindEvents(); /* */ $s = 26; case 26: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
191213
191569
  $s = -1; return w;
191214
- /* */ } 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;
191570
+ /* */ } 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;
191215
191571
  };
191216
191572
  windowImpl.ptr.prototype.Release = function() {
191217
191573
  var {_r, _r$1, w, x, $s, $deferred, $r, $c} = $restore(this, {});
@@ -191293,9 +191649,9 @@ $packages["golang.org/x/exp/shiny/driver/canvasdriver"] = (function() {
191293
191649
  $s = -1; return;
191294
191650
  }
191295
191651
  _ref = src;
191296
- /* */ if ($assertType(_ref, ptrType$3, true)[1]) { $s = 1; continue; }
191652
+ /* */ if ($assertType(_ref, ptrType$4, true)[1]) { $s = 1; continue; }
191297
191653
  /* */ $s = 2; continue;
191298
- /* if ($assertType(_ref, ptrType$3, true)[1]) { */ case 1:
191654
+ /* if ($assertType(_ref, ptrType$4, true)[1]) { */ case 1:
191299
191655
  jsSrc = _ref.$val;
191300
191656
  _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; }
191301
191657
  _r;
@@ -191403,7 +191759,7 @@ $packages["golang.org/x/exp/shiny/driver/canvasdriver"] = (function() {
191403
191759
  newBuffer = function(screen$1, size) {
191404
191760
  var _q, _q$1, _q$2, b, rect, screen$1, size;
191405
191761
  rect = new image.Rectangle.ptr(new image.Point.ptr(0, 0), $clone(size, image.Point));
191406
- 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);
191762
+ 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);
191407
191763
  return b;
191408
191764
  };
191409
191765
  BufferImpl.ptr.prototype.Size = function() {
@@ -191433,8 +191789,8 @@ $packages["golang.org/x/exp/shiny/driver/canvasdriver"] = (function() {
191433
191789
  BufferImpl.ptr.prototype.YCbCrJS = function() {
191434
191790
  var b;
191435
191791
  b = this;
191436
- if (b.ycbcrJS === ptrType$4.nil) {
191437
- b.ycbcrJS = new YCbCrJS.ptr(ptrType$5.nil);
191792
+ if (b.ycbcrJS === ptrType$5.nil) {
191793
+ b.ycbcrJS = new YCbCrJS.ptr(ptrType$6.nil);
191438
191794
  }
191439
191795
  return b.ycbcrJS;
191440
191796
  };
@@ -191455,13 +191811,13 @@ $packages["golang.org/x/exp/shiny/driver/canvasdriver"] = (function() {
191455
191811
  /* */ } 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; } }
191456
191812
  };
191457
191813
  BufferImpl.prototype.Release = function() { return this.$val.Release(); };
191458
- 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)}];
191459
- 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)}];
191460
- 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)}];
191461
- 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: ""}]);
191814
+ 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: "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$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)}];
191815
+ 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)}];
191816
+ 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)}];
191817
+ 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: ""}]);
191462
191818
  screenImpl.init("golang.org/x/exp/shiny/driver/canvasdriver", [{prop: "doc", name: "doc", embedded: false, exported: false, typ: js.Value, tag: ""}]);
191463
- YCbCrJS.init("", [{prop: "CanvasImageSource", name: "CanvasImageSource", embedded: false, exported: true, typ: ptrType$5, tag: ""}]);
191464
- 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: ""}]);
191819
+ YCbCrJS.init("", [{prop: "CanvasImageSource", name: "CanvasImageSource", embedded: false, exported: true, typ: ptrType$6, tag: ""}]);
191820
+ 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: ""}]);
191465
191821
  $init = function() {
191466
191822
  $pkg.$init = function() {};
191467
191823
  /* */ 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:
@@ -191677,7 +192033,7 @@ $packages["golang.org/x/exp/shiny/imageutil"] = (function() {
191677
192033
  return $pkg;
191678
192034
  })();
191679
192035
  $packages["golang.org/x/exp/shiny/driver/webgldriver"] = (function() {
191680
- 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;
192036
+ 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, ptrType$8, sliceType$3, ptrType$9, ptrType$10, ptrType$11, ptrType$12, ptrType$13, ptrType$14, texCoordsVertices, elementsIndices, newWindow, main, newScreenImpl, newBuffer;
191681
192037
  fmt = $packages["fmt"];
191682
192038
  webgl = $packages["github.com/nuberu/webgl"];
191683
192039
  types = $packages["github.com/nuberu/webgl/types"];
@@ -191694,19 +192050,19 @@ $packages["golang.org/x/exp/shiny/driver/webgldriver"] = (function() {
191694
192050
  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_) {
191695
192051
  this.$val = this;
191696
192052
  if (arguments.length === 0) {
191697
- this.screen = ptrType.nil;
191698
- this.mutex = ptrType$1.nil;
192053
+ this.screen = ptrType$1.nil;
192054
+ this.mutex = ptrType$2.nil;
191699
192055
  this.canvasEl = new js.Value.ptr(null, false, arrayType.zero());
191700
- this.gl = ptrType$2.nil;
191701
- this.programRGBA = ptrType$3.nil;
191702
- this.imageTexRGBA = ptrType$4.nil;
191703
- this.programYUV420 = ptrType$3.nil;
191704
- this.imageTexY = ptrType$4.nil;
191705
- this.imageTexU = ptrType$4.nil;
191706
- this.imageTexV = ptrType$4.nil;
191707
- this.vertexArray = ptrType$5.nil;
192056
+ this.gl = ptrType$3.nil;
192057
+ this.programRGBA = ptrType$4.nil;
192058
+ this.imageTexRGBA = ptrType$5.nil;
192059
+ this.programYUV420 = ptrType$4.nil;
192060
+ this.imageTexY = ptrType$5.nil;
192061
+ this.imageTexU = ptrType$5.nil;
192062
+ this.imageTexV = ptrType$5.nil;
192063
+ this.vertexArray = ptrType$6.nil;
191708
192064
  this.released = false;
191709
- this.domEvents = ptrType$6.nil;
192065
+ this.domEvents = ptrType$7.nil;
191710
192066
  this.width = 0;
191711
192067
  this.height = 0;
191712
192068
  return;
@@ -191772,13 +192128,13 @@ $packages["golang.org/x/exp/shiny/driver/webgldriver"] = (function() {
191772
192128
  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_) {
191773
192129
  this.$val = this;
191774
192130
  if (arguments.length === 0) {
191775
- this.screen = ptrType.nil;
192131
+ this.screen = ptrType$1.nil;
191776
192132
  this.size = new image.Point.ptr(0, 0);
191777
- this.mutex = ptrType$1.nil;
192133
+ this.mutex = ptrType$2.nil;
191778
192134
  this.released = false;
191779
192135
  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)));
191780
192136
  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)));
191781
- this.ycbcrJS = ptrType$8.nil;
192137
+ this.ycbcrJS = ptrType$9.nil;
191782
192138
  return;
191783
192139
  }
191784
192140
  this.screen = screen_;
@@ -191792,62 +192148,80 @@ $packages["golang.org/x/exp/shiny/driver/webgldriver"] = (function() {
191792
192148
  sliceType = $sliceType($Float32);
191793
192149
  sliceType$1 = $sliceType($Uint16);
191794
192150
  sliceType$2 = $sliceType($emptyInterface);
191795
- ptrType = $ptrType(screenImpl);
191796
- ptrType$1 = $ptrType(sync.Mutex);
192151
+ ptrType = $ptrType(screen.NewWindowOptions);
192152
+ ptrType$1 = $ptrType(screenImpl);
192153
+ ptrType$2 = $ptrType(sync.Mutex);
191797
192154
  funcType = $funcType([], [], false);
191798
192155
  arrayType = $arrayType(funcType, 0);
191799
- ptrType$2 = $ptrType(webgl.RenderingContext);
191800
- ptrType$3 = $ptrType(types.Program);
191801
- ptrType$4 = $ptrType(types.Texture);
191802
- ptrType$5 = $ptrType(types.VertexArray);
191803
- ptrType$6 = $ptrType(dom.DomEvents);
191804
- ptrType$7 = $ptrType(BufferImpl);
192156
+ ptrType$3 = $ptrType(webgl.RenderingContext);
192157
+ ptrType$4 = $ptrType(types.Program);
192158
+ ptrType$5 = $ptrType(types.Texture);
192159
+ ptrType$6 = $ptrType(types.VertexArray);
192160
+ ptrType$7 = $ptrType(dom.DomEvents);
192161
+ ptrType$8 = $ptrType(BufferImpl);
191805
192162
  sliceType$3 = $sliceType($Uint8);
191806
- ptrType$8 = $ptrType(YCbCrJS);
191807
- ptrType$9 = $ptrType(screen.DrawOptions);
191808
- ptrType$10 = $ptrType(windowImpl);
191809
- ptrType$11 = $ptrType(screen.NewWindowOptions);
192163
+ ptrType$9 = $ptrType(YCbCrJS);
192164
+ ptrType$10 = $ptrType(screen.DrawOptions);
192165
+ ptrType$11 = $ptrType(windowImpl);
191810
192166
  ptrType$12 = $ptrType(ArrayBufferSlice);
191811
192167
  ptrType$13 = $ptrType(image.RGBA);
191812
192168
  ptrType$14 = $ptrType(image.YCbCr);
191813
192169
  newWindow = function(screen$1, opts) {
191814
- 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});
192170
+ 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});
191815
192171
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
191816
192172
  _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; }
191817
192173
  canvasEl = $clone(_r, js.Value);
191818
192174
  _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; }
191819
192175
  _r$1;
191820
- _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; }
191821
- _tuple = _r$2;
192176
+ /* */ if (!(opts === ptrType.nil) && opts.Width > 0 && opts.Height > 0) { $s = 3; continue; }
192177
+ /* */ $s = 4; continue;
192178
+ /* if (!(opts === ptrType.nil) && opts.Width > 0 && opts.Height > 0) { */ case 3:
192179
+ style = $clone($clone(canvasEl, js.Value).Get("style"), js.Value);
192180
+ $clone(style, js.Value).Set("position", new $String("absolute"));
192181
+ _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; }
192182
+ _arg = new $String(_r$2);
192183
+ $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; }
192184
+ _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; }
192185
+ _arg$1 = new $String(_r$3);
192186
+ $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; }
192187
+ _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; }
192188
+ _arg$2 = new $String(_r$4);
192189
+ $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; }
192190
+ _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; }
192191
+ _arg$3 = new $String(_r$5);
192192
+ $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; }
192193
+ /* } */ case 4:
192194
+ _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; }
192195
+ _tuple = _r$6;
191822
192196
  gl = _tuple[0];
191823
192197
  err = _tuple[1];
191824
192198
  if (!($interfaceIsEqual(err, $ifaceNil))) {
191825
192199
  $panic(err);
191826
192200
  }
191827
- domEvents = dom.NewDomEvents();
191828
- 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);
191829
- /* */ if (!((opts.Width === 0))) { $s = 4; continue; }
191830
- /* */ $s = 5; continue;
191831
- /* if (!((opts.Width === 0))) { */ case 4:
191832
- $r = dom.SetWindowWidth(opts.Width); /* */ $s = 6; case 6: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
191833
- /* } */ case 5:
191834
- /* */ if (!((opts.Height === 0))) { $s = 7; continue; }
191835
- /* */ $s = 8; continue;
191836
- /* if (!((opts.Height === 0))) { */ case 7:
191837
- $r = dom.SetWindowHeight(opts.Height); /* */ $s = 9; case 9: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
191838
- /* } */ case 8:
191839
- /* */ if (!(opts.Title === "")) { $s = 10; continue; }
191840
- /* */ $s = 11; continue;
191841
- /* if (!(opts.Title === "")) { */ case 10:
191842
- _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; }
191843
- _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; }
191844
- $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; }
191845
- /* } */ case 11:
191846
- _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; }
191847
- w.vertexArray = _r$5;
191848
- $r = domEvents.BindEvents(); /* */ $s = 16; case 16: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
192201
+ domEvents = dom.NewDomEventsForTarget($clone(canvasEl, js.Value));
192202
+ 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, 0, 0);
192203
+ /* */ if (!((opts.Width === 0))) { $s = 14; continue; }
192204
+ /* */ $s = 15; continue;
192205
+ /* if (!((opts.Width === 0))) { */ case 14:
192206
+ $r = dom.SetWindowWidth(opts.Width); /* */ $s = 16; case 16: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
192207
+ /* } */ case 15:
192208
+ /* */ if (!((opts.Height === 0))) { $s = 17; continue; }
192209
+ /* */ $s = 18; continue;
192210
+ /* if (!((opts.Height === 0))) { */ case 17:
192211
+ $r = dom.SetWindowHeight(opts.Height); /* */ $s = 19; case 19: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
192212
+ /* } */ case 18:
192213
+ /* */ if (!(opts.Title === "")) { $s = 20; continue; }
192214
+ /* */ $s = 21; continue;
192215
+ /* if (!(opts.Title === "")) { */ case 20:
192216
+ _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; }
192217
+ _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; }
192218
+ $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; }
192219
+ /* } */ case 21:
192220
+ _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; }
192221
+ w.vertexArray = _r$9;
192222
+ $r = domEvents.BindEvents(); /* */ $s = 26; case 26: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
191849
192223
  $s = -1; return w;
191850
- /* */ } 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;
192224
+ /* */ } 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;
191851
192225
  };
191852
192226
  windowImpl.ptr.prototype.ensureCanvasSize = function(width, height) {
191853
192227
  var height, w, width;
@@ -191946,9 +192320,9 @@ $packages["golang.org/x/exp/shiny/driver/webgldriver"] = (function() {
191946
192320
  $s = -1; return;
191947
192321
  }
191948
192322
  _ref = src;
191949
- /* */ if ($assertType(_ref, ptrType$7, true)[1]) { $s = 1; continue; }
192323
+ /* */ if ($assertType(_ref, ptrType$8, true)[1]) { $s = 1; continue; }
191950
192324
  /* */ $s = 2; continue;
191951
- /* if ($assertType(_ref, ptrType$7, true)[1]) { */ case 1:
192325
+ /* if ($assertType(_ref, ptrType$8, true)[1]) { */ case 1:
191952
192326
  jsSrc = _ref.$val;
191953
192327
  _r = jsSrc.YCbCrJS(); /* */ $s = 5; case 5: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; }
191954
192328
  /* */ if (_r.Use) { $s = 3; continue; }
@@ -192117,9 +192491,9 @@ $packages["golang.org/x/exp/shiny/driver/webgldriver"] = (function() {
192117
192491
  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});
192118
192492
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
192119
192493
  w = this;
192120
- /* */ if (w.programYUV420 === ptrType$3.nil) { $s = 1; continue; }
192494
+ /* */ if (w.programYUV420 === ptrType$4.nil) { $s = 1; continue; }
192121
192495
  /* */ $s = 2; continue;
192122
- /* if (w.programYUV420 === ptrType$3.nil) { */ case 1:
192496
+ /* if (w.programYUV420 === ptrType$4.nil) { */ case 1:
192123
192497
  err = $ifaceNil;
192124
192498
  _r = w.createAndLinkProgramYUV420(); /* */ $s = 3; case 3: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; }
192125
192499
  _tuple = _r;
@@ -192157,12 +192531,12 @@ $packages["golang.org/x/exp/shiny/driver/webgldriver"] = (function() {
192157
192531
  _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; }
192158
192532
  err = _r$1;
192159
192533
  if (!($interfaceIsEqual(err, $ifaceNil))) {
192160
- $s = -1; return [ptrType$3.nil, err];
192534
+ $s = -1; return [ptrType$4.nil, err];
192161
192535
  }
192162
192536
  _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; }
192163
192537
  err = _r$2;
192164
192538
  if (!($interfaceIsEqual(err, $ifaceNil))) {
192165
- $s = -1; return [ptrType$3.nil, err];
192539
+ $s = -1; return [ptrType$4.nil, err];
192166
192540
  }
192167
192541
  $r = w.gl.LinkProgram(shaderProgram); /* */ $s = 4; case 4: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
192168
192542
  _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; }
@@ -192172,7 +192546,7 @@ $packages["golang.org/x/exp/shiny/driver/webgldriver"] = (function() {
192172
192546
  _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; }
192173
192547
  _arg = new $String(_r$4);
192174
192548
  _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; }
192175
- $24r = [ptrType$3.nil, _r$5];
192549
+ $24r = [ptrType$4.nil, _r$5];
192176
192550
  $s = 10; case 10: return $24r;
192177
192551
  /* } */ case 6:
192178
192552
  $r = w.gl.UseProgram(shaderProgram); /* */ $s = 11; case 11: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
@@ -192231,9 +192605,9 @@ $packages["golang.org/x/exp/shiny/driver/webgldriver"] = (function() {
192231
192605
  var {_r, _r$1, _tuple, err, height, w, width, $s, $r, $c} = $restore(this, {width, height});
192232
192606
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
192233
192607
  w = this;
192234
- /* */ if (w.programRGBA === ptrType$3.nil) { $s = 1; continue; }
192608
+ /* */ if (w.programRGBA === ptrType$4.nil) { $s = 1; continue; }
192235
192609
  /* */ $s = 2; continue;
192236
- /* if (w.programRGBA === ptrType$3.nil) { */ case 1:
192610
+ /* if (w.programRGBA === ptrType$4.nil) { */ case 1:
192237
192611
  err = $ifaceNil;
192238
192612
  _r = w.createAndLinkProgramRGBA(); /* */ $s = 3; case 3: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; }
192239
192613
  _tuple = _r;
@@ -192267,12 +192641,12 @@ $packages["golang.org/x/exp/shiny/driver/webgldriver"] = (function() {
192267
192641
  _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; }
192268
192642
  err = _r$1;
192269
192643
  if (!($interfaceIsEqual(err, $ifaceNil))) {
192270
- $s = -1; return [ptrType$3.nil, err];
192644
+ $s = -1; return [ptrType$4.nil, err];
192271
192645
  }
192272
192646
  _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; }
192273
192647
  err = _r$2;
192274
192648
  if (!($interfaceIsEqual(err, $ifaceNil))) {
192275
- $s = -1; return [ptrType$3.nil, err];
192649
+ $s = -1; return [ptrType$4.nil, err];
192276
192650
  }
192277
192651
  $r = w.gl.LinkProgram(shaderProgram); /* */ $s = 4; case 4: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
192278
192652
  _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; }
@@ -192282,7 +192656,7 @@ $packages["golang.org/x/exp/shiny/driver/webgldriver"] = (function() {
192282
192656
  _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; }
192283
192657
  _arg = new $String(_r$4);
192284
192658
  _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; }
192285
- $24r = [ptrType$3.nil, _r$5];
192659
+ $24r = [ptrType$4.nil, _r$5];
192286
192660
  $s = 10; case 10: return $24r;
192287
192661
  /* } */ case 6:
192288
192662
  $r = w.gl.UseProgram(shaderProgram); /* */ $s = 11; case 11: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
@@ -192393,7 +192767,7 @@ $packages["golang.org/x/exp/shiny/driver/webgldriver"] = (function() {
192393
192767
  newBuffer = function(screen$1, size) {
192394
192768
  var _q, _q$1, _q$2, b, rect, screen$1, size;
192395
192769
  rect = new image.Rectangle.ptr(new image.Point.ptr(0, 0), $clone(size, image.Point));
192396
- 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);
192770
+ 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);
192397
192771
  return b;
192398
192772
  };
192399
192773
  BufferImpl.ptr.prototype.Size = function() {
@@ -192424,9 +192798,9 @@ $packages["golang.org/x/exp/shiny/driver/webgldriver"] = (function() {
192424
192798
  var {_r, b, emptyBuffer, $s, $r, $c} = $restore(this, {});
192425
192799
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
192426
192800
  b = this;
192427
- /* */ if (b.ycbcrJS === ptrType$8.nil) { $s = 1; continue; }
192801
+ /* */ if (b.ycbcrJS === ptrType$9.nil) { $s = 1; continue; }
192428
192802
  /* */ $s = 2; continue;
192429
- /* if (b.ycbcrJS === ptrType$8.nil) { */ case 1:
192803
+ /* if (b.ycbcrJS === ptrType$9.nil) { */ case 1:
192430
192804
  _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; }
192431
192805
  emptyBuffer = $clone(_r, js.Value);
192432
192806
  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);
@@ -192451,15 +192825,15 @@ $packages["golang.org/x/exp/shiny/driver/webgldriver"] = (function() {
192451
192825
  /* */ } 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; } }
192452
192826
  };
192453
192827
  BufferImpl.prototype.Release = function() { return this.$val.Release(); };
192454
- 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)}];
192455
- 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)}];
192828
+ 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: "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$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)}];
192829
+ 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)}];
192456
192830
  ptrType$12.methods = [{prop: "slice", name: "slice", pkg: "golang.org/x/exp/shiny/driver/webgldriver", typ: $funcType([], [js.Value], false)}];
192457
- 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)}];
192458
- 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: ""}]);
192831
+ 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)}];
192832
+ 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: "width", name: "width", embedded: false, exported: false, typ: $Int, tag: ""}, {prop: "height", name: "height", embedded: false, exported: false, typ: $Int, tag: ""}]);
192459
192833
  screenImpl.init("golang.org/x/exp/shiny/driver/webgldriver", [{prop: "doc", name: "doc", embedded: false, exported: false, typ: js.Value, tag: ""}]);
192460
192834
  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: ""}]);
192461
192835
  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: ""}]);
192462
- 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: ""}]);
192836
+ 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: ""}]);
192463
192837
  $init = function() {
192464
192838
  $pkg.$init = function() {};
192465
192839
  /* */ 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:
@@ -192526,7 +192900,7 @@ $packages["github.com/supraio/client-daemon/pkg/videostream"] = (function() {
192526
192900
  return $pkg;
192527
192901
  })();
192528
192902
  $packages["github.com/supraio/client-daemon/pkg/decoder/sosstream"] = (function() {
192529
- var $pkg = {}, $init, fmt, general, errs, jshelper, frame, videostream, js, SOSVideoStreamer, funcType, arrayType, sliceType, ptrType, ptrType$1, init;
192903
+ var $pkg = {}, $init, fmt, general, errs, jshelper, frame, videostream, js, SOSVideoStreamer, streamGeometry, funcType, arrayType, sliceType, ptrType, ptrType$1, init, getStreamGeometry;
192530
192904
  fmt = $packages["fmt"];
192531
192905
  general = $packages["github.com/supraio/client-daemon/pkg/decoder/general"];
192532
192906
  errs = $packages["github.com/supraio/client-daemon/pkg/errs"];
@@ -192544,6 +192918,20 @@ $packages["github.com/supraio/client-daemon/pkg/decoder/sosstream"] = (function(
192544
192918
  this.sos = sos_;
192545
192919
  this.started = started_;
192546
192920
  });
192921
+ streamGeometry = $pkg.streamGeometry = $newType(0, $kindStruct, "sosstream.streamGeometry", true, "github.com/supraio/client-daemon/pkg/decoder/sosstream", false, function(x_, y_, width_, height_) {
192922
+ this.$val = this;
192923
+ if (arguments.length === 0) {
192924
+ this.x = 0;
192925
+ this.y = 0;
192926
+ this.width = 0;
192927
+ this.height = 0;
192928
+ return;
192929
+ }
192930
+ this.x = x_;
192931
+ this.y = y_;
192932
+ this.width = width_;
192933
+ this.height = height_;
192934
+ });
192547
192935
  funcType = $funcType([], [], false);
192548
192936
  arrayType = $arrayType(funcType, 0);
192549
192937
  sliceType = $sliceType($emptyInterface);
@@ -192561,7 +192949,7 @@ $packages["github.com/supraio/client-daemon/pkg/decoder/sosstream"] = (function(
192561
192949
  };
192562
192950
  SOSVideoStreamer.prototype.IsAvailable = function() { return this.$val.IsAvailable(); };
192563
192951
  SOSVideoStreamer.ptr.prototype.Play = function() {
192564
- 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, {});
192952
+ 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, {});
192565
192953
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
192566
192954
  m = this;
192567
192955
  /* */ if (!m.started) { $s = 1; continue; }
@@ -192574,14 +192962,13 @@ $packages["github.com/supraio/client-daemon/pkg/decoder/sosstream"] = (function(
192574
192962
  sosProtocol = m.getSOSProtocol(protocol);
192575
192963
  _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; }
192576
192964
  url = _r;
192577
- width = $clone($clone($clone(js.Global(), js.Value).Get("screen"), js.Value).Get("width"), js.Value).Int();
192578
- height = $clone($clone($clone(js.Global(), js.Value).Get("screen"), js.Value).Get("height"), js.Value).Int();
192965
+ geometry = $clone(getStreamGeometry(), streamGeometry);
192579
192966
  _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; }
192580
192967
  options = $clone(_r$1, js.Value);
192581
192968
  $clone(options, js.Value).Set("background", new $Bool(true));
192582
192969
  $clone(options, js.Value).Set("protocol", new $String(sosProtocol));
192583
192970
  $clone(options, js.Value).Set("lowLatency", new $Bool(true));
192584
- _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; }
192971
+ _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; }
192585
192972
  preparePromise = $clone(_r$2, js.Value);
192586
192973
  _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; }
192587
192974
  _tuple = _r$3;
@@ -192596,7 +192983,7 @@ $packages["github.com/supraio/client-daemon/pkg/decoder/sosstream"] = (function(
192596
192983
  $24r = _r$6;
192597
192984
  $s = 12; case 12: return $24r;
192598
192985
  /* } */ case 8:
192599
- _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; }
192986
+ _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; }
192600
192987
  playStream = $clone(_r$7, js.Value);
192601
192988
  _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; }
192602
192989
  _tuple$1 = _r$8;
@@ -192614,11 +193001,11 @@ $packages["github.com/supraio/client-daemon/pkg/decoder/sosstream"] = (function(
192614
193001
  m.started = true;
192615
193002
  /* } */ case 2:
192616
193003
  $s = -1; return $ifaceNil;
192617
- /* */ } 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;
193004
+ /* */ } 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;
192618
193005
  };
192619
193006
  SOSVideoStreamer.prototype.Play = function() { return this.$val.Play(); };
192620
193007
  SOSVideoStreamer.ptr.prototype.Stop = function() {
192621
- 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, {});
193008
+ 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, {});
192622
193009
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
192623
193010
  m = this;
192624
193011
  /* */ if (m.started) { $s = 1; continue; }
@@ -192630,9 +193017,8 @@ $packages["github.com/supraio/client-daemon/pkg/decoder/sosstream"] = (function(
192630
193017
  urlProtocol = m.getURLProtocol(protocol);
192631
193018
  _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; }
192632
193019
  url = _r;
192633
- width = $clone($clone($clone(js.Global(), js.Value).Get("screen"), js.Value).Get("width"), js.Value).Int();
192634
- height = $clone($clone($clone(js.Global(), js.Value).Get("screen"), js.Value).Get("height"), js.Value).Int();
192635
- _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; }
193020
+ geometry = $clone(getStreamGeometry(), streamGeometry);
193021
+ _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; }
192636
193022
  stopPromise = $clone(_r$1, js.Value);
192637
193023
  _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; }
192638
193024
  _tuple = _r$2;
@@ -192650,9 +193036,26 @@ $packages["github.com/supraio/client-daemon/pkg/decoder/sosstream"] = (function(
192650
193036
  m.started = false;
192651
193037
  /* } */ case 2:
192652
193038
  $s = -1; return $ifaceNil;
192653
- /* */ } 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;
193039
+ /* */ } 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;
192654
193040
  };
192655
193041
  SOSVideoStreamer.prototype.Stop = function() { return this.$val.Stop(); };
193042
+ getStreamGeometry = function() {
193043
+ var configuredGeometry, geometry, supra;
193044
+ 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());
193045
+ supra = $clone($clone(js.Global(), js.Value).Get("__supra"), js.Value);
193046
+ if ($clone(supra, js.Value).IsUndefined() || $clone(supra, js.Value).IsNull()) {
193047
+ return geometry;
193048
+ }
193049
+ configuredGeometry = $clone($clone(supra, js.Value).Get("geometry"), js.Value);
193050
+ if ($clone(configuredGeometry, js.Value).IsUndefined() || $clone(configuredGeometry, js.Value).IsNull()) {
193051
+ return geometry;
193052
+ }
193053
+ geometry.x = $clone($clone(configuredGeometry, js.Value).Get("x"), js.Value).Int();
193054
+ geometry.y = $clone($clone(configuredGeometry, js.Value).Get("y"), js.Value).Int();
193055
+ geometry.width = $clone($clone(configuredGeometry, js.Value).Get("width"), js.Value).Int();
193056
+ geometry.height = $clone($clone(configuredGeometry, js.Value).Get("height"), js.Value).Int();
193057
+ return geometry;
193058
+ };
192656
193059
  SOSVideoStreamer.ptr.prototype.GetProtocol = function() {
192657
193060
  var _1, m, protocol, protocolValue;
192658
193061
  m = this;
@@ -192757,6 +193160,7 @@ $packages["github.com/supraio/client-daemon/pkg/decoder/sosstream"] = (function(
192757
193160
  SOSVideoStreamer.prototype.getSOSProtocol = function(protocol) { return this.$val.getSOSProtocol(protocol); };
192758
193161
  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)}];
192759
193162
  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: ""}]);
193163
+ 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: ""}]);
192760
193164
  $init = function() {
192761
193165
  $pkg.$init = function() {};
192762
193166
  /* */ 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:
@@ -192855,7 +193259,7 @@ $packages["github.com/supraio/client-daemon/pkg/stats"] = (function() {
192855
193259
  return $pkg;
192856
193260
  })();
192857
193261
  $packages["github.com/supraio/client-daemon/pkg/render/player"] = (function() {
192858
- var $pkg = {}, $init, decoder, errs, frame, netframe, screenbuffer, stats, screen, image, time;
193262
+ var $pkg = {}, $init, decoder, errs, frame, netframe, screenbuffer, stats, screen, image, sync, time;
192859
193263
  decoder = $packages["github.com/supraio/client-daemon/pkg/decoder"];
192860
193264
  errs = $packages["github.com/supraio/client-daemon/pkg/errs"];
192861
193265
  frame = $packages["github.com/supraio/client-daemon/pkg/render/frame"];
@@ -192864,6 +193268,7 @@ $packages["github.com/supraio/client-daemon/pkg/render/player"] = (function() {
192864
193268
  stats = $packages["github.com/supraio/client-daemon/pkg/stats"];
192865
193269
  screen = $packages["golang.org/x/exp/shiny/screen"];
192866
193270
  image = $packages["image"];
193271
+ sync = $packages["sync"];
192867
193272
  time = $packages["time"];
192868
193273
  $init = function() {
192869
193274
  $pkg.$init = function() {};
@@ -192876,7 +193281,8 @@ $packages["github.com/supraio/client-daemon/pkg/render/player"] = (function() {
192876
193281
  $r = stats.$init(); /* */ $s = 6; case 6: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
192877
193282
  $r = screen.$init(); /* */ $s = 7; case 7: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
192878
193283
  $r = image.$init(); /* */ $s = 8; case 8: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
192879
- $r = time.$init(); /* */ $s = 9; case 9: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193284
+ $r = sync.$init(); /* */ $s = 9; case 9: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193285
+ $r = time.$init(); /* */ $s = 10; case 10: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
192880
193286
  /* */ } return; } if ($f === undefined) { $f = { $blk: $init }; } $f.$s = $s; $f.$r = $r; return $f;
192881
193287
  };
192882
193288
  $pkg.$init = $init;
@@ -192983,21 +193389,55 @@ $packages["github.com/supraio/client-daemon/pkg/shiny/driver/overlaydriver"] = (
192983
193389
  };
192984
193390
  windowImpl.prototype.Publish = function() { return this.$val.Publish(); };
192985
193391
  windowImpl.ptr.prototype.Send = function(event) {
192986
- var event, w;
193392
+ var {event, w, $s, $deferred, $r, $c} = $restore(this, {event});
193393
+ /* */ $s = $s || 0; var $err = null; try { s: while (true) { switch ($s) { case 0: $deferred = []; $curGoroutine.deferStack.push($deferred);
192987
193394
  w = this;
192988
- if (w.released) {
192989
- return;
192990
- }
192991
- $panic(new $String("Not implemented"));
193395
+ $r = w.mutex.Lock(); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193396
+ $deferred.push([$methodVal(w.mutex, "Unlock"), []]);
193397
+ /* */ if (w.released) { $s = 2; continue; }
193398
+ /* */ $s = 3; continue;
193399
+ /* if (w.released) { */ case 2:
193400
+ $s = 4; case 4: return;
193401
+ /* } */ case 3:
193402
+ $r = $send(w.domEvents.GetEventChan(), event); /* */ $s = 5; case 5: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193403
+ $s = -1; return;
193404
+ /* */ } 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; } }
192992
193405
  };
192993
193406
  windowImpl.prototype.Send = function(event) { return this.$val.Send(event); };
193407
+ windowImpl.ptr.prototype.SendNonBlocking = function(event) {
193408
+ var {$24r, $24r$1, $24r$2, _selection, event, w, $s, $deferred, $r, $c} = $restore(this, {event});
193409
+ /* */ $s = $s || 0; var $err = null; try { s: while (true) { switch ($s) { case 0: $deferred = []; $curGoroutine.deferStack.push($deferred);
193410
+ w = this;
193411
+ $r = w.mutex.Lock(); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193412
+ $deferred.push([$methodVal(w.mutex, "Unlock"), []]);
193413
+ /* */ if (w.released) { $s = 2; continue; }
193414
+ /* */ $s = 3; continue;
193415
+ /* if (w.released) { */ case 2:
193416
+ $24r = false;
193417
+ $s = 4; case 4: return $24r;
193418
+ /* } */ case 3:
193419
+ _selection = $select([[w.domEvents.GetEventChan(), event], []]);
193420
+ /* */ if (_selection[0] === 0) { $s = 5; continue; }
193421
+ /* */ if (_selection[0] === 1) { $s = 6; continue; }
193422
+ /* */ $s = 7; continue;
193423
+ /* if (_selection[0] === 0) { */ case 5:
193424
+ $24r$1 = true;
193425
+ $s = 8; case 8: return $24r$1;
193426
+ /* } else if (_selection[0] === 1) { */ case 6:
193427
+ $24r$2 = false;
193428
+ $s = 9; case 9: return $24r$2;
193429
+ /* } */ case 7:
193430
+ $s = -1; return false;
193431
+ /* */ } 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; } }
193432
+ };
193433
+ windowImpl.prototype.SendNonBlocking = function(event) { return this.$val.SendNonBlocking(event); };
192994
193434
  windowImpl.ptr.prototype.SendFirst = function(event) {
192995
- var event, w;
193435
+ var {event, w, $s, $r, $c} = $restore(this, {event});
193436
+ /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
192996
193437
  w = this;
192997
- if (w.released) {
192998
- return;
192999
- }
193000
- $panic(new $String("Not implemented"));
193438
+ $r = w.Send(event); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193439
+ $s = -1; return;
193440
+ /* */ } return; } var $f = {$blk: windowImpl.ptr.prototype.SendFirst, $c: true, $r, event, w, $s};return $f;
193001
193441
  };
193002
193442
  windowImpl.prototype.SendFirst = function(event) { return this.$val.SendFirst(event); };
193003
193443
  windowImpl.ptr.prototype.NextEvent = function() {
@@ -193162,7 +193602,7 @@ $packages["github.com/supraio/client-daemon/pkg/shiny/driver/overlaydriver"] = (
193162
193602
  b = this;
193163
193603
  };
193164
193604
  BufferImpl.prototype.Release = function() { return this.$val.Release(); };
193165
- 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)}];
193605
+ 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)}];
193166
193606
  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)}];
193167
193607
  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)}];
193168
193608
  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: ""}]);
@@ -193220,7 +193660,7 @@ $packages["golang.org/x/mobile/event/lifecycle"] = (function() {
193220
193660
  return $pkg;
193221
193661
  })();
193222
193662
  $packages["github.com/supraio/client-daemon/pkg/render"] = (function() {
193223
- 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;
193663
+ 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;
193224
193664
  binary = $packages["encoding/binary"];
193225
193665
  json = $packages["encoding/json"];
193226
193666
  query = $packages["github.com/google/go-querystring/query"];
@@ -193260,10 +193700,25 @@ $packages["github.com/supraio/client-daemon/pkg/render"] = (function() {
193260
193700
  log = $packages["log"];
193261
193701
  os = $packages["os"];
193262
193702
  path = $packages["path"];
193703
+ strconv = $packages["strconv"];
193263
193704
  strings = $packages["strings"];
193264
193705
  sync = $packages["sync"];
193265
193706
  js = $packages["syscall/js"];
193266
193707
  time = $packages["time"];
193708
+ Geometry = $pkg.Geometry = $newType(0, $kindStruct, "render.Geometry", true, "github.com/supraio/client-daemon/pkg/render", true, function(X_, Y_, Width_, Height_) {
193709
+ this.$val = this;
193710
+ if (arguments.length === 0) {
193711
+ this.X = 0;
193712
+ this.Y = 0;
193713
+ this.Width = 0;
193714
+ this.Height = 0;
193715
+ return;
193716
+ }
193717
+ this.X = X_;
193718
+ this.Y = Y_;
193719
+ this.Width = Width_;
193720
+ this.Height = Height_;
193721
+ });
193267
193722
  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_) {
193268
193723
  this.$val = this;
193269
193724
  if (arguments.length === 0) {
@@ -193286,17 +193741,19 @@ $packages["github.com/supraio/client-daemon/pkg/render"] = (function() {
193286
193741
  this.ClientSecret = ClientSecret_;
193287
193742
  this.Secure = Secure_;
193288
193743
  });
193289
- ScreenManager = $pkg.ScreenManager = $newType(0, $kindStruct, "render.ScreenManager", true, "github.com/supraio/client-daemon/pkg/render", true, function(screenWindowCmd_, logDir_, processInfoManager_) {
193744
+ ScreenManager = $pkg.ScreenManager = $newType(0, $kindStruct, "render.ScreenManager", true, "github.com/supraio/client-daemon/pkg/render", true, function(screenWindowCmd_, logDir_, processInfoManager_, processMu_) {
193290
193745
  this.$val = this;
193291
193746
  if (arguments.length === 0) {
193292
193747
  this.screenWindowCmd = "";
193293
193748
  this.logDir = "";
193294
193749
  this.processInfoManager = ptrType.nil;
193750
+ this.processMu = new sync.Mutex.ptr(0, 0);
193295
193751
  return;
193296
193752
  }
193297
193753
  this.screenWindowCmd = screenWindowCmd_;
193298
193754
  this.logDir = logDir_;
193299
193755
  this.processInfoManager = processInfoManager_;
193756
+ this.processMu = processMu_;
193300
193757
  });
193301
193758
  ProcessInfo = $pkg.ProcessInfo = $newType(0, $kindStruct, "render.ProcessInfo", true, "github.com/supraio/client-daemon/pkg/render", true, function(ScreenID_, Pid_) {
193302
193759
  this.$val = this;
@@ -193321,36 +193778,39 @@ $packages["github.com/supraio/client-daemon/pkg/render"] = (function() {
193321
193778
  sliceType = $sliceType($Uint8);
193322
193779
  ptrType = $ptrType(ProcessInfoManager);
193323
193780
  funcType = $funcType([], [], false);
193781
+ ptrType$14 = $ptrType(Geometry);
193324
193782
  sliceType$2 = $sliceType($emptyInterface);
193325
193783
  sliceType$4 = $sliceType($String);
193326
193784
  arrayType = $arrayType(funcType, 0);
193327
193785
  mapType = $mapType($String, $emptyInterface);
193328
- ptrType$15 = $ptrType(ScreenManager);
193786
+ ptrType$16 = $ptrType(ScreenManager);
193329
193787
  ScreenManager.ptr.prototype.StartScreen = function(screenID, screenDriver, screenHost, metadataDriver, metadataHost, clientID, clientSecret, secure) {
193330
193788
  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});
193331
193789
  /* */ $s = $s || 0; var $err = null; try { s: while (true) { switch ($s) { case 0: $deferred = []; $curGoroutine.deferStack.push($deferred);
193332
193790
  m = [m];
193333
193791
  screenWindow = [screenWindow];
193334
193792
  m[0] = this;
193335
- $r = mutex.Lock(); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193793
+ $r = m[0].processMu.Lock(); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193794
+ $deferred.push([$methodVal(m[0].processMu, "Unlock"), []]);
193795
+ $r = mutex.Lock(); /* */ $s = 2; case 2: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193336
193796
  $deferred.push([$methodVal(mutex, "Unlock"), []]);
193337
193797
  width = $clone($clone($clone(js.Global(), js.Value).Get("screen"), js.Value).Get("width"), js.Value).Int();
193338
193798
  height = $clone($clone($clone(js.Global(), js.Value).Get("screen"), js.Value).Get("height"), js.Value).Int();
193339
193799
  left = 0;
193340
193800
  top = 0;
193341
- 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"]);
193801
+ 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"]);
193342
193802
  params = new screenParams.ptr(screenID, (screenDriver), screenHost, (metadataDriver), metadataHost, clientID, clientSecret, secure);
193343
193803
  baseUrl = $clone($clone($clone(js.Global(), js.Value).Get("location"), js.Value).Get("origin"), js.Value).String();
193344
- _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; }
193804
+ _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; }
193345
193805
  _tuple = _r;
193346
193806
  screenWindow[0] = $clone(_tuple[0], js.Value);
193347
193807
  err = _tuple[1];
193348
- /* */ if (!($interfaceIsEqual(err, $ifaceNil))) { $s = 3; continue; }
193349
- /* */ $s = 4; continue;
193350
- /* if (!($interfaceIsEqual(err, $ifaceNil))) { */ case 3:
193808
+ /* */ if (!($interfaceIsEqual(err, $ifaceNil))) { $s = 4; continue; }
193809
+ /* */ $s = 5; continue;
193810
+ /* if (!($interfaceIsEqual(err, $ifaceNil))) { */ case 4:
193351
193811
  $24r = err;
193352
- $s = 5; case 5: return $24r;
193353
- /* } */ case 4:
193812
+ $s = 6; case 6: return $24r;
193813
+ /* } */ case 5:
193354
193814
  killScreen = (function(m, screenWindow) { return function $b() {
193355
193815
  var {_r$1, err$1, $s, $r, $c} = $restore(this, {});
193356
193816
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
@@ -193364,18 +193824,18 @@ $packages["github.com/supraio/client-daemon/pkg/render"] = (function() {
193364
193824
  $s = -1; return;
193365
193825
  /* */ } return; } var $f = {$blk: $b, $c: true, $r, _r$1, err$1, $s};return $f;
193366
193826
  }; })(m, screenWindow);
193367
- _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; }
193827
+ _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; }
193368
193828
  err = _r$1;
193369
- /* */ if (!($interfaceIsEqual(err, $ifaceNil))) { $s = 7; continue; }
193370
- /* */ $s = 8; continue;
193371
- /* if (!($interfaceIsEqual(err, $ifaceNil))) { */ case 7:
193372
- $r = killScreen(); /* */ $s = 9; case 9: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193829
+ /* */ if (!($interfaceIsEqual(err, $ifaceNil))) { $s = 8; continue; }
193830
+ /* */ $s = 9; continue;
193831
+ /* if (!($interfaceIsEqual(err, $ifaceNil))) { */ case 8:
193832
+ $r = killScreen(); /* */ $s = 10; case 10: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193373
193833
  $24r$1 = err;
193374
- $s = 10; case 10: return $24r$1;
193375
- /* } */ case 8:
193834
+ $s = 11; case 11: return $24r$1;
193835
+ /* } */ case 9:
193376
193836
  _key = screenID; (openScreenWindows || $throwRuntimeError("assignment to entry in nil map")).set($String.keyFor(_key), { k: _key, v: $clone(screenWindow[0], js.Value) });
193377
193837
  $24r$2 = $ifaceNil;
193378
- $s = 11; case 11: return $24r$2;
193838
+ $s = 12; case 12: return $24r$2;
193379
193839
  /* */ } 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; } }
193380
193840
  };
193381
193841
  ScreenManager.prototype.StartScreen = function(screenID, screenDriver, screenHost, metadataDriver, metadataHost, clientID, clientSecret, secure) { return this.$val.StartScreen(screenID, screenDriver, screenHost, metadataDriver, metadataHost, clientID, clientSecret, secure); };
@@ -193445,46 +193905,116 @@ $packages["github.com/supraio/client-daemon/pkg/render"] = (function() {
193445
193905
  };
193446
193906
  ScreenManager.prototype.closeWindow = function(window$1) { return this.$val.closeWindow(window$1); };
193447
193907
  ScreenManager.ptr.prototype.StopScreen = function(screenID) {
193448
- 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});
193908
+ 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});
193449
193909
  /* */ $s = $s || 0; var $err = null; try { s: while (true) { switch ($s) { case 0: $deferred = []; $curGoroutine.deferStack.push($deferred);
193910
+ bridge = [bridge];
193450
193911
  m = this;
193451
- $r = mutex.Lock(); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193912
+ $r = m.processMu.Lock(); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193913
+ $deferred.push([$methodVal(m.processMu, "Unlock"), []]);
193914
+ $r = mutex.Lock(); /* */ $s = 2; case 2: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193452
193915
  $deferred.push([$methodVal(mutex, "Unlock"), []]);
193453
- _r = m.processInfoManager.GetProcessInfo(screenID); /* */ $s = 2; case 2: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; }
193916
+ _r = m.processInfoManager.GetProcessInfo(screenID); /* */ $s = 3; case 3: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; }
193454
193917
  _tuple = _r;
193455
193918
  err = _tuple[1];
193456
- /* */ if (!($interfaceIsEqual(err, $ifaceNil))) { $s = 3; continue; }
193457
- /* */ $s = 4; continue;
193458
- /* if (!($interfaceIsEqual(err, $ifaceNil))) { */ case 3:
193919
+ /* */ if (!($interfaceIsEqual(err, $ifaceNil))) { $s = 4; continue; }
193920
+ /* */ $s = 5; continue;
193921
+ /* if (!($interfaceIsEqual(err, $ifaceNil))) { */ case 4:
193459
193922
  $24r = err;
193460
- $s = 5; case 5: return $24r;
193461
- /* } */ case 4:
193923
+ $s = 6; case 6: return $24r;
193924
+ /* } */ case 5:
193462
193925
  _tuple$1 = (_entry = $mapIndex(openScreenWindows,$String.keyFor(screenID)), _entry !== undefined ? [_entry.v, true] : [new js.Value.ptr(null, false, arrayType.zero()), false]);
193463
193926
  screenWindow = $clone(_tuple$1[0], js.Value);
193464
193927
  exists = _tuple$1[1];
193465
- /* */ if (!exists) { $s = 6; continue; }
193466
- /* */ $s = 7; continue;
193467
- /* if (!exists) { */ case 6:
193468
- $24r$1 = err;
193469
- $s = 8; case 8: return $24r$1;
193470
- /* } */ case 7:
193471
- _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; }
193472
- err = _r$1;
193473
- /* */ if (!($interfaceIsEqual(err, $ifaceNil))) { $s = 10; continue; }
193474
- /* */ $s = 11; continue;
193475
- /* if (!($interfaceIsEqual(err, $ifaceNil))) { */ case 10:
193476
- $24r$2 = err;
193477
- $s = 12; case 12: return $24r$2;
193478
- /* } */ case 11:
193928
+ /* */ if (!exists) { $s = 7; continue; }
193929
+ /* */ $s = 8; continue;
193930
+ /* if (!exists) { */ case 7:
193931
+ _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; }
193932
+ $24r$1 = _r$1;
193933
+ $s = 10; case 10: return $24r$1;
193934
+ /* } */ case 8:
193935
+ bridge[0] = $clone($clone(screenWindow, js.Value).Get("__supra"), js.Value);
193936
+ /* */ if (($clone(bridge[0], js.Value).Type() === 0) || ($clone(bridge[0], js.Value).Type() === 1)) { $s = 11; continue; }
193937
+ /* */ $s = 12; continue;
193938
+ /* if (($clone(bridge[0], js.Value).Type() === 0) || ($clone(bridge[0], js.Value).Type() === 1)) { */ case 11:
193939
+ _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; }
193940
+ $24r$2 = _r$2;
193941
+ $s = 14; case 14: return $24r$2;
193942
+ /* } */ case 12:
193943
+ stopScreen = $clone($clone(bridge[0], js.Value).Get("stopScreen"), js.Value);
193944
+ /* */ if (!(($clone(stopScreen, js.Value).Type() === 7))) { $s = 15; continue; }
193945
+ /* */ $s = 16; continue;
193946
+ /* if (!(($clone(stopScreen, js.Value).Type() === 7))) { */ case 15:
193947
+ _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; }
193948
+ $24r$3 = _r$3;
193949
+ $s = 18; case 18: return $24r$3;
193950
+ /* } */ case 16:
193951
+ $clone(stopScreen, js.Value).Invoke(sliceType$2.nil);
193952
+ _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; }
193953
+ _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; }
193954
+ deadline = $clone(_r$5, time.Time);
193955
+ _r$6 = waitForScreenLifecycleExit(screenID, (function(bridge) { return function(marker) {
193956
+ var marker, value;
193957
+ value = $clone($clone(bridge[0], js.Value).Get(marker), js.Value);
193958
+ return ($clone(value, js.Value).Type() === 2) && $clone(value, js.Value).Bool();
193959
+ }; })(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; }
193960
+ err$1 = _r$6;
193961
+ /* */ if (!($interfaceIsEqual(err$1, $ifaceNil))) { $s = 22; continue; }
193962
+ /* */ $s = 23; continue;
193963
+ /* if (!($interfaceIsEqual(err$1, $ifaceNil))) { */ case 22:
193964
+ $24r$4 = err$1;
193965
+ $s = 24; case 24: return $24r$4;
193966
+ /* } */ case 23:
193967
+ _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; }
193968
+ err$2 = _r$7;
193969
+ /* */ if (!($interfaceIsEqual(err$2, $ifaceNil))) { $s = 26; continue; }
193970
+ /* */ $s = 27; continue;
193971
+ /* if (!($interfaceIsEqual(err$2, $ifaceNil))) { */ case 26:
193972
+ $24r$5 = err$2;
193973
+ $s = 28; case 28: return $24r$5;
193974
+ /* } */ case 27:
193479
193975
  $mapDelete(openScreenWindows, $String.keyFor(screenID));
193480
- $24r$3 = $ifaceNil;
193481
- $s = 13; case 13: return $24r$3;
193482
- /* */ } 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; } }
193976
+ $24r$6 = $ifaceNil;
193977
+ $s = 29; case 29: return $24r$6;
193978
+ /* */ } 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; } }
193483
193979
  };
193484
193980
  ScreenManager.prototype.StopScreen = function(screenID) { return this.$val.StopScreen(screenID); };
193981
+ waitForScreenLifecycleExit = function(screenID, markerSet, deadline) {
193982
+ var {$24r, _r, _r$1, _r$2, _r$3, _r$4, _v, cleanupCompleted, deadline, markerSet, screenID, $s, $r, $c} = $restore(this, {screenID, markerSet, deadline});
193983
+ /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
193984
+ cleanupCompleted = false;
193985
+ /* while (true) { */ case 1:
193986
+ /* */ if (!cleanupCompleted) { $s = 3; continue; }
193987
+ /* */ $s = 4; continue;
193988
+ /* if (!cleanupCompleted) { */ case 3:
193989
+ _r = markerSet("screenStopCompleted"); /* */ $s = 5; case 5: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; }
193990
+ cleanupCompleted = _r;
193991
+ /* } */ case 4:
193992
+ if (!(cleanupCompleted)) { _v = false; $s = 8; continue s; }
193993
+ _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; }
193994
+ _v = _r$1; case 8:
193995
+ /* */ if (_v) { $s = 6; continue; }
193996
+ /* */ $s = 7; continue;
193997
+ /* if (_v) { */ case 6:
193998
+ $s = -1; return $ifaceNil;
193999
+ /* } */ case 7:
194000
+ _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; }
194001
+ _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; }
194002
+ /* */ if (_r$3) { $s = 10; continue; }
194003
+ /* */ $s = 11; continue;
194004
+ /* if (_r$3) { */ case 10:
194005
+ _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; }
194006
+ $24r = _r$4;
194007
+ $s = 15; case 15: return $24r;
194008
+ /* } */ case 11:
194009
+ $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; }
194010
+ $s = 1; continue;
194011
+ case 2:
194012
+ $s = -1; return $ifaceNil;
194013
+ /* */ } 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;
194014
+ };
193485
194015
  NewScreenManager = function(screenWindowCmd, logDir, processInfoManager) {
193486
194016
  var logDir, processInfoManager, screenWindowCmd;
193487
- return new ScreenManager.ptr(screenWindowCmd, logDir, processInfoManager);
194017
+ return new ScreenManager.ptr(screenWindowCmd, logDir, processInfoManager, new sync.Mutex.ptr(0, 0));
193488
194018
  };
193489
194019
  $pkg.NewScreenManager = NewScreenManager;
193490
194020
  ScreenManager.ptr.prototype.ListScreens = function() {
@@ -193554,6 +194084,29 @@ $packages["github.com/supraio/client-daemon/pkg/render"] = (function() {
193554
194084
  /* */ } return; } var $f = {$blk: ProcessInfoManager.ptr.prototype.RemoveProcessInfo, $c: true, $r, _r, _r$1, err, m, screenID, userProcessDirPath, $s};return $f;
193555
194085
  };
193556
194086
  ProcessInfoManager.prototype.RemoveProcessInfo = function(screenID) { return this.$val.RemoveProcessInfo(screenID); };
194087
+ ProcessInfoManager.ptr.prototype.RemoveProcessInfoByPid = function(screenID, pid) {
194088
+ var {$24r, _r, _r$1, _tuple, err, m, pid, processInfo, screenID, $s, $r, $c} = $restore(this, {screenID, pid});
194089
+ /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
194090
+ m = this;
194091
+ _r = m.GetProcessInfo(screenID); /* */ $s = 1; case 1: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; }
194092
+ _tuple = _r;
194093
+ processInfo = $clone(_tuple[0], ProcessInfo);
194094
+ err = _tuple[1];
194095
+ if (os.IsNotExist(err)) {
194096
+ $s = -1; return $ifaceNil;
194097
+ }
194098
+ if (!($interfaceIsEqual(err, $ifaceNil))) {
194099
+ $s = -1; return err;
194100
+ }
194101
+ if (!((processInfo.Pid === pid))) {
194102
+ $s = -1; return $ifaceNil;
194103
+ }
194104
+ _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; }
194105
+ $24r = _r$1;
194106
+ $s = 3; case 3: return $24r;
194107
+ /* */ } return; } var $f = {$blk: ProcessInfoManager.ptr.prototype.RemoveProcessInfoByPid, $c: true, $r, $24r, _r, _r$1, _tuple, err, m, pid, processInfo, screenID, $s};return $f;
194108
+ };
194109
+ ProcessInfoManager.prototype.RemoveProcessInfoByPid = function(screenID, pid) { return this.$val.RemoveProcessInfoByPid(screenID, pid); };
193557
194110
  ProcessInfoManager.ptr.prototype.WaitProcess = function(screenID) {
193558
194111
  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});
193559
194112
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
@@ -193584,6 +194137,37 @@ $packages["github.com/supraio/client-daemon/pkg/render"] = (function() {
193584
194137
  /* */ } 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;
193585
194138
  };
193586
194139
  ProcessInfoManager.prototype.WaitProcess = function(screenID) { return this.$val.WaitProcess(screenID); };
194140
+ ProcessInfoManager.ptr.prototype.WaitProcessStopped = function(screenID, timeout) {
194141
+ var {$24r, _r, _r$1, _r$2, _r$3, _tuple, err, m, screenID, startTime, timeout, x, $s, $r, $c} = $restore(this, {screenID, timeout});
194142
+ /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
194143
+ m = this;
194144
+ _r = time.Now(); /* */ $s = 1; case 1: if($c) { $c = false; _r = _r.$blk(); } if (_r && _r.$blk !== undefined) { break s; }
194145
+ startTime = $clone(_r, time.Time);
194146
+ /* while (true) { */ case 2:
194147
+ _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; }
194148
+ _tuple = _r$1;
194149
+ err = _tuple[1];
194150
+ if (os.IsNotExist(err)) {
194151
+ $s = -1; return $ifaceNil;
194152
+ }
194153
+ if (!($interfaceIsEqual(err, $ifaceNil))) {
194154
+ $s = -1; return err;
194155
+ }
194156
+ _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; }
194157
+ /* */ if ((x = _r$2, (x.$high > timeout.$high || (x.$high === timeout.$high && x.$low > timeout.$low)))) { $s = 5; continue; }
194158
+ /* */ $s = 6; continue;
194159
+ /* if ((x = _r$2, (x.$high > timeout.$high || (x.$high === timeout.$high && x.$low > timeout.$low)))) { */ case 5:
194160
+ _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; }
194161
+ $24r = _r$3;
194162
+ $s = 9; case 9: return $24r;
194163
+ /* } */ case 6:
194164
+ $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; }
194165
+ $s = 2; continue;
194166
+ case 3:
194167
+ $s = -1; return $ifaceNil;
194168
+ /* */ } 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;
194169
+ };
194170
+ ProcessInfoManager.prototype.WaitProcessStopped = function(screenID, timeout) { return this.$val.WaitProcessStopped(screenID, timeout); };
193587
194171
  ProcessInfoManager.ptr.prototype.GetProcessInfo = function(screenID) {
193588
194172
  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});
193589
194173
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
@@ -193675,10 +194259,16 @@ $packages["github.com/supraio/client-daemon/pkg/render"] = (function() {
193675
194259
  onScreenWindowStarted = registerJSBridge;
193676
194260
  };
193677
194261
  registerJSBridge = function(w) {
193678
- var {supraObj, w, x, x$1, x$2, $s, $r, $c} = $restore(this, {w});
194262
+ var {_r, _tuple, deactivateFacades, facades, getCurrentStats, setEncodingPreferences, stopScreen, supraObj, supraValue, w, x, x$1, x$2, $s, $r, $c} = $restore(this, {w});
193679
194263
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
194264
+ deactivateFacades = [deactivateFacades];
194265
+ getCurrentStats = [getCurrentStats];
194266
+ setEncodingPreferences = [setEncodingPreferences];
194267
+ stopScreen = [stopScreen];
194268
+ supraValue = [supraValue];
193680
194269
  w = [w];
193681
- supraObj = $makeMap($String.keyFor, [{ k: "setEncodingPreferences", v: (x = js.FuncOf((function(w) { return function $b(this$1, args) {
194270
+ supraValue[0] = new js.Value.ptr(null, false, arrayType.zero());
194271
+ setEncodingPreferences[0] = $clone(js.FuncOf((function(deactivateFacades, getCurrentStats, setEncodingPreferences, stopScreen, supraValue, w) { return function $b(this$1, args) {
193682
194272
  var {_r, args, err, jsonStr, prefs, this$1, $s, $r, $c} = $restore(this, {this$1, args});
193683
194273
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
193684
194274
  prefs = [prefs];
@@ -193702,7 +194292,8 @@ $packages["github.com/supraio/client-daemon/pkg/render"] = (function() {
193702
194292
  w[0].SetEncodingPreferences($clone(prefs[0], stats.EncodingPreferences));
193703
194293
  $s = -1; return $ifaceNil;
193704
194294
  /* */ } return; } var $f = {$blk: $b, $c: true, $r, _r, args, err, jsonStr, prefs, this$1, $s};return $f;
193705
- }; })(w)), new x.constructor.elem(x)) }, { k: "getCurrentStats", v: (x$1 = js.FuncOf((function(w) { return function $b(this$1, args) {
194295
+ }; })(deactivateFacades, getCurrentStats, setEncodingPreferences, stopScreen, supraValue, w)), js.Func);
194296
+ getCurrentStats[0] = $clone(js.FuncOf((function(deactivateFacades, getCurrentStats, setEncodingPreferences, stopScreen, supraValue, w) { return function $b(this$1, args) {
193706
194297
  var {_r, _tuple, args, clientStats, data, err, this$1, $s, $r, $c} = $restore(this, {this$1, args});
193707
194298
  /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
193708
194299
  clientStats = w[0].stats.GetClientStats();
@@ -193718,16 +194309,70 @@ $packages["github.com/supraio/client-daemon/pkg/render"] = (function() {
193718
194309
  /* } */ case 3:
193719
194310
  $s = -1; return new $String(($bytesToString(data)));
193720
194311
  /* */ } return; } var $f = {$blk: $b, $c: true, $r, _r, _tuple, args, clientStats, data, err, this$1, $s};return $f;
193721
- }; })(w)), new x$1.constructor.elem(x$1)) }]);
193722
- $clone(js.Global(), js.Value).Set("__supra", (x$2 = js.ValueOf(new mapType(supraObj)), new x$2.constructor.elem(x$2)));
193723
- $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; }
194312
+ }; })(deactivateFacades, getCurrentStats, setEncodingPreferences, stopScreen, supraValue, w)), js.Func);
194313
+ stopScreen[0] = $clone(js.FuncOf((function(deactivateFacades, getCurrentStats, setEncodingPreferences, stopScreen, supraValue, w) { return function $b(this$1, args) {
194314
+ var {args, this$1, $s, $r, $c} = $restore(this, {this$1, args});
194315
+ /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
194316
+ $clone(supraValue[0], js.Value).Set("screenStopped", new $Bool(true));
194317
+ $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; }
194318
+ $go($methodVal(w[0], "Close"), []);
194319
+ $s = -1; return $ifaceNil;
194320
+ /* */ } return; } var $f = {$blk: $b, $c: true, $r, args, this$1, $s};return $f;
194321
+ }; })(deactivateFacades, getCurrentStats, setEncodingPreferences, stopScreen, supraValue, w)), js.Func);
194322
+ _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; }
194323
+ _tuple = _r;
194324
+ facades = $clone(_tuple[0], js.Value);
194325
+ deactivateFacades[0] = _tuple[1];
194326
+ 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)) }]);
194327
+ js.Value.copy(supraValue[0], js.ValueOf(new mapType(supraObj)));
194328
+ $clone(js.Global(), js.Value).Set("__supra", new supraValue[0].constructor.elem(supraValue[0]));
194329
+ $r = w[0].OnClose((function(deactivateFacades, getCurrentStats, setEncodingPreferences, stopScreen, supraValue, w) { return function $b() {
194330
+ var {$s, $r, $c} = $restore(this, {});
194331
+ /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
194332
+ $r = deactivateFacades[0](); /* */ $s = 1; case 1: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
194333
+ $clone(setEncodingPreferences[0], js.Func).Release();
194334
+ $clone(getCurrentStats[0], js.Func).Release();
194335
+ $clone(stopScreen[0], js.Func).Release();
194336
+ $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; }
194337
+ $clone(supraValue[0], js.Value).Set("screenStopCompleted", new $Bool(true));
194338
+ $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; }
194339
+ $s = -1; return;
194340
+ /* */ } return; } var $f = {$blk: $b, $c: true, $r, $s};return $f;
194341
+ }; })(deactivateFacades, getCurrentStats, setEncodingPreferences, stopScreen, supraValue, w)); /* */ $s = 2; case 2: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
194342
+ $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; }
193724
194343
  $s = -1; return;
193725
- /* */ } return; } var $f = {$blk: registerJSBridge, $c: true, $r, supraObj, w, x, x$1, x$2, $s};return $f;
194344
+ /* */ } 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;
193726
194345
  };
193727
- 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)}];
193728
- 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)}];
194346
+ newJSBridgeFacades = function(setEncodingPreferences, getCurrentStats, stopScreen) {
194347
+ var {_r, _r$1, deactivate, facades, getCurrentStats, setEncodingPreferences, state, stopScreen, $s, $r, $c} = $restore(this, {setEncodingPreferences, getCurrentStats, stopScreen});
194348
+ /* */ $s = $s || 0; s: while (true) { switch ($s) { case 0:
194349
+ state = [state];
194350
+ 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);
194351
+ _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; }
194352
+ _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; }
194353
+ facades = $clone(_r$1, js.Value);
194354
+ deactivate = (function(state) { return function() {
194355
+ var x, x$1, x$2;
194356
+ $clone(state[0], js.Value).Set("active", new $Bool(false));
194357
+ $clone(state[0], js.Value).Set("setEncodingPreferences", (x = js.Undefined(), new x.constructor.elem(x)));
194358
+ $clone(state[0], js.Value).Set("getCurrentStats", (x$1 = js.Undefined(), new x$1.constructor.elem(x$1)));
194359
+ $clone(state[0], js.Value).Set("stopScreen", (x$2 = js.Undefined(), new x$2.constructor.elem(x$2)));
194360
+ }; })(state);
194361
+ $s = -1; return [facades, deactivate];
194362
+ /* */ } return; } var $f = {$blk: newJSBridgeFacades, $c: true, $r, _r, _r$1, deactivate, facades, getCurrentStats, setEncodingPreferences, state, stopScreen, $s};return $f;
194363
+ };
194364
+ geometryValue = function(g) {
194365
+ var g;
194366
+ if (g === ptrType$14.nil) {
194367
+ return $ifaceNil;
194368
+ }
194369
+ 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) }]));
194370
+ };
194371
+ 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)}];
194372
+ 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)}];
194373
+ 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\""}]);
193729
194374
  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\""}]);
193730
- 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: ""}]);
194375
+ 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: ""}]);
193731
194376
  ProcessInfo.init("", [{prop: "ScreenID", name: "ScreenID", embedded: false, exported: true, typ: $String, tag: ""}, {prop: "Pid", name: "Pid", embedded: false, exported: true, typ: $Int, tag: ""}]);
193732
194377
  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: ""}]);
193733
194378
  $init = function() {
@@ -193772,10 +194417,11 @@ $packages["github.com/supraio/client-daemon/pkg/render"] = (function() {
193772
194417
  $r = log.$init(); /* */ $s = 37; case 37: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193773
194418
  $r = os.$init(); /* */ $s = 38; case 38: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193774
194419
  $r = path.$init(); /* */ $s = 39; case 39: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193775
- $r = strings.$init(); /* */ $s = 40; case 40: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193776
- $r = sync.$init(); /* */ $s = 41; case 41: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193777
- $r = js.$init(); /* */ $s = 42; case 42: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193778
- $r = time.$init(); /* */ $s = 43; case 43: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
194420
+ $r = strconv.$init(); /* */ $s = 40; case 40: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
194421
+ $r = strings.$init(); /* */ $s = 41; case 41: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
194422
+ $r = sync.$init(); /* */ $s = 42; case 42: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
194423
+ $r = js.$init(); /* */ $s = 43; case 43: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
194424
+ $r = time.$init(); /* */ $s = 44; case 44: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
193779
194425
  onScreenWindowStarted = $throwNilPointerError;
193780
194426
  openScreenWindows = $makeMap($String.keyFor, []);
193781
194427
  mutex = new sync.Mutex.ptr(0, 0);
@@ -193799,7 +194445,7 @@ $packages["main"] = (function() {
193799
194445
  sliceType = $sliceType($String);
193800
194446
  sliceType$1 = $sliceType($emptyInterface);
193801
194447
  main = function() {
193802
- 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, {});
194448
+ 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, {});
193803
194449
  /* */ $s = $s || 0; var $err = null; try { s: while (true) { switch ($s) { case 0: $deferred = []; $curGoroutine.deferStack.push($deferred);
193804
194450
  commandHandler = [commandHandler];
193805
194451
  logFile = [logFile];
@@ -193867,10 +194513,11 @@ $packages["main"] = (function() {
193867
194513
  /* */ } return; } var $f = {$blk: $b, $c: true, $r, _r$5, err$2, $s};return $f;
193868
194514
  }; })(commandHandler, logFile), []]);
193869
194515
  $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; }
193870
- $r = helper.WaitOnStopSignal(signalChannel); /* */ $s = 22; case 22: if($c) { $c = false; $r = $r.$blk(); } if ($r && $r.$blk !== undefined) { break s; }
194516
+ _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; }
194517
+ _r$5;
193871
194518
  $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; }
193872
194519
  $s = -1; return;
193873
- /* */ } 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; } }
194520
+ /* */ } 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; } }
193874
194521
  };
193875
194522
  $init = function() {
193876
194523
  $pkg.$init = function() {};