From fe4c5fee38f5b85ca3f9d13874e7c056d832730e Mon Sep 17 00:00:00 2001 From: RblSb Date: Tue, 10 Mar 2020 06:00:24 +0300 Subject: Use std.Date --- build/server.js | 142 ++++++++++++++++++++++++++++++++++++++++++++++++----- res/client.js | 15 ++++-- src/client/Main.hx | 5 +- src/server/Main.hx | 5 +- 4 files changed, 145 insertions(+), 22 deletions(-) diff --git a/build/server.js b/build/server.js index 65d13a9..5134d74 100644 --- a/build/server.js +++ b/build/server.js @@ -69,6 +69,100 @@ ClientTools.getByName = function(clients,name,def) { } return def; }; +var DateTools = function() { }; +DateTools.__name__ = true; +DateTools.__format_get = function(d,e) { + switch(e) { + case "%": + return "%"; + case "A": + return DateTools.DAY_NAMES[d.getDay()]; + case "B": + return DateTools.MONTH_NAMES[d.getMonth()]; + case "C": + return StringTools.lpad(Std.string(d.getFullYear() / 100 | 0),"0",2); + case "D": + return DateTools.__format(d,"%m/%d/%y"); + case "F": + return DateTools.__format(d,"%Y-%m-%d"); + case "I":case "l": + var hour = d.getHours() % 12; + return StringTools.lpad(Std.string(hour == 0 ? 12 : hour),e == "I" ? "0" : " ",2); + case "M": + return StringTools.lpad(Std.string(d.getMinutes()),"0",2); + case "R": + return DateTools.__format(d,"%H:%M"); + case "S": + return StringTools.lpad(Std.string(d.getSeconds()),"0",2); + case "T": + return DateTools.__format(d,"%H:%M:%S"); + case "Y": + return Std.string(d.getFullYear()); + case "a": + return DateTools.DAY_SHORT_NAMES[d.getDay()]; + case "b":case "h": + return DateTools.MONTH_SHORT_NAMES[d.getMonth()]; + case "d": + return StringTools.lpad(Std.string(d.getDate()),"0",2); + case "e": + return Std.string(d.getDate()); + case "H":case "k": + return StringTools.lpad(Std.string(d.getHours()),e == "H" ? "0" : " ",2); + case "m": + return StringTools.lpad(Std.string(d.getMonth() + 1),"0",2); + case "n": + return "\n"; + case "p": + if(d.getHours() > 11) { + return "PM"; + } else { + return "AM"; + } + break; + case "r": + return DateTools.__format(d,"%I:%M:%S %p"); + case "s": + return Std.string(d.getTime() / 1000 | 0); + case "t": + return "\t"; + case "u": + var t = d.getDay(); + if(t == 0) { + return "7"; + } else if(t == null) { + return "null"; + } else { + return "" + t; + } + break; + case "w": + return Std.string(d.getDay()); + case "y": + return StringTools.lpad(Std.string(d.getFullYear() % 100),"0",2); + default: + throw new js__$Boot_HaxeError("Date.format %" + e + "- not implemented yet."); + } +}; +DateTools.__format = function(d,f) { + var r_b = ""; + var p = 0; + while(true) { + var np = f.indexOf("%",p); + if(np < 0) { + break; + } + var len = np - p; + r_b += len == null ? HxOverrides.substr(f,p,null) : HxOverrides.substr(f,p,len); + r_b += Std.string(DateTools.__format_get(d,HxOverrides.substr(f,np + 1,1))); + p = np + 2; + } + var len1 = f.length - p; + r_b += len1 == null ? HxOverrides.substr(f,p,null) : HxOverrides.substr(f,p,len1); + return r_b; +}; +DateTools.format = function(d,f) { + return DateTools.__format(d,f); +}; var EReg = function(r,opt) { this.r = new RegExp(r,opt.split("u").join("")); }; @@ -147,6 +241,14 @@ EReg.prototype = { }; var HxOverrides = function() { }; HxOverrides.__name__ = true; +HxOverrides.dateStr = function(date) { + var m = date.getMonth() + 1; + var d = date.getDate(); + var h = date.getHours(); + var mi = date.getMinutes(); + var s = date.getSeconds(); + return date.getFullYear() + "-" + (m < 10 ? "0" + m : "" + m) + "-" + (d < 10 ? "0" + d : "" + d) + " " + (h < 10 ? "0" + h : "" + h) + ":" + (mi < 10 ? "0" + mi : "" + mi) + ":" + (s < 10 ? "0" + s : "" + s); +}; HxOverrides.substr = function(s,pos,len) { if(len == null) { len = s.length; @@ -306,6 +408,16 @@ StringTools.startsWith = function(s,start) { return false; } }; +StringTools.lpad = function(s,c,l) { + if(c.length <= 0) { + return s; + } + var buf_b = ""; + l -= s.length; + while(buf_b.length < l) buf_b += c == null ? "null" : "" + c; + buf_b += s == null ? "null" : "" + s; + return buf_b; +}; StringTools.replace = function(s,sub,by) { return s.split(sub).join(by); }; @@ -976,8 +1088,8 @@ var server_Main = function() { } server_Utils.getGlobalIp(function(ip) { _gthis.globalIp = ip; - haxe_Log.trace("Local: http://" + _gthis.localIp + ":" + _gthis.port,{ fileName : "src/server/Main.hx", lineNumber : 79, className : "server.Main", methodName : "new"}); - haxe_Log.trace("Global: http://" + _gthis.globalIp + ":" + _gthis.port,{ fileName : "src/server/Main.hx", lineNumber : 80, className : "server.Main", methodName : "new"}); + haxe_Log.trace("Local: http://" + _gthis.localIp + ":" + _gthis.port,{ fileName : "src/server/Main.hx", lineNumber : 78, className : "server.Main", methodName : "new"}); + haxe_Log.trace("Global: http://" + _gthis.globalIp + ":" + _gthis.port,{ fileName : "src/server/Main.hx", lineNumber : 79, className : "server.Main", methodName : "new"}); return; }); var dir = "" + this.rootDir + "/res"; @@ -1046,7 +1158,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 : 130, className : "server.Main", methodName : "getUserConfig"}); + haxe_Log.trace("Warning: config field \"" + field + "\" is unknown",{ fileName : "src/server/Main.hx", lineNumber : 129, className : "server.Main", methodName : "getUserConfig"}); } config[field] = Reflect.field(customConfig,field); } @@ -1067,7 +1179,7 @@ server_Main.prototype = { js_node_Fs.writeFileSync("" + folder + "/users.json",JSON.stringify(users,null,"\t")); } ,saveState: function() { - haxe_Log.trace("Saving state...",{ fileName : "src/server/Main.hx", lineNumber : 154, className : "server.Main", methodName : "saveState"}); + haxe_Log.trace("Saving state...",{ fileName : "src/server/Main.hx", lineNumber : 153, className : "server.Main", methodName : "saveState"}); var json = JSON.stringify({ videoList : this.videoList, isPlaylistOpen : this.isPlaylistOpen, itemPos : this.itemPos, messages : this.messages, timer : { time : this.videoTimer.getTime(), paused : this.videoTimer.isPaused()}},null,"\t"); js_node_Fs.writeFileSync(this.statePath,json); } @@ -1075,7 +1187,7 @@ server_Main.prototype = { if(!sys_FileSystem.exists(this.statePath)) { return; } - haxe_Log.trace("Loading state...",{ fileName : "src/server/Main.hx", lineNumber : 171, className : "server.Main", methodName : "loadState"}); + haxe_Log.trace("Loading state...",{ fileName : "src/server/Main.hx", lineNumber : 170, className : "server.Main", methodName : "loadState"}); var data = JSON.parse(js_node_Fs.readFileSync(this.statePath,{ encoding : "utf8"})); this.videoList.length = 0; this.messages.length = 0; @@ -1092,13 +1204,12 @@ server_Main.prototype = { this.videoTimer.pause(); } ,logError: function(type,data) { - haxe_Log.trace(type,{ fileName : "src/server/Main.hx", lineNumber : 185, className : "server.Main", methodName : "logError", customParams : [data]}); + haxe_Log.trace(type,{ fileName : "src/server/Main.hx", lineNumber : 184, className : "server.Main", methodName : "logError", customParams : [data]}); var crashesFolder = "" + this.rootDir + "/user/crashes"; - var name = new Date().toISOString() + "-" + type; if(!sys_FileSystem.exists(crashesFolder)) { sys_FileSystem.createDirectory(crashesFolder); } - js_node_Fs.writeFileSync("" + crashesFolder + "/" + name + ".json",JSON.stringify(data,null,"\t")); + js_node_Fs.writeFileSync("" + crashesFolder + "/" + (DateTools.format(new Date(),"%Y-%m-%d_%H_%M_%S") + "-" + type) + ".json",JSON.stringify(data,null,"\t")); } ,initIntergationHandlers: function() { var _gthis = this; @@ -1108,7 +1219,7 @@ server_Main.prototype = { return; } var url = "http://" + process.env["APP_URL"]; - haxe_Log.trace("Ping " + url,{ fileName : "src/server/Main.hx", lineNumber : 199, className : "server.Main", methodName : "initIntergationHandlers"}); + haxe_Log.trace("Ping " + url,{ fileName : "src/server/Main.hx", lineNumber : 198, className : "server.Main", methodName : "initIntergationHandlers"}); js_node_Http.get(url,function(r) { return; }); @@ -1123,14 +1234,14 @@ server_Main.prototype = { } this.userList.admins.push({ name : name, hash : hash}); this.writeUsers(this.userList); - haxe_Log.trace("Admin " + name + " added.",{ fileName : "src/server/Main.hx", lineNumber : 214, className : "server.Main", methodName : "addAdmin"}); + haxe_Log.trace("Admin " + name + " added.",{ fileName : "src/server/Main.hx", lineNumber : 213, className : "server.Main", methodName : "addAdmin"}); } ,onConnect: function(ws,req) { var _gthis = this; 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 : 221, className : "server.Main", methodName : "onConnect"}); + haxe_Log.trace("" + name + " connected (" + ip + ")",{ fileName : "src/server/Main.hx", lineNumber : 220, className : "server.Main", methodName : "onConnect"}); var client = new Client(ws,req,id,name,0); client.setGroupFlag(ClientGroup.Admin,req.connection.localAddress == ip); this.clients.push(client); @@ -1154,7 +1265,7 @@ server_Main.prototype = { return; }); ws.on("close",function(err) { - haxe_Log.trace("Client " + client.name + " disconnected",{ fileName : "src/server/Main.hx", lineNumber : 251, className : "server.Main", methodName : "onConnect"}); + haxe_Log.trace("Client " + client.name + " disconnected",{ fileName : "src/server/Main.hx", lineNumber : 250, className : "server.Main", methodName : "onConnect"}); server_Utils.sortedPush(_gthis.freeIds,client.id); HxOverrides.remove(_gthis.clients,client); _gthis.sendClientList(); @@ -1293,7 +1404,7 @@ server_Main.prototype = { } data.message.text = text; data.message.clientName = client.name; - var time = "[" + new Date().toTimeString().split(" ")[0] + "] "; + var time = "[" + HxOverrides.dateStr(new Date()).split(" ")[1] + "] "; this.messages.push({ text : text, name : client.name, time : time}); if(this.messages.length > this.config.serverChatHistory) { this.messages.shift(); @@ -1695,10 +1806,15 @@ $global.$haxeUID |= 0; var __map_reserved = {}; String.__name__ = true; Array.__name__ = true; +Date.__name__ = "Date"; Object.defineProperty(js__$Boot_HaxeError.prototype,"message",{ get : function() { return String(this.val); }}); js_Boot.__toStr = ({ }).toString; +DateTools.DAY_SHORT_NAMES = ["Sun","Mon","Tue","Wed","Thu","Fri","Sat"]; +DateTools.DAY_NAMES = ["Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"]; +DateTools.MONTH_SHORT_NAMES = ["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov","Dec"]; +DateTools.MONTH_NAMES = ["January","February","March","April","May","June","July","August","September","October","November","December"]; Lang.langs = new haxe_ds_StringMap(); Lang.ids = ["en","ru"]; server_HttpServer.mimeTypes = (function($this) { diff --git a/res/client.js b/res/client.js index 932f180..4870d85 100644 --- a/res/client.js +++ b/res/client.js @@ -82,6 +82,14 @@ EReg.prototype = { }; var HxOverrides = function() { }; HxOverrides.__name__ = true; +HxOverrides.dateStr = function(date) { + var m = date.getMonth() + 1; + var d = date.getDate(); + var h = date.getHours(); + var mi = date.getMinutes(); + var s = date.getSeconds(); + return date.getFullYear() + "-" + (m < 10 ? "0" + m : "" + m) + "-" + (d < 10 ? "0" + d : "" + d) + " " + (h < 10 ? "0" + h : "" + h) + ":" + (mi < 10 ? "0" + mi : "" + mi) + ":" + (s < 10 ? "0" + s : "" + s); +}; HxOverrides.substr = function(s,pos,len) { if(len == null) { len = s.length; @@ -977,7 +985,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 : 260, className : "client.Main", methodName : "onMessage", customParams : [data[t1]]}); + haxe_Log.trace("Event: " + data.type,{ fileName : "src/client/Main.hx", lineNumber : 259, className : "client.Main", methodName : "onMessage", customParams : [data[t1]]}); switch(data.type) { case "AddVideo": this.player.addVideoItem(data.addVideo.item,data.addVideo.atEnd); @@ -1250,7 +1258,7 @@ client_Main.prototype = { } var msgBuf = window.document.querySelector("#messagebuffer"); var div = window.document.createElement("div"); - var time = "[" + new Date().toTimeString().split(" ")[0] + "] "; + var time = "[" + HxOverrides.dateStr(new Date()).split(" ")[1] + "] "; switch(type) { case 1: div.className = "server-msg-reconnect"; @@ -1308,7 +1316,7 @@ client_Main.prototype = { var tstamp = window.document.createElement("span"); tstamp.className = "timestamp"; if(time == null) { - time = "[" + new Date().toTimeString().split(" ")[0] + "] "; + time = "[" + HxOverrides.dateStr(new Date()).split(" ")[1] + "] "; } tstamp.textContent = time; var nameDiv = window.document.createElement("strong"); @@ -2764,6 +2772,7 @@ var __map_reserved = {}; if( String.fromCodePoint == null ) String.fromCodePoint = function(c) { return c < 0x10000 ? String.fromCharCode(c) : String.fromCharCode((c>>10)+0xD7C0)+String.fromCharCode((c&0x3FF)+0xDC00); } String.__name__ = true; Array.__name__ = true; +Date.__name__ = "Date"; Object.defineProperty(js__$Boot_HaxeError.prototype,"message",{ get : function() { return String(this.val); }}); diff --git a/src/client/Main.hx b/src/client/Main.hx index 8edeb8f..0db93a8 100644 --- a/src/client/Main.hx +++ b/src/client/Main.hx @@ -11,7 +11,6 @@ import js.html.InputElement; import js.html.WebSocket; import js.Browser; import js.Browser.document; -import js.lib.Date; import Client.ClientData; import Types.VideoData; import Types.Config; @@ -508,7 +507,7 @@ class Main { public function serverMessage(type:Int, ?text:String, isText = true):Void { final msgBuf = ge("#messagebuffer"); final div = document.createDivElement(); - final time = "[" + new Date().toTimeString().split(" ")[0] + "] "; + final time = "[" + Date.now().toString().split(" ")[1] + "] "; switch (type) { case 1: div.className = "server-msg-reconnect"; @@ -560,7 +559,7 @@ class Main { final tstamp = document.createSpanElement(); tstamp.className = "timestamp"; - if (time == null) time = "[" + new Date().toTimeString().split(" ")[0] + "] "; + if (time == null) time = "[" + Date.now().toString().split(" ")[1] + "] "; tstamp.textContent = time; final nameDiv = document.createElement("strong"); diff --git a/src/server/Main.hx b/src/server/Main.hx index e9dd816..bf334a6 100644 --- a/src/server/Main.hx +++ b/src/server/Main.hx @@ -11,7 +11,6 @@ import js.npm.ws.Server as WSServer; import js.npm.ws.WebSocket; import js.node.http.IncomingMessage; import js.node.Http; -import js.lib.Date; import Client.ClientData; import Types.Config; import Types.Permission; @@ -184,8 +183,8 @@ class Main { function logError(type:String, data:Dynamic):Void { trace(type, data); final crashesFolder = '$rootDir/user/crashes'; - final name = new Date().toISOString() + "-" + type; if (!FileSystem.exists(crashesFolder)) FileSystem.createDirectory(crashesFolder); + final name = DateTools.format(Date.now(), "%Y-%m-%d_%H_%M_%S") + "-" + type; File.saveContent('$crashesFolder/$name.json', Json.stringify(data, "\t")); } @@ -329,7 +328,7 @@ class Main { } data.message.text = text; data.message.clientName = client.name; - final time = "[" + new Date().toTimeString().split(" ")[0] + "] "; + final time = "[" + Date.now().toString().split(" ")[1] + "] "; messages.push({text: text, name: client.name, time: time}); if (messages.length > config.serverChatHistory) messages.shift(); broadcast(data); -- cgit v1.2.3