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/tutorial/haxe/src/Main.hx b/tutorial/haxe/src/Main.hx
index 8f168c1..6bebe71 100644
--- a/tutorial/haxe/src/Main.hx
+++ b/tutorial/haxe/src/Main.hx
@@ -51,7 +51,8 @@
private static var targetPort : Int = 9090;
static function main() {
- #if ! (flash || js)
+
+ #if ! (flash || js || phpwebserver)
try {
ParseArgs();
} catch (e : String) {
@@ -59,6 +60,17 @@
trace(GetHelp());
return;
}
+
+ #elseif phpwebserver
+ //forcing server
+ server = true;
+ trns = http;
+ initPhpWebServer();
+ //check method
+ if(php.Web.getMethod() != 'POST') {
+ Sys.println('http endpoint for thrift test server');
+ return;
+ }
#end
try {
@@ -73,6 +85,29 @@
trace("Completed.");
}
+ #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
+
#if ! (flash || js)
@@ -154,8 +189,9 @@
trace('- socket transport $targetHost:$targetPort');
transport = new TSocket( targetHost, targetPort);
case http:
- trace('- HTTP transport $targetHost');
- transport = new THttpClient( targetHost);
+ var uri = 'http://${targetHost}:${targetPort}';
+ trace('- HTTP transport $uri');
+ transport = new THttpClient(uri);
default:
throw "Unhandled transport";
}
@@ -267,9 +303,20 @@
transport = new TServerSocket( targetPort);
#end
case http:
- throw "HTTP server not implemented yet";
- //trace("- http transport");
- //transport = new THttpClient( targetHost);
+ #if !phpwebserver
+ throw "HTTP server not implemented yet";
+ //trace("- http transport");
+ //transport = new THttpClient( targetHost);
+ #else
+ trace("- http transport");
+ transport = new TWrappingServerTransport(
+ new TStreamTransport(
+ new TFileStream("php://input", Read),
+ new TFileStream("php://output", Append)
+ )
+ );
+
+ #end
default:
throw "Unhandled transport";
}
@@ -301,6 +348,10 @@
var handler = new CalculatorHandler();
var processor = new CalculatorProcessor(handler);
var server = new TSimpleServer( processor, transport, transfactory, protfactory);
+ #if phpwebserver
+ server.runOnce = true;
+ #end
+
return server;
}
@@ -321,4 +372,4 @@
}
}
-
\ No newline at end of file
+