Advertisement
Guest User

Untitled

a guest
Aug 3rd, 2017
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Haxe 4.02 KB | None | 0 0
  1. package haxeui.org.server;
  2.  
  3. import haxe.Json;
  4. import haxe.Resource;
  5. import hpel.core.Exchange;
  6. import hpel.core.Message;
  7. import hpel.core.Process;
  8. import hpel.core.XMLProcessBuilder;
  9. import hpel.logging.Log;
  10. import hpel.macros.HPELMacros;
  11. import hpel.services.ServiceRespository;
  12. import hpel.util.ANSI;
  13. import js.Lib;
  14. import js.Node;
  15. import js.npm.Express;
  16. import js.npm.express.Request;
  17. import js.npm.express.Response;
  18.  
  19. class Main {
  20.     static function main() {
  21.         js.Lib.require('source-map-support').install();
  22.         haxe.CallStack.wrapCallSite = js.Lib.require('source-map-support').wrapCallSite;
  23.        
  24.        
  25.         HPELMacros.registerProcesses("./hpel");
  26.         ServiceRespository.instance.registerFromXml(Xml.parse(Resource.getString("services.xml")));
  27.         Log.init();
  28.        
  29.        
  30.         var app:Express = new Express();
  31.         app.set('port', 1234);
  32.        
  33.         // ****************************************************************************************
  34.         // site pages / views
  35.         // ****************************************************************************************
  36.         var nunjucks = Node.require("nunjucks");
  37.         nunjucks.configure('../views', {
  38.             autoescape: true,
  39.             express: app,
  40.             watch: true, // not for production
  41.             noCache: true // not for production
  42.         });
  43.  
  44.         var express = Node.require("express");
  45.         app.use(Reflect.field(express, "static")("../public/", { redirect:true } ));
  46.         Macros.addViews("./views");
  47.        
  48.         // ****************************************************************************************
  49.         // hpel api operations
  50.         // ****************************************************************************************
  51.        
  52.         app.get('/api/*', function (req:Request, res:Response) {
  53.             res.render("api/index.html", { request: req } );
  54.         });
  55.        
  56.         app.get('/api/:section/:operation', function (req:Request, res:Response) {
  57.             trace("API REQUEST FROM: " + req.ip);
  58.             var section:String = req.params.section;
  59.             var operation:String = req.params.operation;
  60.  
  61.            
  62.             res.setHeader('Content-Type', 'application/json');
  63.             res.setHeader('Access-Control-Allow-Origin', '*');
  64.            
  65.             var resourcePath:String = 'processes/${section}/${operation}.xml';
  66.             debug('Attempting to run process: ${resourcePath}');
  67.             var processData = Resource.getString(resourcePath);
  68.             if (processData == null) {
  69.                 res.status(404).send('404');
  70.             } else {
  71.                 var xml:Xml = Xml.parse(processData);
  72.                 var process:Process = new XMLProcessBuilder().build(xml);
  73.                 var exchange:Exchange = new Exchange(new Message(parseParams(req.query)));
  74.                 process.execute(exchange, function(result:Exchange) {
  75.                     debug('Process complete: ${resourcePath}');
  76.                     res.send(Json.stringify(result.outMessage.body));
  77.                 });
  78.                
  79.             }
  80.         });
  81.        
  82.         app.listen(app.get('port'), function() {
  83.            trace('Express server listening on port ' + app.get('port'));
  84.         });
  85.     }
  86.    
  87.     public static function parseParams(i:Dynamic):Dynamic {
  88.         if (i == null) {
  89.             return i;
  90.         }
  91.        
  92.         for (f in Reflect.fields(i)) {
  93.             var v = Reflect.field(i, f);
  94.             if (v == "true" || v == "false") {
  95.                 Reflect.setField(i, f, v == "true");
  96.             }
  97.         }
  98.        
  99.         return i;
  100.     }
  101.    
  102.     private static function debug(data:String) {
  103.         #if sys
  104.         Sys.stdout().writeString(ANSI.set(Magenta) + "DEBUG> " + data + "\n" + ANSI.set(Off));
  105.         #elseif nodejs
  106.         js.Node.console.log(ANSI.set(Magenta) + "DEBUG> " + data + ANSI.set(Off));
  107.         #elseif js
  108.         js.Browser.console.log("DEBUG> " + data);
  109.         #end
  110.     }
  111. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement