diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/Types.hx | 4 | ||||
| -rw-r--r-- | src/client/Main.hx | 26 | ||||
| -rw-r--r-- | src/server/Main.hx | 7 |
3 files changed, 34 insertions, 3 deletions
diff --git a/src/Types.hx b/src/Types.hx index 8a0bde2..643fd4f 100644 --- a/src/Types.hx +++ b/src/Types.hx @@ -84,6 +84,9 @@ typedef WsEvent = { ?setTime:{ time:Float }, + ?rewind:{ + time:Float + }, ?setLeader:{ clientName:String } @@ -105,6 +108,7 @@ enum abstract WsEventType(String) { var Play; var GetTime; var SetTime; + var Rewind; var SetLeader; var ClearChat; } diff --git a/src/client/Main.hx b/src/client/Main.hx index f9232eb..dc5a803 100644 --- a/src/client/Main.hx +++ b/src/client/Main.hx @@ -201,6 +201,8 @@ class Main { final time = player.getTime(); if (Math.abs(time - newTime) < 2) return; player.setTime(newTime); + case Rewind: + player.setTime(data.rewind.time); case SetLeader: clients.setLeader(data.setLeader.clientName); updateUserList(); @@ -366,8 +368,12 @@ class Main { nameDiv.innerHTML = name + ": "; final textDiv = document.createSpanElement(); - for (filter in filters) { - text = filter.regex.replace(text, filter.replace); + if (text.startsWith("/")) { + if (name == personal.name) handleCommands(text.substr(1)); + } else { + for (filter in filters) { + text = filter.regex.replace(text, filter.replace); + } } textDiv.innerHTML = text; @@ -380,7 +386,7 @@ class Main { while (msgBuf.children.length > 200) msgBuf.removeChild(msgBuf.firstChild); msgBuf.scrollTop = msgBuf.scrollHeight; } - if (personal.name == name) { + if (name == personal.name) { msgBuf.scrollTop = msgBuf.scrollHeight; } if (document.hidden && onBlinkTab == null) { @@ -394,6 +400,20 @@ class Main { } } + final matchNumbers = ~/^-?[0-9]+$/; + + function handleCommands(text:String):Void { + switch (text) { + case "clear": + if (isAdmin()) send({type: ClearChat}); + } + if (matchNumbers.match(text)) { + send({type: Rewind, rewind: { + time: Std.parseInt(text) + }}); + } + } + function setLeaderButton(flag:Bool):Void { final leaderBtn = ge("#leader_btn"); if (isLeader()) { diff --git a/src/server/Main.hx b/src/server/Main.hx index 45be2af..cdf6924 100644 --- a/src/server/Main.hx +++ b/src/server/Main.hx @@ -219,6 +219,13 @@ class Main { if (!client.isLeader) return; videoTimer.setTime(data.setTime.time); broadcastExcept(client, data); + case Rewind: + if (videoList.length == 0) return; + // TODO permission + data.rewind.time += videoTimer.getTime(); + if (data.rewind.time < 0) data.rewind.time = 0; + videoTimer.setTime(data.rewind.time); + broadcast(data); case SetLeader: clients.setLeader(data.setLeader.clientName); broadcast({ |
