diff options
| author | RblSb <msrblsb@gmail.com> | 2020-04-26 23:37:29 +0300 |
|---|---|---|
| committer | RblSb <msrblsb@gmail.com> | 2020-04-26 23:37:29 +0300 |
| commit | 9f93fb9783c4647a0e25b67078dded196d035ca9 (patch) | |
| tree | a12ebef2b5ff5da710176654d9144c2acafaf706 | |
| parent | e0f2520fb03ed07a38e96c012c0f599b2fbe7f04 (diff) | |
Fix posible double skip / npe
| -rw-r--r-- | build/server.js | 13 | ||||
| -rw-r--r-- | src/server/Main.hx | 10 |
2 files changed, 17 insertions, 6 deletions
diff --git a/build/server.js b/build/server.js index dae3674..bcff638 100644 --- a/build/server.js +++ b/build/server.js @@ -1414,9 +1414,15 @@ server_Main.prototype = { if(this.videoList.length == 0) { return; } - if(this.videoTimer.getTime() > this.videoList[this.itemPos].duration - 0.01) { - this.videoTimer.stop(); + var maxTime = this.videoList[this.itemPos].duration - 0.01; + if(this.videoTimer.getTime() > maxTime) { + this.videoTimer.pause(); + this.videoTimer.setTime(maxTime); + var currentLength = this.videoList.length; haxe_Timer.delay(function() { + if(_gthis.videoList.length != currentLength) { + return; + } _gthis.onMessage(client,{ type : "SkipVideo", skipVideo : { url : _gthis.videoList[_gthis.itemPos].url}}); return; },1000); @@ -1429,8 +1435,9 @@ server_Main.prototype = { if(this.videoTimer.getRate() != 1) { if(!ClientTools.hasLeader(this.clients)) { this.videoTimer.setRate(1); + } else { + obj.getTime.rate = this.videoTimer.getRate(); } - obj.getTime.rate = this.videoTimer.getRate(); } this.send(client,obj); break; diff --git a/src/server/Main.hx b/src/server/Main.hx index b9c4d52..0023c5f 100644 --- a/src/server/Main.hx +++ b/src/server/Main.hx @@ -426,9 +426,13 @@ class Main { case GetTime: if (videoList.length == 0) return; - if (videoTimer.getTime() > videoList[itemPos].duration - 0.01) { - videoTimer.stop(); + final maxTime = videoList[itemPos].duration - 0.01; + if (videoTimer.getTime() > maxTime) { + videoTimer.pause(); + videoTimer.setTime(maxTime); + final currentLength = videoList.length; Timer.delay(() -> { + if (videoList.length != currentLength) return; onMessage(client, { type: SkipVideo, skipVideo: { url: videoList[itemPos].url @@ -445,7 +449,7 @@ class Main { if (videoTimer.isPaused()) obj.getTime.paused = true; if (videoTimer.getRate() != 1) { if (!clients.hasLeader()) videoTimer.setRate(1); - obj.getTime.rate = videoTimer.getRate(); + else obj.getTime.rate = videoTimer.getRate(); } send(client, obj); |
