THRIFT-3833 haxe http server implementation (by embeding into php web server)
Client: Haxe
Patch: Oleksii Prudkyi <Oleksii.Prudkyi@gmail.com> + some modifications by Jens Geyer
This closes #1013
This closes #1020
diff --git a/test/haxe/src/Arguments.hx b/test/haxe/src/Arguments.hx
index cae91df..cc10749 100644
--- a/test/haxe/src/Arguments.hx
+++ b/test/haxe/src/Arguments.hx
@@ -72,12 +72,18 @@
public function new() {
#if sys
- try {
+ #if !phpwebserver
+ try {
ParseArgs();
- } catch (e : String) {
+ } catch (e : String) {
trace(GetHelp());
throw e;
- }
+ }
+ #else
+ //forcing server
+ server = true;
+ transport = http;
+ #end
#else
trace("WN: Platform does not support program arguments, using defaults.");
#end
diff --git a/test/haxe/src/Main.hx b/test/haxe/src/Main.hx
index 30c04a6..9eb828f 100644
--- a/test/haxe/src/Main.hx
+++ b/test/haxe/src/Main.hx
@@ -31,6 +31,15 @@
class Main
{
static function main() {
+ #if phpwebserver
+ initPhpWebServer();
+ //check method
+ if(php.Web.getMethod() != 'POST') {
+ Sys.println('http endpoint for thrift test server');
+ return;
+ }
+ #end
+
try {
var args = new Arguments();
@@ -48,4 +57,27 @@
}
}
+ #if phpwebserver
+ private static function initPhpWebServer()
+ {
+ //remap trace to error log
+ haxe.Log.trace = function(v:Dynamic, ?infos:haxe.PosInfos)
+ {
+ // handle trace
+ var newValue : Dynamic;
+ if (infos != null && infos.customParams!=null) {
+ var extra:String = "";
+ for( v in infos.customParams )
+ extra += "," + v;
+ newValue = v + extra;
+ }
+ else {
+ newValue = v;
+ }
+ var msg = infos != null ? infos.fileName + ':' + infos.lineNumber + ': ' : '';
+ Sys.stderr().writeString('${msg}${newValue}\n');
+ }
+ }
+ #end
+
}
diff --git a/test/haxe/src/TestClient.hx b/test/haxe/src/TestClient.hx
index 9436865..aa496dc 100644
--- a/test/haxe/src/TestClient.hx
+++ b/test/haxe/src/TestClient.hx
@@ -212,7 +212,9 @@
case socket:
transport = new TSocket(args.host, args.port);
case http:
- transport = new THttpClient(args.host);
+ var uri = 'http://${args.host}:${args.port}';
+ trace('- http client : ${uri}');
+ transport = new THttpClient(uri);
default:
throw "Unhandled transport";
}
diff --git a/test/haxe/src/TestServer.hx b/test/haxe/src/TestServer.hx
index 8f4604a..450c8f2 100644
--- a/test/haxe/src/TestServer.hx
+++ b/test/haxe/src/TestServer.hx
@@ -42,8 +42,18 @@
transport = new TServerSocket( args.port);
case http:
trace("- http");
- throw "HTTP server not implemented yet";
+ #if !phpwebserver
+ throw "HTTP server not implemented yet";
//transport = new THttpServer( targetHost);
+ #else
+ transport = new TWrappingServerTransport(
+ new TStreamTransport(
+ new TFileStream("php://input", Read),
+ new TFileStream("php://output", Append)
+ )
+ );
+
+ #end
default:
throw "Unhandled transport";
}
@@ -84,7 +94,12 @@
switch( args.servertype)
{
case simple:
- server = new TSimpleServer( processor, transport, transfactory, protfactory);
+ var simpleServer = new TSimpleServer( processor, transport, transfactory, protfactory);
+ #if phpwebserver
+ simpleServer.runOnce = true;
+ #end
+ server = simpleServer;
+
default:
throw "Unhandled server type";
}