更新websock数据
This commit is contained in:
parent
a530f5c074
commit
8ad59f72f9
@ -2,6 +2,7 @@ const util = require("../util/common");
|
|||||||
let dataBase = require("../util/dmDB");
|
let dataBase = require("../util/dmDB");
|
||||||
const moment = require('moment-timezone');
|
const moment = require('moment-timezone');
|
||||||
var { PlanePoint, entityHJ, entityEvent, simuStatus } = require("../util/variable");
|
var { PlanePoint, entityHJ, entityEvent, simuStatus } = require("../util/variable");
|
||||||
|
let entityMgr = require("./entityMgr");
|
||||||
|
|
||||||
//加载航空兵数据
|
//加载航空兵数据
|
||||||
exports.loadHKBData = (req, res, next) => {
|
exports.loadHKBData = (req, res, next) => {
|
||||||
@ -37,28 +38,30 @@ exports.loadHKBData = (req, res, next) => {
|
|||||||
obj["体系摧毁文本信息"] = "体系摧毁时间为:" + moment(result[10]).format('HH:mm:ss');
|
obj["体系摧毁文本信息"] = "体系摧毁时间为:" + moment(result[10]).format('HH:mm:ss');
|
||||||
obj["体系摧毁文本颜色"] = "255,0,0,255";
|
obj["体系摧毁文本颜色"] = "255,0,0,255";
|
||||||
|
|
||||||
var hj = await getHjFromDb(obj, bdid, "航迹", 1000, 1, "飞机");
|
let uid = entityMgr.createEntity("飞机", obj);
|
||||||
|
|
||||||
|
var hj = await getHjFromDb(obj, bdid, "航迹", 1000, 1, "飞机", uid);
|
||||||
if (!hj) {
|
if (!hj) {
|
||||||
hj = await getHjFromDb(obj, bdid, "航迹", 1000, 0, "飞机");
|
hj = await getHjFromDb(obj, bdid, "航迹", 1000, 0, "飞机", uid);
|
||||||
}
|
}
|
||||||
|
|
||||||
//存入空空攻击事件map
|
//存入空空攻击事件map
|
||||||
var kksjlist = await getKkwqsyList(bdid, "有效", qcdh, zy, req.query.RQ, req.query.RWBS);
|
var kksjlist = await getKkwqsyList(bdid, "有效", qcdh, zy, req.query.RQ, req.query.RWBS, uid);
|
||||||
|
|
||||||
//存入空地攻击事件map
|
//存入空地攻击事件map
|
||||||
var kdsjlist = await getKdwqsyList(bdid, "有效", req.query.RQ);
|
var kdsjlist = await getKdwqsyList(bdid, "有效", req.query.RQ, uid);
|
||||||
|
|
||||||
//红外弹事件
|
//红外弹事件
|
||||||
var hwdList = await getGrqkList(bdid, "红外弹", qcdh, req.query.RQ);
|
var hwdList = await getGrqkList(bdid, "红外弹", qcdh, req.query.RQ, uid);
|
||||||
|
|
||||||
//箔条弹事件
|
//箔条弹事件
|
||||||
var hwdList = await getGrqkList(bdid, "箔条弹", qcdh, req.query.RQ);
|
var hwdList = await getGrqkList(bdid, "箔条弹", qcdh, req.query.RQ, uid);
|
||||||
|
|
||||||
//有源干扰事件
|
//有源干扰事件
|
||||||
var yyList = await getGrqkList(bdid, "有源干扰", qcdh, req.query.RQ);
|
var yyList = await getGrqkList(bdid, "有源干扰", qcdh, req.query.RQ, uid);
|
||||||
|
|
||||||
//机载雷达事件
|
//机载雷达事件
|
||||||
var ldList = await getGrqkList(bdid, "机载雷达", qcdh, req.query.RQ);
|
var ldList = await getGrqkList(bdid, "机载雷达", qcdh, req.query.RQ, uid);
|
||||||
|
|
||||||
array.push(obj);
|
array.push(obj);
|
||||||
|
|
||||||
@ -70,7 +73,7 @@ exports.loadHKBData = (req, res, next) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//加载飞机航迹
|
//加载飞机航迹
|
||||||
getHjFromDb = async (obj, bdid, sjlx, sjjd, zsj, zblb) => {
|
getHjFromDb = async (obj, bdid, sjlx, sjjd, zsj, zblb, uid) => {
|
||||||
var params = ["nr"];
|
var params = ["nr"];
|
||||||
var whereSql = "jcid = '" + bdid + "' and sjlx = '" + sjlx + "' and sjjd = " + sjjd + " and zsj = " + zsj;
|
var whereSql = "jcid = '" + bdid + "' and sjlx = '" + sjlx + "' and sjjd = " + sjjd + " and zsj = " + zsj;
|
||||||
var data = await dataBase.queryTable("kzdk.rw_fj_sj", params, whereSql);
|
var data = await dataBase.queryTable("kzdk.rw_fj_sj", params, whereSql);
|
||||||
@ -115,14 +118,17 @@ getHjFromDb = async (obj, bdid, sjlx, sjjd, zsj, zblb) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
points.set(PlanePoint.get('iRelTime'), pt);
|
points.set(PlanePoint.get('iRelTime'), pt);
|
||||||
|
|
||||||
|
let t = PlanePoint.get('iRelTime');
|
||||||
|
entityMgr.insertAnimaPath(uid, t, pt);
|
||||||
}
|
}
|
||||||
|
|
||||||
const sortMap = new Map([...points].sort((a, b) => a[0] - b[0]));
|
//const sortMap = new Map([...points].sort((a, b) => a[0] - b[0]));
|
||||||
|
|
||||||
if (sortMap.size > 0) {
|
if (points.size > 0) {
|
||||||
var startSimu = simuStatus["开始时间"];
|
var startSimu = simuStatus["开始时间"];
|
||||||
var endSimu = simuStatus["结束时间"];
|
var endSimu = simuStatus["结束时间"];
|
||||||
const keysArray = [...sortMap.keys()];
|
const keysArray = [...points.keys()];
|
||||||
var start = keysArray[0];
|
var start = keysArray[0];
|
||||||
var end = keysArray[keysArray.length - 1];
|
var end = keysArray[keysArray.length - 1];
|
||||||
if (startSimu < 0.0) {
|
if (startSimu < 0.0) {
|
||||||
@ -139,14 +145,14 @@ getHjFromDb = async (obj, bdid, sjlx, sjjd, zsj, zblb) => {
|
|||||||
simuStatus["结束时间"] = endSimu;
|
simuStatus["结束时间"] = endSimu;
|
||||||
}
|
}
|
||||||
|
|
||||||
entityHJ.set(bdid, sortMap);
|
//entityHJ.set(bdid, sortMap);
|
||||||
|
|
||||||
return points;
|
return points;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//空空攻击事件
|
//空空攻击事件
|
||||||
getKkwqsyList = async (bdid, qrxg, qcdh, zy, rq, rwbs) => {
|
getKkwqsyList = async (bdid, qrxg, qcdh, zy, rq, rwbs, uid) => {
|
||||||
//查询空空武器攻击事件
|
//查询空空武器攻击事件
|
||||||
var params = ["dx", "fsbh", "GJ_JL", "GJ_FW", "gj_sk", "GJTS", "DMZYSK", "ZD_JSSK", "gjxg_qrmb", "MZYXX", "FS_JH"];
|
var params = ["dx", "fsbh", "GJ_JL", "GJ_FW", "gj_sk", "GJTS", "DMZYSK", "ZD_JSSK", "gjxg_qrmb", "MZYXX", "FS_JH"];
|
||||||
var whereSql = "sjlx = '空空' and gjxg_qrxg = '" + qrxg + "' and bdid = '" + bdid + "'";
|
var whereSql = "sjlx = '空空' and gjxg_qrxg = '" + qrxg + "' and bdid = '" + bdid + "'";
|
||||||
@ -289,26 +295,29 @@ getKkwqsyList = async (bdid, qrxg, qcdh, zy, rq, rwbs) => {
|
|||||||
//传入Gis的事件
|
//传入Gis的事件
|
||||||
array.push(sjmap);
|
array.push(sjmap);
|
||||||
|
|
||||||
let eventMap = entityEvent.get(bdid);
|
// let eventMap = entityEvent.get(bdid);
|
||||||
if (!eventMap) {
|
// if (!eventMap) {
|
||||||
eventMap = new Map();
|
// eventMap = new Map();
|
||||||
}
|
// }
|
||||||
{
|
{
|
||||||
let event = {};
|
let event = {};
|
||||||
event["事件"] = "空空攻击事件";
|
event["事件"] = "空空攻击事件";
|
||||||
event["类型"] = "开始";
|
event["类型"] = "开始";
|
||||||
event["参数"] = csmap;
|
event["参数"] = csmap;
|
||||||
eventMap.set(startms, event);
|
//eventMap.set(startms, event);
|
||||||
|
|
||||||
|
entityMgr.insertUserEvent(uid, startms, event);
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
let event = {};
|
let event = {};
|
||||||
event["事件"] = "空空攻击事件";
|
event["事件"] = "空空攻击事件";
|
||||||
event["类型"] = "结束";
|
event["类型"] = "结束";
|
||||||
event["参数"] = csmap;
|
event["参数"] = csmap;
|
||||||
eventMap.set(endms, event);
|
//eventMap.set(endms, event);
|
||||||
|
|
||||||
|
entityMgr.insertUserEvent(uid, endms, event);
|
||||||
}
|
}
|
||||||
entityEvent.set(bdid, eventMap);
|
//entityEvent.set(bdid, eventMap);
|
||||||
|
|
||||||
result = await data.getRow();
|
result = await data.getRow();
|
||||||
}
|
}
|
||||||
@ -369,13 +378,13 @@ getKkddFromDb = async (bdid, gjcx) => {
|
|||||||
points.set(PlanePoint.get('iRelTime'), pt);
|
points.set(PlanePoint.get('iRelTime'), pt);
|
||||||
}
|
}
|
||||||
|
|
||||||
const sortMap = new Map([...points].sort((a, b) => a[0] - b[0]));
|
//const sortMap = new Map([...points].sort((a, b) => a[0] - b[0]));
|
||||||
return sortMap;
|
return points;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//空地攻击事件
|
//空地攻击事件
|
||||||
getKdwqsyList = async (bdid, qrxg, rq) => {
|
getKdwqsyList = async (bdid, qrxg, rq, uid) => {
|
||||||
//查询空地武器攻击事件
|
//查询空地武器攻击事件
|
||||||
var params = ["gj_sk", "DMZYSK", "gjxg_qrmb", "dx", "fsbh"];
|
var params = ["gj_sk", "DMZYSK", "gjxg_qrmb", "dx", "fsbh"];
|
||||||
var whereSql = "sjlx = '空地' and gjxg_qrxg = '" + qrxg + "' and bdid = '" + bdid + "'";
|
var whereSql = "sjlx = '空地' and gjxg_qrxg = '" + qrxg + "' and bdid = '" + bdid + "'";
|
||||||
@ -411,26 +420,27 @@ getKdwqsyList = async (bdid, qrxg, rq) => {
|
|||||||
//传入Gis的事件
|
//传入Gis的事件
|
||||||
array.push(sjmap);
|
array.push(sjmap);
|
||||||
|
|
||||||
let eventMap = entityEvent.get(bdid);
|
// let eventMap = entityEvent.get(bdid);
|
||||||
if (!eventMap) {
|
// if (!eventMap) {
|
||||||
eventMap = new Map();
|
// eventMap = new Map();
|
||||||
}
|
// }
|
||||||
{
|
{
|
||||||
let event = {};
|
let event = {};
|
||||||
event["事件"] = "空地攻击事件";
|
event["事件"] = "空地攻击事件";
|
||||||
event["类型"] = "开始";
|
event["类型"] = "开始";
|
||||||
event["参数"] = csmap;
|
event["参数"] = csmap;
|
||||||
eventMap.set(startms, event);
|
//eventMap.set(startms, event);
|
||||||
|
entityMgr.insertUserEvent(uid, startms, event);
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
let event = {};
|
let event = {};
|
||||||
event["事件"] = "空地攻击事件";
|
event["事件"] = "空地攻击事件";
|
||||||
event["类型"] = "结束";
|
event["类型"] = "结束";
|
||||||
event["参数"] = csmap;
|
event["参数"] = csmap;
|
||||||
eventMap.set(endms, event);
|
// eventMap.set(endms, event);
|
||||||
|
entityMgr.insertUserEvent(uid, endms, event);
|
||||||
}
|
}
|
||||||
entityEvent.set(bdid, eventMap);
|
//entityEvent.set(bdid, eventMap);
|
||||||
|
|
||||||
result = await data.getRow();
|
result = await data.getRow();
|
||||||
}
|
}
|
||||||
@ -439,7 +449,7 @@ getKdwqsyList = async (bdid, qrxg, rq) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
//干扰事件
|
//干扰事件
|
||||||
getGrqkList = async (bdid, grlx, qcdh, rq) => {
|
getGrqkList = async (bdid, grlx, qcdh, rq, uid) => {
|
||||||
var params = [];
|
var params = [];
|
||||||
var whereSql = "grlx = '" + grlx + "' and bdid = '" + bdid + "'";
|
var whereSql = "grlx = '" + grlx + "' and bdid = '" + bdid + "'";
|
||||||
var data = await dataBase.queryTable("kzdk.rw_fxjc_grqk", params, whereSql);
|
var data = await dataBase.queryTable("kzdk.rw_fxjc_grqk", params, whereSql);
|
||||||
@ -477,10 +487,10 @@ getGrqkList = async (bdid, grlx, qcdh, rq) => {
|
|||||||
map["参数"] = csMap;
|
map["参数"] = csMap;
|
||||||
array.push(map);
|
array.push(map);
|
||||||
|
|
||||||
let eventMap = entityEvent.get(bdid);
|
// let eventMap = entityEvent.get(bdid);
|
||||||
if (!eventMap) {
|
// if (!eventMap) {
|
||||||
eventMap = new Map();
|
// eventMap = new Map();
|
||||||
}
|
// }
|
||||||
var eventType;
|
var eventType;
|
||||||
if (grlx == "红外弹") {
|
if (grlx == "红外弹") {
|
||||||
eventType = "红外弹干扰事件";
|
eventType = "红外弹干扰事件";
|
||||||
@ -496,17 +506,18 @@ getGrqkList = async (bdid, grlx, qcdh, rq) => {
|
|||||||
event["事件"] = eventType;
|
event["事件"] = eventType;
|
||||||
event["类型"] = "开始";
|
event["类型"] = "开始";
|
||||||
event["参数"] = csMap;
|
event["参数"] = csMap;
|
||||||
eventMap.set(grSec, event);
|
//eventMap.set(grSec, event);
|
||||||
|
entityMgr.insertUserEvent(uid, grSec, event);
|
||||||
}
|
}
|
||||||
{
|
{
|
||||||
let event = {};
|
let event = {};
|
||||||
event["事件"] = eventType;
|
event["事件"] = eventType;
|
||||||
event["类型"] = "结束";
|
event["类型"] = "结束";
|
||||||
event["参数"] = csMap;
|
event["参数"] = csMap;
|
||||||
eventMap.set(grjsSec, event);
|
//eventMap.set(grjsSec, event);
|
||||||
|
entityMgr.insertUserEvent(uid, grjsSec, event);
|
||||||
}
|
}
|
||||||
entityEvent.set(bdid, eventMap);
|
//entityEvent.set(bdid, eventMap);
|
||||||
|
|
||||||
result = await data.getRow();
|
result = await data.getRow();
|
||||||
}
|
}
|
||||||
@ -548,15 +559,17 @@ exports.loadDDData = (req, res, next) => {
|
|||||||
obj["体系摧毁文本颜色"] = "255,0,0,255";
|
obj["体系摧毁文本颜色"] = "255,0,0,255";
|
||||||
//obj["参数"] = "255,0,0,255";
|
//obj["参数"] = "255,0,0,255";
|
||||||
|
|
||||||
|
let uid = entityMgr.createEntity("地导阵地", obj);
|
||||||
|
|
||||||
if (dylb == "舰艇") {
|
if (dylb == "舰艇") {
|
||||||
var hj = await getHjFromDb(obj, bdid, "航迹", 100, 1, "地导阵地");
|
var hj = await getHjFromDb(obj, bdid, "航迹", 100, 1, "地导阵地", uid);
|
||||||
if (!hj) {
|
if (!hj) {
|
||||||
hj = await getHjFromDb(obj, bdid, "航迹", 100, 0, "地导阵地");
|
hj = await getHjFromDb(obj, bdid, "航迹", 100, 0, "地导阵地", uid);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
//当前地导阵地所有地空攻击事件
|
//当前地导阵地所有地空攻击事件
|
||||||
var dksjlist = await getDkwqsyList(bdid, zy, dwjc, req.query.RQ);
|
var dksjlist = await getDkwqsyList(bdid, zy, dwjc, req.query.RQ, uid);
|
||||||
|
|
||||||
array.push(obj);
|
array.push(obj);
|
||||||
|
|
||||||
@ -569,7 +582,7 @@ exports.loadDDData = (req, res, next) => {
|
|||||||
|
|
||||||
//查询地空武器攻击事件
|
//查询地空武器攻击事件
|
||||||
//地导武器发射
|
//地导武器发射
|
||||||
getDkwqsyList = async (bdid, zy, dwjc, rq) => {
|
getDkwqsyList = async (bdid, zy, dwjc, rq, uid) => {
|
||||||
var params = ["gjcx", "gjd", "qrxg_mbxh", "qrxg_qrmb", "sk", "qrxg_ywx", "ddbh"];
|
var params = ["gjcx", "gjd", "qrxg_mbxh", "qrxg_qrmb", "sk", "qrxg_ywx", "ddbh"];
|
||||||
var whereSql = "jd = '发射' and bdid = '" + bdid + "'";
|
var whereSql = "jd = '发射' and bdid = '" + bdid + "'";
|
||||||
var data = await dataBase.queryTable("kzdk.rw_dd_wqgj", params, whereSql);
|
var data = await dataBase.queryTable("kzdk.rw_dd_wqgj", params, whereSql);
|
||||||
@ -621,6 +634,21 @@ getDkwqsyList = async (bdid, zy, dwjc, rq) => {
|
|||||||
|
|
||||||
//传入Gis的事件
|
//传入Gis的事件
|
||||||
array.push(sjmap);
|
array.push(sjmap);
|
||||||
|
|
||||||
|
{
|
||||||
|
let event = {};
|
||||||
|
event["事件"] = "地空攻击事件";
|
||||||
|
event["类型"] = "开始";
|
||||||
|
event["参数"] = csmap;
|
||||||
|
entityMgr.insertUserEvent(uid, startms, event);
|
||||||
|
}
|
||||||
|
{
|
||||||
|
let event = {};
|
||||||
|
event["事件"] = "地空攻击事件";
|
||||||
|
event["类型"] = "结束";
|
||||||
|
event["参数"] = csmap;
|
||||||
|
entityMgr.insertUserEvent(uid, endms, event);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -686,8 +714,8 @@ getDkddFromDb = async (bdid, gjcx, ddbh) => {
|
|||||||
points.set(PlanePoint.get('iRelTime'), pt);
|
points.set(PlanePoint.get('iRelTime'), pt);
|
||||||
}
|
}
|
||||||
|
|
||||||
const sortMap = new Map([...points].sort((a, b) => a[0] - b[0]));
|
//const sortMap = new Map([...points].sort((a, b) => a[0] - b[0]));
|
||||||
return sortMap;
|
return points;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -736,6 +764,8 @@ exports.loadDJMBData = (req, res, next) => {
|
|||||||
obj["装备类别"] = "打击目标";
|
obj["装备类别"] = "打击目标";
|
||||||
//obj["参数"] = "255,0,0,255";
|
//obj["参数"] = "255,0,0,255";
|
||||||
|
|
||||||
|
let uid = entityMgr.createEntity("打击目标", obj);
|
||||||
|
|
||||||
array.push(obj);
|
array.push(obj);
|
||||||
|
|
||||||
result = await data.getRow();
|
result = await data.getRow();
|
||||||
@ -770,6 +800,8 @@ exports.loadJDMBData = (req, res, next) => {
|
|||||||
obj["装备类别"] = "机动目标";
|
obj["装备类别"] = "机动目标";
|
||||||
//obj["参数"] = "255,0,0,255";
|
//obj["参数"] = "255,0,0,255";
|
||||||
|
|
||||||
|
let uid = entityMgr.createEntity("机动目标", obj);
|
||||||
|
|
||||||
array.push(obj);
|
array.push(obj);
|
||||||
|
|
||||||
result = await data.getRow();
|
result = await data.getRow();
|
||||||
|
112
controller/aircraft.js
Normal file
112
controller/aircraft.js
Normal file
@ -0,0 +1,112 @@
|
|||||||
|
let Entity = require("./entity");
|
||||||
|
let entityMgr = require("./entityMgr");
|
||||||
|
|
||||||
|
class Aircraft extends Entity {
|
||||||
|
constructor(base) {
|
||||||
|
super(base);
|
||||||
|
}
|
||||||
|
|
||||||
|
init() {
|
||||||
|
this.insertAttackKKEvent();
|
||||||
|
this.insertStopAttackKKEvent();
|
||||||
|
|
||||||
|
this.insertAttackKDEvent();
|
||||||
|
this.insertStopAttackKDEvent();
|
||||||
|
|
||||||
|
this.insertInfraRedBombEvent();
|
||||||
|
this.insertStopInfraRedBombEvent();
|
||||||
|
}
|
||||||
|
|
||||||
|
insertAttackKKEvent() {
|
||||||
|
let event = {};
|
||||||
|
event["事件"] = "空空攻击事件";
|
||||||
|
event["类型"] = "开始";
|
||||||
|
super.bindUserEventFun(event, this.slotBeginAttack);
|
||||||
|
}
|
||||||
|
|
||||||
|
insertStopAttackKKEvent() {
|
||||||
|
let event = {};
|
||||||
|
event["事件"] = "空空攻击事件";
|
||||||
|
event["类型"] = "结束";
|
||||||
|
super.bindUserEventFun(event, this.slotStopAttack);
|
||||||
|
}
|
||||||
|
|
||||||
|
insertAttackKDEvent() {
|
||||||
|
let event = {};
|
||||||
|
event["事件"] = "空地攻击事件";
|
||||||
|
event["类型"] = "开始";
|
||||||
|
super.bindUserEventFun(event, this.slotBeginAttack);
|
||||||
|
}
|
||||||
|
|
||||||
|
insertStopAttackKDEvent() {
|
||||||
|
let event = {};
|
||||||
|
event["事件"] = "空地攻击事件";
|
||||||
|
event["类型"] = "结束";
|
||||||
|
super.bindUserEventFun(event, this.slotStopAttack);
|
||||||
|
}
|
||||||
|
|
||||||
|
insertInfraRedBombEvent() {
|
||||||
|
let event = {};
|
||||||
|
event["事件"] = "红外弹干扰事件";
|
||||||
|
event["类型"] = "开始";
|
||||||
|
super.bindUserEventFun(event, this.slotInfraRedBomb);
|
||||||
|
}
|
||||||
|
|
||||||
|
insertStopInfraRedBombEvent() {
|
||||||
|
let event = {};
|
||||||
|
event["事件"] = "红外弹干扰事件";
|
||||||
|
event["类型"] = "结束";
|
||||||
|
super.bindUserEventFun(event, this.slotStopInfraRedBomb);
|
||||||
|
}
|
||||||
|
|
||||||
|
slotBeginAttack(para) {
|
||||||
|
var hj = para["航迹"];
|
||||||
|
if (hj) {
|
||||||
|
let uid = entityMgr.createEntity("空空弹", para);
|
||||||
|
for (const [key, value] of hj) {
|
||||||
|
let t = key;
|
||||||
|
let pt = value;
|
||||||
|
entityMgr.insertAnimaPath(uid, t, pt);
|
||||||
|
}
|
||||||
|
|
||||||
|
var zdjs = para["制导结束时刻"];
|
||||||
|
if (zdjs) {
|
||||||
|
{
|
||||||
|
let eventJH = {};
|
||||||
|
eventJH["事件"] = "导弹截获事件";
|
||||||
|
eventJH["类型"] = "开始";
|
||||||
|
eventJH["参数"] = para["攻击目标"];
|
||||||
|
entityMgr.insertUserEvent(uid, zdjs, eventJH);
|
||||||
|
}
|
||||||
|
{
|
||||||
|
var endMs = para["结束时刻"];
|
||||||
|
let eventJH = {};
|
||||||
|
eventJH["事件"] = "导弹截获事件";
|
||||||
|
eventJH["类型"] = "结束";
|
||||||
|
eventJH["参数"] = para["攻击目标"];
|
||||||
|
entityMgr.insertUserEvent(uid, endMs, eventJH);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
slotStopAttack(para) {
|
||||||
|
var hj = para["航迹"];
|
||||||
|
if (hj) {
|
||||||
|
let xh = para["型号"];
|
||||||
|
let bh = para["编号"];
|
||||||
|
let uid = entityMgr.getEntityUID(xh, bh);
|
||||||
|
if (uid) {
|
||||||
|
entityMgr.releaseEntity(uid);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
slotInfraRedBomb(para) {
|
||||||
|
}
|
||||||
|
|
||||||
|
slotStopInfraRedBomb(para) {
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = Aircraft;
|
177
controller/entity.js
Normal file
177
controller/entity.js
Normal file
@ -0,0 +1,177 @@
|
|||||||
|
const { v1: uuidv1, v3: uuidv3, v4: uuidv4, v5: uuidv5 } = require('uuid');
|
||||||
|
const util = require("../util/common");
|
||||||
|
|
||||||
|
class Entity {
|
||||||
|
constructor(base) {
|
||||||
|
this.uid = uuidv4();
|
||||||
|
this.base = base;
|
||||||
|
|
||||||
|
this.animaPath = new Map();
|
||||||
|
this.userEvent = new Map();
|
||||||
|
this.eventFunc = new Map();
|
||||||
|
}
|
||||||
|
|
||||||
|
getUID() {
|
||||||
|
return this.uid;
|
||||||
|
}
|
||||||
|
|
||||||
|
getBase() {
|
||||||
|
return this.base;
|
||||||
|
}
|
||||||
|
|
||||||
|
init() {
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
insertAnimaPath(t, point) {
|
||||||
|
this.animaPath.set(t, point);
|
||||||
|
}
|
||||||
|
|
||||||
|
sortAnimaPath() {
|
||||||
|
const sortMap = new Map([...this.animaPath].sort((a, b) => a[0] - b[0]));
|
||||||
|
this.animaPath = sortMap;
|
||||||
|
}
|
||||||
|
|
||||||
|
clearAnimaPath() {
|
||||||
|
this.animaPath.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
updateAnimaPath(t) {
|
||||||
|
if (this.animaPath.size > 0) {
|
||||||
|
const keysArray = [...this.animaPath.keys()];
|
||||||
|
var indexKey = util.lower_bound(keysArray, t);
|
||||||
|
if (indexKey < keysArray.length) {
|
||||||
|
let point = {};
|
||||||
|
var second = keysArray[indexKey];
|
||||||
|
if (indexKey == 0) {
|
||||||
|
if (second <= t) {
|
||||||
|
point = this.animaPath.get(second);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
var first = keysArray[indexKey - 1];
|
||||||
|
var delta_time = second - first;
|
||||||
|
if (delta_time == 0.0) {
|
||||||
|
point = this.animaPath.get(first);
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
var pointfirst = this.animaPath.get(first);
|
||||||
|
var pointsecond = this.animaPath.get(second);
|
||||||
|
|
||||||
|
point["空速"] = util.interpolate(
|
||||||
|
(t - first) / delta_time,
|
||||||
|
pointfirst["空速"],
|
||||||
|
pointsecond["空速"]);
|
||||||
|
|
||||||
|
point["升降率"] = util.interpolate(
|
||||||
|
(t - first) / delta_time,
|
||||||
|
pointfirst["升降率"],
|
||||||
|
pointsecond["升降率"]);
|
||||||
|
|
||||||
|
point["过载"] = util.interpolate(
|
||||||
|
(t - first) / delta_time,
|
||||||
|
pointfirst["过载"],
|
||||||
|
pointsecond["过载"]);
|
||||||
|
|
||||||
|
point["马赫数"] = util.interpolate(
|
||||||
|
(t - first) / delta_time,
|
||||||
|
pointfirst["马赫数"],
|
||||||
|
pointsecond["马赫数"]);
|
||||||
|
|
||||||
|
point["经度"] = util.interpolate(
|
||||||
|
(t - first) / delta_time,
|
||||||
|
pointfirst["经度"],
|
||||||
|
pointsecond["经度"]);
|
||||||
|
|
||||||
|
point["纬度"] = util.interpolate(
|
||||||
|
(t - first) / delta_time,
|
||||||
|
pointfirst["纬度"],
|
||||||
|
pointsecond["纬度"]);
|
||||||
|
|
||||||
|
point["海拔"] = util.interpolate(
|
||||||
|
(t - first) / delta_time,
|
||||||
|
pointfirst["海拔"],
|
||||||
|
pointsecond["海拔"]);
|
||||||
|
|
||||||
|
point["航向角"] = util.interpolate(
|
||||||
|
(t - first) / delta_time,
|
||||||
|
pointfirst["航向角"],
|
||||||
|
pointsecond["航向角"]);
|
||||||
|
|
||||||
|
point["俯仰角"] = util.interpolate(
|
||||||
|
(t - first) / delta_time,
|
||||||
|
pointfirst["俯仰角"],
|
||||||
|
pointsecond["俯仰角"]);
|
||||||
|
|
||||||
|
point["倾斜角"] = util.interpolate(
|
||||||
|
(t - first) / delta_time,
|
||||||
|
pointfirst["倾斜角"],
|
||||||
|
pointsecond["倾斜角"]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return point;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
insertUserEvent(t, event) {
|
||||||
|
event["执行"] = 0;
|
||||||
|
this.userEvent.set(t, event);
|
||||||
|
}
|
||||||
|
|
||||||
|
clearUserEvent() {
|
||||||
|
this.userEvent.clear();
|
||||||
|
}
|
||||||
|
|
||||||
|
removeUserEvent(t) {
|
||||||
|
this.userEvent.delete(t);
|
||||||
|
}
|
||||||
|
|
||||||
|
removeUserEvent(eventname, eventtype) {
|
||||||
|
for (const [key, value] of this.userEvent) {
|
||||||
|
let time = key;
|
||||||
|
let name = value["事件"];
|
||||||
|
let type = value["类型"];
|
||||||
|
if (name == eventname && type == eventtype) {
|
||||||
|
this.userEvent.delete(time);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
bindUserEventFun(event, callback) {
|
||||||
|
let name = event["事件"];
|
||||||
|
let type = event["类型"];
|
||||||
|
let strKey = name + ";" + type;
|
||||||
|
this.eventFunc.set(strKey, callback);
|
||||||
|
}
|
||||||
|
|
||||||
|
updateUserEvent(t) {
|
||||||
|
if (this.userEvent.size > 0) {
|
||||||
|
const tArray = [...this.userEvent.keys()];
|
||||||
|
var indexT = util.lower_bound(tArray, t);
|
||||||
|
if (indexT < tArray.length) {
|
||||||
|
var second = tArray[indexT];
|
||||||
|
if (second <= t) {
|
||||||
|
let event = this.userEvent.get(second);
|
||||||
|
if (event["执行"] == 0) {
|
||||||
|
event["执行"] = 1;
|
||||||
|
//this.userEvent.set(second, event);
|
||||||
|
|
||||||
|
let name = event["事件"];
|
||||||
|
let type = event["类型"];
|
||||||
|
let para = event["参数"];
|
||||||
|
|
||||||
|
let callback = this.eventFunc.get(name + ";" + type);
|
||||||
|
if (callback) {
|
||||||
|
callback(para);
|
||||||
|
}
|
||||||
|
|
||||||
|
return event;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = Entity;
|
85
controller/entityMgr.js
Normal file
85
controller/entityMgr.js
Normal file
@ -0,0 +1,85 @@
|
|||||||
|
let Entity = require("./entity");
|
||||||
|
let Aircraft = require("./aircraft");
|
||||||
|
let Missile = require("./missile");
|
||||||
|
|
||||||
|
class EntityMgr {
|
||||||
|
constructor() {
|
||||||
|
this.entityMap = new Map();
|
||||||
|
}
|
||||||
|
|
||||||
|
createEntity(sclass, base) {
|
||||||
|
var entity;
|
||||||
|
if (sclass == "飞机") {
|
||||||
|
entity = new Aircraft(base);
|
||||||
|
} else if (sclass == "空空弹") {
|
||||||
|
entity = new Missile(base);
|
||||||
|
} else {
|
||||||
|
entity = new Entity(base);
|
||||||
|
}
|
||||||
|
|
||||||
|
let uid = entity.getUID();
|
||||||
|
entity.init();
|
||||||
|
this.entityMap.set(uid, entity);
|
||||||
|
return uid;
|
||||||
|
}
|
||||||
|
|
||||||
|
releaseEntity(uid) {
|
||||||
|
this.entityMap.delete(uid);
|
||||||
|
}
|
||||||
|
|
||||||
|
getEntity(uid) {
|
||||||
|
return this.entityMap.get(uid);
|
||||||
|
}
|
||||||
|
|
||||||
|
getEntityUID(xh, bh) {
|
||||||
|
for (const [key, value] of this.entityMap) {
|
||||||
|
let uid = key;
|
||||||
|
let entity = value;
|
||||||
|
let base = entity.getBase();
|
||||||
|
if (base) {
|
||||||
|
if (base["型号"] == xh && base["编号"] == bh) {
|
||||||
|
return uid;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
insertAnimaPath(uid, time, point) {
|
||||||
|
let entity = this.entityMap.get(uid);
|
||||||
|
if (entity) {
|
||||||
|
entity.insertAnimaPath(time, point);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
insertUserEvent(uid, t, event) {
|
||||||
|
let entity = this.entityMap.get(uid);
|
||||||
|
if (entity) {
|
||||||
|
entity.insertUserEvent(t, event);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
updateEntity(time, data) {
|
||||||
|
if (this.entityMap.size > 0) {
|
||||||
|
var arrayHJ = [];
|
||||||
|
var arrayEvent = [];
|
||||||
|
for (const [key, value] of this.entityMap) {
|
||||||
|
let entity = value;
|
||||||
|
let base = entity.getBase();
|
||||||
|
let point = entity.updateAnimaPath(time);
|
||||||
|
if (point.hasOwnProperty('经度')) {
|
||||||
|
point["BDID"] = base["BDID"];
|
||||||
|
arrayHJ.push(point);
|
||||||
|
}
|
||||||
|
let event = entity.updateUserEvent(time);
|
||||||
|
if (event) {
|
||||||
|
event["BDID"] = base["BDID"];
|
||||||
|
arrayEvent.push(event);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
data["航迹列表"] = arrayHJ;
|
||||||
|
data["事件列表"] = arrayEvent;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = new EntityMgr();
|
10
controller/missile.js
Normal file
10
controller/missile.js
Normal file
@ -0,0 +1,10 @@
|
|||||||
|
let Entity = require("./entity");
|
||||||
|
|
||||||
|
class Missile extends Entity {
|
||||||
|
constructor(base) {
|
||||||
|
super(base);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
module.exports = Missile;
|
@ -1,6 +1,7 @@
|
|||||||
const WebSocket = require('ws');
|
const WebSocket = require('ws');
|
||||||
const util = require("../util/common");
|
const util = require("../util/common");
|
||||||
var { entityHJ, entityEvent, simuStatus } = require("../util/variable");
|
var { entityHJ, entityEvent, simuStatus } = require("../util/variable");
|
||||||
|
let entityMgr = require("./entityMgr");
|
||||||
|
|
||||||
const deltaT = 1000;
|
const deltaT = 1000;
|
||||||
|
|
||||||
@ -19,8 +20,10 @@ const createServer = () => {
|
|||||||
var currTime = simuStatus["当前时间"];
|
var currTime = simuStatus["当前时间"];
|
||||||
|
|
||||||
let data = {};
|
let data = {};
|
||||||
updateEntityHJ(currTime, data);
|
entityMgr.updateEntity(currTime, data);
|
||||||
updateEntityEvent(currTime, data);
|
|
||||||
|
// updateEntityHJ(currTime, data);
|
||||||
|
// updateEntityEvent(currTime, data);
|
||||||
|
|
||||||
const message = {
|
const message = {
|
||||||
time: currTime,
|
time: currTime,
|
||||||
|
13
package-lock.json
generated
13
package-lock.json
generated
@ -17,6 +17,7 @@
|
|||||||
"moment-timezone": "^0.5.47",
|
"moment-timezone": "^0.5.47",
|
||||||
"morgan": "~1.9.1",
|
"morgan": "~1.9.1",
|
||||||
"struct": "^0.0.12",
|
"struct": "^0.0.12",
|
||||||
|
"uuid": "^11.1.0",
|
||||||
"ws": "^8.18.1"
|
"ws": "^8.18.1"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
@ -1162,6 +1163,18 @@
|
|||||||
"node": ">= 0.4.0"
|
"node": ">= 0.4.0"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/uuid": {
|
||||||
|
"version": "11.1.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/uuid/-/uuid-11.1.0.tgz",
|
||||||
|
"integrity": "sha512-0/A9rDy9P7cJ+8w1c9WD9V//9Wj15Ce2MPz8Ri6032usz+NfePxx5AcN3bN+r6ZL6jEo066/yNYB3tn4pQEx+A==",
|
||||||
|
"funding": [
|
||||||
|
"https://github.com/sponsors/broofa",
|
||||||
|
"https://github.com/sponsors/ctavan"
|
||||||
|
],
|
||||||
|
"bin": {
|
||||||
|
"uuid": "dist/esm/bin/uuid"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/vary": {
|
"node_modules/vary": {
|
||||||
"version": "1.1.2",
|
"version": "1.1.2",
|
||||||
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
|
"resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz",
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
"moment-timezone": "^0.5.47",
|
"moment-timezone": "^0.5.47",
|
||||||
"morgan": "~1.9.1",
|
"morgan": "~1.9.1",
|
||||||
"struct": "^0.0.12",
|
"struct": "^0.0.12",
|
||||||
|
"uuid": "^11.1.0",
|
||||||
"ws": "^8.18.1"
|
"ws": "^8.18.1"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user