Last active
August 29, 2015 14:14
-
-
Save AxGord/2b88ce3b6975d06e773f to your computer and use it in GitHub Desktop.
Haxe/Node.JS simple slow server for testing loaders.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
package; | |
import haxe.Timer; | |
import js.Node; | |
/** | |
* SlowServer | |
* @author AxGord | |
*/ | |
class SlowServer { | |
static var speed:Int = 10;//kB per ms | |
static var mime = Node.require('mime'); | |
static function main() { | |
Node.http.createServer(serverConnectHandler).listen(8088); | |
} | |
static function serverConnectHandler(req: NodeHttpServerReq, res: NodeHttpServerResp):Void { | |
var file = req.url.substr(1); | |
trace('Begin send: $file'); | |
if (!Node.fs.existsSync(file)) { | |
trace('File not found'); | |
res.writeHead(404, { } ); | |
res.end('File not found'); | |
return; | |
} | |
var stat = Node.fs.statSync(file); | |
res.writeHead(200, { | |
'Content-Type': mime.lookup(file), | |
'Content-Length': stat.size | |
}); | |
var f = Node.fs.openSync(file, 'r'); | |
var i = 0; | |
function sendFilePart() { | |
if (i >= stat.size) return; | |
var buf = 1024 * speed; | |
if (i + buf > stat.size) buf = stat.size-i; | |
var b = new NodeBuffer(buf); | |
Node.fs.readSync(f, b, 0, buf, i); | |
res.write(b); | |
i += buf; | |
if (i >= stat.size) { | |
res.end(); | |
Node.fs.close(f, function(_) { } ); | |
trace('Send complete: $file'); | |
} else | |
Timer.delay(sendFilePart, 1); | |
} | |
sendFilePart(); | |
} | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
(function () { "use strict"; | |
var console = (1,eval)('this').console || {log:function(){}}; | |
var HxOverrides = function() { }; | |
HxOverrides.substr = function(s,pos,len) { | |
if(pos != null && pos != 0 && len != null && len < 0) return ""; | |
if(len == null) len = s.length; | |
if(pos < 0) { | |
pos = s.length + pos; | |
if(pos < 0) pos = 0; | |
} else if(len < 0) len = s.length + len - pos; | |
return s.substr(pos,len); | |
}; | |
var js = {}; | |
js.Node = function() { }; | |
var SlowServer = function() { }; | |
SlowServer.main = function() { | |
js.Node.require("http").createServer(SlowServer.serverConnectHandler).listen(8088); | |
}; | |
SlowServer.serverConnectHandler = function(req,res) { | |
var file = HxOverrides.substr(req.url,1,null); | |
console.log("Begin send: " + file); | |
if(!js.Node.require("fs").existsSync(file)) { | |
console.log("File not found"); | |
res.writeHead(404,{ }); | |
res.end("File not found"); | |
return; | |
} | |
var stat = js.Node.require("fs").statSync(file); | |
res.writeHead(200,{ 'Content-Type' : SlowServer.mime.lookup(file), 'Content-Length' : stat.size}); | |
var f = js.Node.require("fs").openSync(file,"r"); | |
var i = 0; | |
var sendFilePart; | |
var sendFilePart1 = null; | |
sendFilePart1 = function() { | |
if(i >= stat.size) return; | |
var buf = 1024 * SlowServer.speed; | |
if(i + buf > stat.size) buf = stat.size - i; | |
var b = new Buffer(buf); | |
js.Node.require("fs").readSync(f,b,0,buf,i); | |
res.write(b); | |
i += buf; | |
if(i >= stat.size) { | |
res.end(); | |
js.Node.require("fs").close(f,function(_) { | |
}); | |
console.log("Send complete: " + file); | |
} else haxe.Timer.delay(sendFilePart1,1); | |
}; | |
sendFilePart = sendFilePart1; | |
sendFilePart(); | |
}; | |
var haxe = {}; | |
haxe.Timer = function(time_ms) { | |
var me = this; | |
this.id = setInterval(function() { | |
me.run(); | |
},time_ms); | |
}; | |
haxe.Timer.delay = function(f,time_ms) { | |
var t = new haxe.Timer(time_ms); | |
t.run = function() { | |
t.stop(); | |
f(); | |
}; | |
return t; | |
}; | |
haxe.Timer.prototype = { | |
stop: function() { | |
if(this.id == null) return; | |
clearInterval(this.id); | |
this.id = null; | |
} | |
,run: function() { | |
} | |
}; | |
js.Node.require = require; | |
SlowServer.speed = 10; | |
SlowServer.mime = js.Node.require("mime"); | |
SlowServer.main(); | |
})(); |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment