diff options
| author | RblSb <msrblsb@gmail.com> | 2020-05-13 09:01:40 +0300 |
|---|---|---|
| committer | RblSb <msrblsb@gmail.com> | 2020-05-13 09:01:40 +0300 |
| commit | aeace14869947769a2688008e05cf7f51e9cf1a4 (patch) | |
| tree | 40aa066f8a966cafe779891b033269615cd0ced5 /src/client | |
| parent | 2d82ca5f1049fb332b521691c29b9d789d08f690 (diff) | |
Sync leader on video start/refresh
Diffstat (limited to 'src/client')
| -rw-r--r-- | src/client/Main.hx | 6 | ||||
| -rw-r--r-- | src/client/Player.hx | 10 |
2 files changed, 15 insertions, 1 deletions
diff --git a/src/client/Main.hx b/src/client/Main.hx index deeb2ec..0844636 100644 --- a/src/client/Main.hx +++ b/src/client/Main.hx @@ -25,6 +25,7 @@ class Main { static inline var SETTINGS_VERSION = 2; public final settings:ClientSettings; public var isSyncActive = true; + public var forceSyncNextTick = false; final clients:Array<Client> = []; var pageTitle = document.title; final host:String; @@ -371,6 +372,8 @@ class Main { case VideoLoaded: player.setTime(0); player.play(); + // try to sync leader after with GetTime events + if (isLeader() && !player.isVideoLoaded()) forceSyncNextTick = true; case RemoveVideo: player.removeItem(data.removeVideo.url); @@ -401,13 +404,14 @@ class Main { final synchThreshold = settings.synchThreshold; final newTime = data.getTime.time; final time = player.getTime(); - if (isLeader()) { + if (isLeader() && !forceSyncNextTick) { // if video is loading on leader // move other clients back in time if (Math.abs(time - newTime) < synchThreshold) return; player.setTime(time, false); return; } + if (player.isVideoLoaded()) forceSyncNextTick = false; if (player.getDuration() < player.getTime()) return; if (!data.getTime.paused) player.play(); else player.pause(); diff --git a/src/client/Player.hx b/src/client/Player.hx index ad10814..cdbccfd 100644 --- a/src/client/Player.hx +++ b/src/client/Player.hx @@ -280,8 +280,14 @@ class Player { public function refresh():Void { if (items.length == 0) return; + final time = getTime(); removeVideo(); setVideo(itemPos); + // restore server time for leader with next GetTime + if (main.isLeader()) { + setTime(time); + main.forceSyncNextTick = true; + } } function duration(time:Float):String { @@ -323,6 +329,10 @@ class Player { return items[itemPos].duration; } + public function isVideoLoaded():Bool { + return player.isVideoLoaded(); + } + public function play():Void { if (!main.isSyncActive) return; if (player == null) return; |
