123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440 |
- /*
- 回复油气回收在线监控站级系统定义
- TOKEN_NULL_R 获取token无效
- CONNECT_ERROR_T 连接第三方服务器失败
- INTERFACE_UNDEFINED 接口未定义
- */
- require('./HtmlServer.js')
- var crypto = require('crypto');
- const EventEmitter = require('events');
- const emitter = new EventEmitter()
- emitter.setMaxListeners(100)
- // var MongoClient = require('mongodb').MongoClient;
- // var dburl = "mongodb://localhost:27017/vr";
- // MongoClient.connect(dburl, { useNewUrlParser: true }, function (err, db) {
- // if (err) throw err;
- // console.log("数据库已创建!");
- // });
- var mysql = require('mysql');
- var connection = mysql.createConnection({
- host: 'localhost',
- user: 'root',
- password: 'HS1205',
- database: 'vr'
- });
- connection.connect();
- //log
- var sd = require('silly-datetime');
- var time = sd.format(new Date(), 'YYYY-MM-DD');
- const log4js = require('log4js');
- log4js.configure({
- appenders: { WebLog: { type: 'file', filename: './WebLog/' + time + '.log' } },
- categories: { default: { appenders: ['WebLog'], level: 'trace' } }
- });
- const log = log4js.getLogger('WebLog');
- console.log('服务器启动!');
- log.trace('服务器启动!');
- var logs = [];
- var oneSecond = 1000;
- setInterval(function () {
- var time2 = sd.format(new Date(), 'YYYY-MM-DD');
- if (time2 != time) {
- log4js.configure({
- appenders: { WebLog: { type: 'file', filename: './WebLog/' + time2 + '.log' } },
- categories: { default: { appenders: ['WebLog'], level: 'trace' } }
- });
- time = time2;
- }
- }, oneSecond);
- var http0 = require('http');
- var qs = require('querystring');
- var options = {
- hostname: '101.231.215.60',
- port: 15780,
- path: '/eldf.portal-service/auth/equipmentLogin',
- method: 'POST',
- headers: {
- 'Content-Type': 'application/x-www-form-urlencoded; charset=UTF-8'
- }
- };
- function prehandle(key, ra, json, inf) {
- var path;
- var ip;
- if (ra) {
- if (ra == '::1') {
- ip = 'localhost'
- path = key + ' ' + ip;
- }
- else {
- ip = ra.split('::')[1].split(':')[1]
- path = key + ' ' + ip;
- }
- }
- else {
- console.log('ra 无定义');
- return;
- }
- console.log(path);
- log4js.configure({
- appenders: { WebLog: { type: 'file', filename: './WebLog/' + path + '/' + time + '.log' } },
- categories: { default: { appenders: ['WebLog'], level: 'trace' } }
- });
- if (inf == 'GSRecycleDataEvent' || inf == 'GSAlarmDataEvent' || inf == 'GSConfigurationDataEvent') {
- var e0 = Buffer(JSON.parse(json)['message']['busObject'], 'base64').toString();
- e0 = JSON.parse(e0);
- e0['userid'] = key;
- e0['ip'] = ip;
- var setname;
- if (inf == 'GSRecycleDataEvent') {
- setname = 'record'
- }
- else if (inf == 'GSAlarmDataEvent') {
- setname = 'warning'
- }
- else if (inf == 'GSConfigurationDataEvent') {
- setname = 'config'
- }
- if (setname == 'record') {
- var addSql = 'INSERT INTO t_records(GID,id,name,fip,noz,vlr,yll,qll,time,ip) VALUES(0,?,?,?,?,?,?,?,?,?)';
- //var addSqlParams = [2, '', 2, 2, 0.9, , , '2019-03-05 17:05:10', 'local'];
- var addSqlParams = [e0.userid, "", e0.jyjid, e0.jyqid, e0.al,e0.yll ,e0.qll , e0.monitorTime, e0.ip];
- //增
- connection.query(addSql, addSqlParams, function (err, result) {
- if (err) {
- console.log('[INSERT ERROR] - ', err.message);
- return;
- }
- console.log('--------------------------INSERT----------------------------');
- //console.log('INSERT ID:',result.insertId);
- console.log('INSERT ID:', result);
- console.log('-----------------------------------------------------------------\n\n');
- });
- }
- // MongoClient.connect(dburl, { useNewUrlParser: true }, function (err, db) {
- // if (err) throw err;
- // var dbo = db.db("vr");
- // var myobj = e0;
- // dbo.collection(setname).insertOne(myobj, function (err, res) {
- // if (err) throw err;
- // console.log(setname + "插入数据库成功");
- // db.close();
- // });
- // });
- }
- else if (inf == 'GSEnvironmentDataEvent') {
- var e0 = Buffer(JSON.parse(json)['message']['busObject'], 'base64').toString();
- e0 = JSON.parse(e0);
- var e2 = [];
- for (var i = 0; i < e0.length; i++) {
- var e1 = e0[i];
- e1['userid'] = key;
- e1['ip'] = ip;
- e2.push(e1);
- }
- // MongoClient.connect(dburl, { useNewUrlParser: true }, function (err, db) {
- // if (err) throw err;
- // var dbo = db.db("vr");
- // var myobj = e2;
- // dbo.collection("envir").insertMany(myobj, function (err, res) {
- // if (err) throw err;
- // console.log("环境数据插入成功");
- // db.close();
- // });
- // });
- }
- }
- function SendData(params, res, key) {
- //计算hamc
- var readjson = JSON.parse(params.query.json);
- var caldata = JSON.stringify((JSON.parse(params.query.json))['message']);
- var hashread = crypto.createHmac('SHA256', "aEUjjsauUjK93").update(caldata).digest('hex');
- readjson['hmac'] = hashread;
- var sendjson = JSON.stringify(readjson);
- var sendData = sendjson;
- //向第三方服务器发送数据
- sendcount_++
- console.log(`${sendcount_} send`)
- times[sendcount_] = new Date();
- socket[key].emit(params.query.in, sendData, function (data) { //data为服务器端返回的数据
- console.log('收到远程返回数据:' + data);
- log.trace('收到远程返回数据' + data);
- //将第三方服务器返回的数据发回给http client,即油气回收在线监控站级系统
- res.setHeader("content-type", "text/html;charset=UTF-8")
- res.end(data)
- recvcount++;
- console.log(`${recvcount} recv`)
- if (times[recvcount]) {
- console.log(`耗时 ${(new Date()).getTime() - times[recvcount].getTime()} ms`)
- }
- else {
- console.log('没找到对应的sendcount_')
- }
- });
- }
- var client = [];
- var socket = [];
- var clientcount = 0;
- var sendcount_ = 0;
- var recvcount = 0;
- var times = [];
- var con = require('./conn.js');
- function Timer_Main(Interval) {
- }
- var myInterval_main = setInterval(Timer_Main, 1000, "");
- const http = require("http")
- const url = require("url")
- const queryString = require("querystring")
- //建立http server,监听来自http client,即油气回收站级系统的数据
- const server = http.createServer((req, res) => {
- //req.url 请求的URL
- // GET QUERY params
- res.setHeader("Access-Control-Allow-Origin", "*");
- let methods = req.method;
- if (methods == "GET") {
- let params = url.parse(req.url, true, true);
- if (params.href == "/favicon.ico") {
- return;
- }
- else {
- var cityno = params.query.cityno;
- if (cityno == "0") {
- if (!params.query.id || params.query.id == '' || params.query.id == '0') {
- console.log('无效的用户标识' + req.headers.host + ' ' + params.query.cc);
- log.trace('无效的用户标识' + req.headers.host + ' ' + params.query.cc);
- return;
- }
- var key = params.query.id;
- prehandle(key, req.connection.remoteAddress, params.query.json, params.query.in)
- console.log('收到客户端请求数据:' + params.query.json);
- log.trace('收到客户端请求数据' + params.query.json);
- clientcount++;
- console.log('clientcount:', clientcount);
- res.setHeader("content-type", "text/html;charset=UTF-8")
- res.end('data')
- return;
- }
- else if (cityno == "1") {
- if (!params.query.cc || params.query.cc == '') {
- log4js.configure({
- appenders: { WebLog: { type: 'file', filename: './WebLog/' + time + '.log' } },
- categories: { default: { appenders: ['WebLog'], level: 'trace' } }
- });
- console.log('无效的用户标识' + req.headers.host + ' ' + params.query.cc);
- log.trace('无效的用户标识' + req.headers.host + ' ' + params.query.cc);
- return;
- }
- }
- else {
- log4js.configure({
- appenders: { WebLog: { type: 'file', filename: './WebLog/' + time + '.log' } },
- categories: { default: { appenders: ['WebLog'], level: 'trace' } }
- });
- console.log('无效的城市标识' + req.headers.host + ' ' + cityno);
- log.trace('无效的城市标识' + req.headers.host + ' ' + cityno);
- return;
- }
- }
- var key = params.query.cc; //不同客户端的唯一标识,目前还未最终确定,先用cc
- if (!client[key]) //第一次收到某客户端的数据
- {
- var user = {};
- user.cc = params.query.cc;
- user.un = params.query.un;
- user.pw = params.query.pw;
- user.hmac = Buffer(params.query.hc, 'base64').toString();
- user.ConnectState = false;
- client[key] = user;
- }
- else {
- if (socket[key]) {
- client[key].ConnectState = socket[key].connected;
- }
- else {
- client[key].ConnectState = false;
- }
- }
- prehandle(key, req.connection.remoteAddress, params.query.json, params.query.in)
- console.log('收到客户端请求数据:' + params.query.json);
- log.trace('收到客户端请求数据' + params.query.json);
- clientcount++;
- console.log('clientcount:', clientcount);
- if (client[key].ConnectState == false) {
- //获取tocken
- var tokenreq = http0.request(options, function (res0) {
- res0.setEncoding('utf8');
- res0.on('data', function (chunk) {
- client[key].token = (JSON.parse(chunk)).accessToken;
- console.log("accessToken:" + client[key].token);
- log.trace('获取到accessToken');
- if (client[key].token == null) {
- console.log("获取到的accessToken无效");
- log.trace('获取到的accessToken无效');
- return;
- }
- //尝试连接第三方服务器
- var host = 'http://101.231.215.60:15790'
- const io = require('socket.io-client');
- socket[key] = io.connect(host, {
- query: 'token=' + client[key].token
- , transports: ['websocket'], reconnection: false, reconnectionDelay: 5000
- });
- console.log('尝试连接' + host);
- log.trace('尝试连接' + host);
- //第三方服务器连接成功
- socket[key].on('connect', function () {
- console.log('connect success!');
- log.trace('连接成功!');
- SendData(params, res, key);
- });
- socket[key].on('disconnect', () => {
- console.log('连接断开');
- log.trace('连接断开!');
- });
- socket[key].on('connect_error', (error) => {
- console.log(error);
- log.trace('连接远程服务器失败!');
- });
- });
- });
- tokenreq.on('error', function (e) {
- client[key].token = '';
- //尝试获取token失败
- console.log('problem with token request: ' + e.message);
- log.error('problem with token request: ' + e.message);
- });
- // write data to request body
- var post_data = {};
- post_data.companyCode = client[key].cc;
- post_data.username = client[key].un;
- post_data.password = client[key].pw;
- var contenti = qs.stringify(post_data);
- tokenreq.write(contenti);
- tokenreq.end();
- }
- else {
- SendData(params, res, key);
- /*
-
- req.on('error', function (e) {
- console.log('problem with request: ' + e.message);
- log.trace('problem with request: ' + e.message);
-
- //console.log('请求token失败'+data);
- res.setHeader("content-type","text/html;charset=UTF-8")
- res.end("{\"success\":false,\"errorCode\":\"TOKEN_ERROR_RELAYSERVER\",\"errorMessage\":\"\"}")
- });
-
- */
- /*
- socket.on('connect_timeout', (timeout) => {
- console.log('connect_timeout');
- });
- */
- }
- } else {
- let datas = "";
- req.on("data", (chunk) => {
- datas += chunk;
- console.log(datas)
- })
- req.on("end", () => {
- //如果是ajax post请求这里换成JSON.parse
- let postData = queryString.parse(datas.toString())
- console.log(postData)
- })
- res.setHeader("content-type", "text/html;charset=UTF-8")
- res.end("当前请求方式为post")
- }
- })
- var port = 10097;
- server.listen(port, () => {
- log.trace('server is ready on port ' + port);
- })
|