| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102 |
- 'use strict';
- const fs = require('fs');
- const http = require('http');
- const path = require('path');
- const _ = require('lodash');
- const storage = require('./storage');
- const socketIo = require('socket.io');
- const apis = {};
- exports.setup = async function () {
- setApi();
- // use api server
- let port = await storage.setIpcDynamicPort();
- ELog.info('[api] [setup] dynamic port:', port);
- const listen = 'localhost';
- port = port ? port : 7069;
- const server = http.createServer(function(req, res) {
- ELog.info('[ api ] [setup] command received', { method: req.method, url: req.url });
- if ((req.method === 'POST' && req.url === '/send')) {
- let body = '';
- req.setEncoding('utf8');
- req
- .on('data', function(data) {
- body += data;
- })
- .on('end', function() {
- let message;
- try {
- message = JSON.parse(body);
- } catch (e) {
- res.statusCode = 400;
- return res.end('request body parse failure.');
- }
- if (!apis[message.cmd]) {
- ELog.info('[ api ] [setup] invalid command called:', message.cmd);
- res.statusCode = 404;
- return res.end('NG');
- }
- ELog.info('[ api ] [setup] command received message:', message);
- const data = apis[message.cmd](...message.params);
- res.statusCode = 200;
- const result = {
- err: null,
- data: data,
- };
- res.end(JSON.stringify(result));
- });
- } else {
- res.statusCode = 404;
- res.end('NOT FOUND');
- }
- });
- // socket io
- const io = socketIo(server);
- io.on('connection', (socket) => {
- socket.on('ipc', (message, callback) => {
- ELog.info('[ api ] [setup] socket id:' + socket.id + ' message cmd: ' + message.cmd);
- const data = apis[message.cmd](...message.params);
- const result = {
- err: null,
- data: data,
- };
- callback(result);
- });
- });
- server.listen(port, listen, function() {
- ELog.info('[ api ] [setup] server is listening on', `${listen}:${port}`);
- });
- };
- function setApi() {
- const apiDir = path.normalize(__dirname + '/apis');
- // console.log('apiDir:', apiDir);
- fs.readdirSync(apiDir).forEach(function(filename) {
- if (path.extname(filename) === '.js' && filename !== 'index.js') {
- const name = path.basename(filename, '.js');
- const fileObj = require(`./apis/${filename}`);
- _.map(fileObj, function(fn, method) {
- let methodName = getApiName(name, method);
- apis[methodName] = fn;
- // ELog.info('[ Monitor ]', methodName);
- });
- }
- });
- };
- /**
- * get api method name
- * ex.) jsname='user' method='get' => 'user.get'
- * @param {String} jsname
- * @param {String} method
- */
- function getApiName (jsname, method) {
- return jsname + '.' + method;
- //return jsname + method.charAt(0).toUpperCase() + method.slice(1);
- };
|