|
|
|
@ -2,6 +2,7 @@ var express = require('express'); |
|
|
|
|
var expressWs = require('express-ws'); |
|
|
|
|
var router = express.Router(); |
|
|
|
|
var redis = require('redis'); |
|
|
|
|
var md5 = require('md5'); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/* redis start */ |
|
|
|
@ -9,36 +10,56 @@ var rc = new redis.createClient({ |
|
|
|
|
host: 'redis' |
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
router.get('/set', function(req, res, next) { |
|
|
|
|
|
|
|
|
|
var checkRedirect = (id, resolve, reject) => { |
|
|
|
|
rc.get('session/redirect/'+id, (err, val) => { |
|
|
|
|
if(err){ |
|
|
|
|
setTimeout(checkRedirect, 20, id, resolve, reject); |
|
|
|
|
}else{ |
|
|
|
|
resolve(val);
|
|
|
|
|
} |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
var getAddress = (fp, mask) => { |
|
|
|
|
let id = md5(fp+mask); |
|
|
|
|
return new Promise((resolve, reject) => { |
|
|
|
|
checkRedirect(id, resolve, reject); |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
router.get('/set', async function(req, res, next) { |
|
|
|
|
res.header('Access-Control-Allow-Origin', '*');
|
|
|
|
|
if(!req.query.key || !req.query.val || !req.query.fp || !req.query.t) {res.send({"code":"500"});;return;} |
|
|
|
|
|
|
|
|
|
rc.hset('session/'+req.query.fp, req.query.key, req.query.val); |
|
|
|
|
rc.hset('session/'+req.query.fp, 'LastOperateTime', req.query.t); |
|
|
|
|
if(!req.query.key || !req.query.val || !req.query.fp || !req.query.t || !req.query.mask) {res.send({"code":"500"});;return;} |
|
|
|
|
let hash = await getAddress(req.query.fp, req.query.mask); |
|
|
|
|
rc.hset('session/dialog/'+hash, req.query.key, req.query.val); |
|
|
|
|
rc.hset('session/dialog/'+hash, 'LastOperateTime', req.query.t); |
|
|
|
|
res.send({code:"200"});
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
router.get('/del', function(req, res, next) { |
|
|
|
|
router.get('/del', async function(req, res, next) { |
|
|
|
|
res.header('Access-Control-Allow-Origin', '*'); |
|
|
|
|
if(!req.query.del || !req.query.fp || !req.query.t) {res.send({"code":"500"});;return;} |
|
|
|
|
if(!req.query.del || !req.query.fp || !req.query.mask || !req.query.t) {res.send({"code":"500"});;return;} |
|
|
|
|
|
|
|
|
|
rc.hdel('session/'+req.query.fp, req.query.del); |
|
|
|
|
rc.hset('session/'+req.query.fp, 'LastOperateTime', req.query.t); |
|
|
|
|
let hash = await getAddress(req.query.fp, req.query.mask); |
|
|
|
|
rc.hdel('session/dialog/'+hash, req.query.del); |
|
|
|
|
rc.hset('session/dialog/'+hash, 'LastOperateTime', req.query.t); |
|
|
|
|
res.send({code:"200"});
|
|
|
|
|
}); |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
router.get('/get', function(req, res, next) { |
|
|
|
|
router.get('/get', async function(req, res, next) { |
|
|
|
|
res.header('Access-Control-Allow-Origin', '*'); |
|
|
|
|
if(!req.query.fp) {res.send({"code":"500"});;return;} |
|
|
|
|
if(!req.query.fp || !req.query.mask) {res.send({"code":"500"});;return;} |
|
|
|
|
let hash = await getAddress(req.query.fp, req.query.mask); |
|
|
|
|
var o = {}; |
|
|
|
|
rc.hkeys('session/'+req.query.fp, function(err, keys){ |
|
|
|
|
rc.hkeys('session/dialog/'+hash, function(err, keys){ |
|
|
|
|
if(!err){ |
|
|
|
|
if(!keys.length){ |
|
|
|
|
res.send(o); |
|
|
|
|
} |
|
|
|
|
keys.forEach(function(key, i){ |
|
|
|
|
rc.hget('session/'+req.query.fp, key, function(err2, val){ |
|
|
|
|
rc.hget('session/dialog/'+hash, key, function(err2, val){ |
|
|
|
|
if(!err2){ |
|
|
|
|
o[key] = val; |
|
|
|
|
if(i == keys.length - 1){ |
|
|
|
@ -58,20 +79,22 @@ router.get('/get', function(req, res, next) { |
|
|
|
|
expressWs(router); |
|
|
|
|
|
|
|
|
|
router |
|
|
|
|
.ws('/', function (ws, req){ |
|
|
|
|
if(req.query.fp.length == 8){ |
|
|
|
|
.ws('/', async function (ws, req){ |
|
|
|
|
if(req.query.fp.length == 6 && req.query.mask){ |
|
|
|
|
var fp = req.query.fp; |
|
|
|
|
var mask = req.query.mask; |
|
|
|
|
var hash = await getAddress(req.query.fp, req.query.mask); |
|
|
|
|
}else{ |
|
|
|
|
ws.close(); |
|
|
|
|
} |
|
|
|
|
ws.on('message', function (msg) { |
|
|
|
|
if(msg == 'get'){ |
|
|
|
|
var o = {}; |
|
|
|
|
rc.hkeys('session/'+fp, function(err, keys){ |
|
|
|
|
rc.hkeys('session/dialog/'+hash, function(err, keys){ |
|
|
|
|
if(!err){ |
|
|
|
|
|
|
|
|
|
keys.forEach(function(key, i){ |
|
|
|
|
rc.hget('session/'+fp, key, function(err2, val){ |
|
|
|
|
rc.hget('session/dialog/'+hash, key, function(err2, val){ |
|
|
|
|
if(!err2){ |
|
|
|
|
o[key] = val; |
|
|
|
|
if(i == keys.length - 1){ |
|
|
|
@ -85,12 +108,12 @@ router |
|
|
|
|
}else if(isJson(msg)){ |
|
|
|
|
obj = JSON.parse(msg); |
|
|
|
|
if(obj.del && obj.t){ |
|
|
|
|
rc.hdel('session/'+fp, obj.del); |
|
|
|
|
rc.hset('session/'+fp, 'LastOperateTime', obj.t); |
|
|
|
|
rc.hdel('session/dialog/'+hash, obj.del); |
|
|
|
|
rc.hset('session/dialog/'+hash, 'LastOperateTime', obj.t); |
|
|
|
|
} |
|
|
|
|
if(obj.key && obj.val && obj.t){ |
|
|
|
|
rc.hset('session/'+fp, obj.key, obj.val); |
|
|
|
|
rc.hset('session/'+fp, 'LastOperateTime', obj.t); |
|
|
|
|
rc.hset('session/dialog/'+hash, obj.key, obj.val); |
|
|
|
|
rc.hset('session/dialog/'+hash, 'LastOperateTime', obj.t); |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
}) |
|
|
|
|