Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package haxeui.org.server;
- import haxe.Json;
- import haxe.Resource;
- import hpel.core.Exchange;
- import hpel.core.Message;
- import hpel.core.Process;
- import hpel.core.XMLProcessBuilder;
- import hpel.logging.Log;
- import hpel.macros.HPELMacros;
- import hpel.services.ServiceRespository;
- import hpel.util.ANSI;
- import js.Lib;
- import js.Node;
- import js.npm.Express;
- import js.npm.express.Request;
- import js.npm.express.Response;
- class Main {
- static function main() {
- js.Lib.require('source-map-support').install();
- haxe.CallStack.wrapCallSite = js.Lib.require('source-map-support').wrapCallSite;
- HPELMacros.registerProcesses("./hpel");
- ServiceRespository.instance.registerFromXml(Xml.parse(Resource.getString("services.xml")));
- Log.init();
- var app:Express = new Express();
- app.set('port', 1234);
- // ****************************************************************************************
- // site pages / views
- // ****************************************************************************************
- var nunjucks = Node.require("nunjucks");
- nunjucks.configure('../views', {
- autoescape: true,
- express: app,
- watch: true, // not for production
- noCache: true // not for production
- });
- var express = Node.require("express");
- app.use(Reflect.field(express, "static")("../public/", { redirect:true } ));
- Macros.addViews("./views");
- // ****************************************************************************************
- // hpel api operations
- // ****************************************************************************************
- app.get('/api/*', function (req:Request, res:Response) {
- res.render("api/index.html", { request: req } );
- });
- app.get('/api/:section/:operation', function (req:Request, res:Response) {
- trace("API REQUEST FROM: " + req.ip);
- var section:String = req.params.section;
- var operation:String = req.params.operation;
- res.setHeader('Content-Type', 'application/json');
- res.setHeader('Access-Control-Allow-Origin', '*');
- var resourcePath:String = 'processes/${section}/${operation}.xml';
- debug('Attempting to run process: ${resourcePath}');
- var processData = Resource.getString(resourcePath);
- if (processData == null) {
- res.status(404).send('404');
- } else {
- var xml:Xml = Xml.parse(processData);
- var process:Process = new XMLProcessBuilder().build(xml);
- var exchange:Exchange = new Exchange(new Message(parseParams(req.query)));
- process.execute(exchange, function(result:Exchange) {
- debug('Process complete: ${resourcePath}');
- res.send(Json.stringify(result.outMessage.body));
- });
- }
- });
- app.listen(app.get('port'), function() {
- trace('Express server listening on port ' + app.get('port'));
- });
- }
- public static function parseParams(i:Dynamic):Dynamic {
- if (i == null) {
- return i;
- }
- for (f in Reflect.fields(i)) {
- var v = Reflect.field(i, f);
- if (v == "true" || v == "false") {
- Reflect.setField(i, f, v == "true");
- }
- }
- return i;
- }
- private static function debug(data:String) {
- #if sys
- Sys.stdout().writeString(ANSI.set(Magenta) + "DEBUG> " + data + "\n" + ANSI.set(Off));
- #elseif nodejs
- js.Node.console.log(ANSI.set(Magenta) + "DEBUG> " + data + ANSI.set(Off));
- #elseif js
- js.Browser.console.log("DEBUG> " + data);
- #end
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement