aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRblSb <msrblsb@gmail.com>2020-05-13 09:01:40 +0300
committerRblSb <msrblsb@gmail.com>2020-05-13 09:01:40 +0300
commitaeace14869947769a2688008e05cf7f51e9cf1a4 (patch)
tree40aa066f8a966cafe779891b033269615cd0ced5
parent2d82ca5f1049fb332b521691c29b9d789d08f690 (diff)
Sync leader on video start/refresh
-rw-r--r--res/client.js19
-rw-r--r--src/client/Main.hx6
-rw-r--r--src/client/Player.hx10
3 files changed, 32 insertions, 3 deletions
diff --git a/res/client.js b/res/client.js
index d348a2d..cecba6b 100644
--- a/res/client.js
+++ b/res/client.js
@@ -1000,6 +1000,7 @@ var client_Main = function(host,port) {
this.globalIp = "";
this.pageTitle = window.document.title;
this.clients = [];
+ this.forceSyncNextTick = false;
this.isSyncActive = true;
var _gthis = this;
this.player = new client_Player(this);
@@ -1280,7 +1281,7 @@ client_Main.prototype = {
var data = JSON.parse(e.data);
var t = data.type;
var t1 = t.charAt(0).toLowerCase() + HxOverrides.substr(t,1,null);
- haxe_Log.trace("Event: " + data.type,{ fileName : "src/client/Main.hx", lineNumber : 324, className : "client.Main", methodName : "onMessage", customParams : [data[t1]]});
+ haxe_Log.trace("Event: " + data.type,{ fileName : "src/client/Main.hx", lineNumber : 325, className : "client.Main", methodName : "onMessage", customParams : [data[t1]]});
switch(data.type) {
case "AddVideo":
this.player.addVideoItem(data.addVideo.item,data.addVideo.atEnd);
@@ -1314,13 +1315,16 @@ client_Main.prototype = {
var synchThreshold = this.settings.synchThreshold;
var newTime = data.getTime.time;
var time = this.player.getTime();
- if((this.personal.group & 1 << ClientGroup.Leader._hx_index) != 0) {
+ if((this.personal.group & 1 << ClientGroup.Leader._hx_index) != 0 && !this.forceSyncNextTick) {
if(Math.abs(time - newTime) < synchThreshold) {
return;
}
this.player.setTime(time,false);
return;
}
+ if(this.player.isVideoLoaded()) {
+ this.forceSyncNextTick = false;
+ }
if(this.player.getDuration() < this.player.getTime()) {
return;
}
@@ -1438,6 +1442,9 @@ client_Main.prototype = {
case "VideoLoaded":
this.player.setTime(0);
this.player.play();
+ if((this.personal.group & 1 << ClientGroup.Leader._hx_index) != 0 && !this.player.isVideoLoaded()) {
+ this.forceSyncNextTick = true;
+ }
break;
}
}
@@ -2054,8 +2061,13 @@ client_Player.prototype = {
if(this.items.length == 0) {
return;
}
+ var time = this.getTime();
this.removeVideo();
this.setVideo(this.itemPos);
+ if((this.main.personal.group & 2) != 0) {
+ this.setTime(time);
+ this.main.forceSyncNextTick = true;
+ }
}
,duration: function(time) {
var h = time / 60 / 60 | 0;
@@ -2099,6 +2111,9 @@ client_Player.prototype = {
}
return this.items[this.itemPos].duration;
}
+ ,isVideoLoaded: function() {
+ return this.player.isVideoLoaded();
+ }
,play: function() {
if(!this.main.isSyncActive) {
return;
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;
send patches to the email below
yukais@pinapelz.com
include the subject [PATCH repo_name]
pinapelz.com
homepage