From 08d068181045f91f0aa160f9b088a18048b948ec Mon Sep 17 00:00:00 2001 From: RblSb Date: Sat, 22 Feb 2020 06:35:57 +0300 Subject: More client buttons --- build/server.js | 139 +++++++++++++++++++++++++++++++++++++++++++------------- 1 file changed, 108 insertions(+), 31 deletions(-) (limited to 'build/server.js') diff --git a/build/server.js b/build/server.js index 14869f0..6c35793 100644 --- a/build/server.js +++ b/build/server.js @@ -1,23 +1,39 @@ // Generated by Haxe 4.0.5 (function ($global) { "use strict"; +var $estr = function() { return js_Boot.__string_rec(this,''); },$hxEnums = $hxEnums || {},$_; function $extend(from, fields) { var proto = Object.create(from); for (var name in fields) proto[name] = fields[name]; if( fields.toString !== Object.prototype.toString ) proto.toString = fields.toString; return proto; } -var Client = function(ws,name,isLeader) { - if(isLeader == null) { - isLeader = false; - } +var ClientGroup = $hxEnums["ClientGroup"] = { __ename__ : true, __constructs__ : ["User","Leader","Admin"] + ,User: {_hx_index:0,__enum__:"ClientGroup",toString:$estr} + ,Leader: {_hx_index:1,__enum__:"ClientGroup",toString:$estr} + ,Admin: {_hx_index:2,__enum__:"ClientGroup",toString:$estr} +}; +var Client = function(ws,id,name,group) { this.ws = ws; + this.id = id; this.name = name; - this.isLeader = isLeader; + var i = group; + if(group == null) { + i = 0; + } + this.group = i; }; Client.__name__ = true; Client.prototype = { - getData: function() { - return { name : this.name, isLeader : this.isLeader}; + setGroupFlag: function(type,flag) { + if(flag) { + this.group |= 1 << type._hx_index; + } else { + this.group &= -1 - (1 << type._hx_index); + } + return flag; + } + ,getData: function() { + return { name : this.name, group : this.group}; } }; var ClientTools = function() { }; @@ -28,20 +44,20 @@ ClientTools.setLeader = function(clients,name) { var client = clients[_g]; ++_g; if(client.name == name) { - client.isLeader = true; - } else if(client.isLeader) { - client.isLeader = false; + client.setGroupFlag(ClientGroup.Leader,true); + } else if((client.group & 2) != 0) { + client.setGroupFlag(ClientGroup.Leader,false); } } }; ClientTools.hasLeader = function(clients) { var _g = 0; - while(_g < clients.length) if(clients[_g++].isLeader) { + while(_g < clients.length) if((clients[_g++].group & 2) != 0) { return true; } return false; }; -ClientTools.getByName = function(clients,name) { +ClientTools.getByName = function(clients,name,def) { var _g = 0; while(_g < clients.length) { var client = clients[_g]; @@ -50,7 +66,7 @@ ClientTools.getByName = function(clients,name) { return client; } } - return null; + return def; }; var EReg = function(r,opt) { this.r = new RegExp(r,opt.split("u").join("")); @@ -406,6 +422,34 @@ js_Boot.__string_rec = function(o,s) { case "function": return ""; case "object": + if(o.__enum__) { + var e = $hxEnums[o.__enum__]; + var n = e.__constructs__[o._hx_index]; + var con = e[n]; + if(con.__params__) { + s = s + "\t"; + return n + "(" + ((function($this) { + var $r; + var _g = []; + { + var _g1 = 0; + var _g2 = con.__params__; + while(true) { + if(!(_g1 < _g2.length)) { + break; + } + var p = _g2[_g1]; + _g1 = _g1 + 1; + _g.push(js_Boot.__string_rec(o[p],s)); + } + } + $r = _g; + return $r; + }(this))).join(",") + ")"; + } else { + return n; + } + } if(((o) instanceof Array)) { var str = "["; s += "\t"; @@ -490,7 +534,8 @@ server_HttpServer.serveFiles = function(req,res) { res.end(tmp1); } else { res.statusCode = 500; - res.end("Error getting the file: " + Std.string(err) + "."); + var tmp2 = "Error getting the file: " + Std.string(err) + "."; + res.end(tmp2); } return; } @@ -540,6 +585,7 @@ var server_Main = function(port,wsPort) { this.messages = []; this.videoTimer = new server_VideoTimer(); this.videoList = []; + this.freeIds = []; this.clients = []; this.rootDir = "" + __dirname + "/.."; this.config = this.getUserConfig(); @@ -551,16 +597,16 @@ var server_Main = function(port,wsPort) { process.on("exit",exit); process.on("SIGINT",exit); process.on("uncaughtException",function(log) { - haxe_Log.trace(log,{ fileName : "src/server/Main.hx", lineNumber : 40, className : "server.Main", methodName : "new"}); + haxe_Log.trace(log,{ fileName : "src/server/Main.hx", lineNumber : 41, className : "server.Main", methodName : "new"}); return; }); process.on("unhandledRejection",function(reason,promise) { - haxe_Log.trace("Unhandled Rejection at:",{ fileName : "src/server/Main.hx", lineNumber : 43, className : "server.Main", methodName : "new", customParams : [reason]}); + haxe_Log.trace("Unhandled Rejection at:",{ fileName : "src/server/Main.hx", lineNumber : 44, className : "server.Main", methodName : "new", customParams : [reason]}); return; }); server_Utils.getGlobalIp(function(ip) { - haxe_Log.trace("Local: http://" + server_Utils.getLocalIp() + ":" + port,{ fileName : "src/server/Main.hx", lineNumber : 48, className : "server.Main", methodName : "new"}); - haxe_Log.trace("Global: http://" + ip + ":" + port,{ fileName : "src/server/Main.hx", lineNumber : 49, className : "server.Main", methodName : "new"}); + haxe_Log.trace("Local: http://" + server_Utils.getLocalIp() + ":" + port,{ fileName : "src/server/Main.hx", lineNumber : 49, className : "server.Main", methodName : "new"}); + haxe_Log.trace("Global: http://" + ip + ":" + port,{ fileName : "src/server/Main.hx", lineNumber : 50, className : "server.Main", methodName : "new"}); return; }); var dir = "" + this.rootDir + "/res"; @@ -589,7 +635,7 @@ server_Main.prototype = { var field = _g1[_g]; ++_g; if(Reflect.field(config,field) == null) { - haxe_Log.trace("Warning: config field \"" + field + "\" is unknown",{ fileName : "src/server/Main.hx", lineNumber : 67, className : "server.Main", methodName : "getUserConfig"}); + haxe_Log.trace("Warning: config field \"" + field + "\" is unknown",{ fileName : "src/server/Main.hx", lineNumber : 68, className : "server.Main", methodName : "getUserConfig"}); } config[field] = Reflect.field(customConfig,field); } @@ -597,9 +643,20 @@ server_Main.prototype = { } ,onConnect: function(ws,req) { var _gthis = this; - haxe_Log.trace("Client connected (" + req.connection.remoteAddress + ")",{ fileName : "src/server/Main.hx", lineNumber : 75, className : "server.Main", methodName : "onConnect"}); - var client = new Client(ws,"Unknown",false); + var ip = req.connection.remoteAddress; + var id = this.freeIds.length > 0 ? this.freeIds.shift() : this.clients.length; + var name = "Guest " + (id + 1); + haxe_Log.trace("" + name + " connected (" + ip + ")",{ fileName : "src/server/Main.hx", lineNumber : 78, className : "server.Main", methodName : "onConnect"}); + var client = new Client(ws,id,name,0); + if(req.connection.localAddress == ip) { + client.group |= 4; + } this.clients.push(client); + if(this.clients.length == 1) { + if(this.videoTimer.isPaused()) { + this.videoTimer.play(); + } + } var tmp = this.config; var tmp1 = this.messages; var client1 = client.name; @@ -615,17 +672,33 @@ server_Main.prototype = { return; }); ws.on("close",function(err) { - haxe_Log.trace("Client " + client.name + " disconnected",{ fileName : "src/server/Main.hx", lineNumber : 98, className : "server.Main", methodName : "onConnect"}); + haxe_Log.trace("Client " + client.name + " disconnected",{ fileName : "src/server/Main.hx", lineNumber : 105, className : "server.Main", methodName : "onConnect"}); + _gthis.sortedPush(_gthis.freeIds,client.id); HxOverrides.remove(_gthis.clients,client); _gthis.sendClientList(); - if(client.isLeader) { + if((client.group & 2) != 0) { if(_gthis.videoTimer.isPaused()) { _gthis.videoTimer.play(); } } + if(_gthis.clients.length == 0) { + _gthis.videoTimer.pause(); + } return; }); } + ,sortedPush: function(ids,id) { + var _g = 0; + var _g1 = ids.length; + while(_g < _g1) { + var i = _g++; + if(id < ids[i]) { + ids.splice(i,0,id); + return; + } + } + ids.push(id); + } ,onMessage: function(client,data) { switch(data.type) { case "AddVideo": @@ -635,6 +708,11 @@ server_Main.prototype = { this.waitVideoStart = haxe_Timer.delay($bind(this,this.startVideoPlayback),3000); } break; + case "ClearChat": + if((client.group & 4) != 0) { + this.broadcast(data); + } + break; case "Connected": break; case "GetTime": @@ -662,8 +740,8 @@ server_Main.prototype = { break; case "Logout": var oldName = client.name; - client.name = "Unknown"; - this.send(client,{ type : data.type, logout : { clientName : oldName, clients : this.clientList()}}); + client.name = "Guest " + (this.clients.indexOf(client) + 1); + this.send(client,{ type : data.type, logout : { oldClientName : oldName, clientName : client.name, clients : this.clientList()}}); this.sendClientList(); break; case "Message": @@ -679,7 +757,7 @@ server_Main.prototype = { var time = "[" + new Date().toTimeString().split(" ")[0] + "] "; this.messages.push({ text : text, name : client.name, time : time}); if(this.messages.length > this.config.serverChatHistory) { - this.messages.pop(); + this.messages.shift(); } this.broadcast(data); break; @@ -687,7 +765,7 @@ server_Main.prototype = { if(this.videoList.length == 0) { return; } - if(!client.isLeader) { + if((client.group & 2) == 0) { return; } this.videoTimer.pause(); @@ -697,7 +775,7 @@ server_Main.prototype = { if(this.videoList.length == 0) { return; } - if(!client.isLeader) { + if((client.group & 2) == 0) { return; } this.videoTimer.play(); @@ -718,7 +796,7 @@ server_Main.prototype = { break; case "SetLeader": ClientTools.setLeader(this.clients,data.setLeader.clientName); - this.sendClientList(); + this.broadcast({ type : "SetLeader", setLeader : { clientName : data.setLeader.clientName}}); if(this.videoList.length == 0) { return; } @@ -733,7 +811,7 @@ server_Main.prototype = { if(this.videoList.length == 0) { return; } - if(!client.isLeader) { + if((client.group & 2) == 0) { return; } this.videoTimer.setTime(data.setTime.time); @@ -886,7 +964,6 @@ sys_FileSystem.exists = function(path) { } }; function $getIterator(o) { if( o instanceof Array ) return HxOverrides.iter(o); else return o.iterator(); } -var $_; function $bind(o,m) { if( m == null ) return null; if( m.__id__ == null ) m.__id__ = $global.$haxeUID++; var f; if( o.hx__closures__ == null ) o.hx__closures__ = {}; else f = o.hx__closures__[m.__id__]; if( f == null ) { f = m.bind(o); o.hx__closures__[m.__id__] = f; } return f; } $global.$haxeUID |= 0; var __map_reserved = {}; -- cgit v1.2.3