添加空空攻击事件
This commit is contained in:
parent
9a45ba29ad
commit
a530f5c074
@ -1,7 +1,7 @@
|
|||||||
const util = require("../util/common");
|
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, simuStatus } = require("../util/variable");
|
var { PlanePoint, entityHJ, entityEvent, simuStatus } = require("../util/variable");
|
||||||
|
|
||||||
//加载航空兵数据
|
//加载航空兵数据
|
||||||
exports.loadHKBData = (req, res, next) => {
|
exports.loadHKBData = (req, res, next) => {
|
||||||
@ -194,10 +194,10 @@ getKkwqsyList = async (bdid, qrxg, qcdh, zy, rq, rwbs) => {
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
t = Math.round(x / dmjjsdwh);
|
t = Math.round(x / dmjjsdwh);
|
||||||
zdsk = starttime.add(t, 'seconds');
|
zdsk = moment(starttime).add(t, 'seconds');
|
||||||
}
|
}
|
||||||
t = Math.round(jl / dmjjsdwh);
|
t = Math.round(jl / dmjjsdwh);
|
||||||
mzsk = starttime.add(t, 'seconds');
|
mzsk = moment(starttime).add(t, 'seconds');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -210,22 +210,21 @@ getKkwqsyList = async (bdid, qrxg, qcdh, zy, rq, rwbs) => {
|
|||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
t = Math.round(x / dmjjsdyt);
|
t = Math.round(x / dmjjsdyt);
|
||||||
zdsk = starttime.add(t, 'seconds');
|
zdsk = moment(starttime).add(t, 'seconds');
|
||||||
}
|
}
|
||||||
t = Math.round(jl / dmjjsdyt);
|
t = Math.round(jl / dmjjsdyt);
|
||||||
mzsk = starttime.add(t, 'seconds');
|
mzsk = moment(starttime).add(t, 'seconds');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
if (ts == "尾后") {
|
if (ts == "尾后") {
|
||||||
if (dmjjsdwh <= 0) {
|
if (dmjjsdwh <= 0) {
|
||||||
|
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
zdsk = starttime;
|
zdsk = starttime;
|
||||||
t = Math.round(jl / dmjjsdwh);
|
t = Math.round(jl / dmjjsdwh);
|
||||||
mzsk = starttime.add(t, 'seconds');
|
mzsk = moment(starttime).add(t, 'seconds');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
@ -234,18 +233,25 @@ getKkwqsyList = async (bdid, qrxg, qcdh, zy, rq, rwbs) => {
|
|||||||
else {
|
else {
|
||||||
zdsk = starttime;
|
zdsk = starttime;
|
||||||
t = Math.round(jl / dmjjsdyt);
|
t = Math.round(jl / dmjjsdyt);
|
||||||
mzsk = starttime.add(t, 'seconds');
|
mzsk = moment(starttime).add(t, 'seconds');
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (!mzsk) {
|
||||||
|
endtime = moment(starttime).add(10, 'seconds');
|
||||||
|
}
|
||||||
|
else {
|
||||||
|
endtime = mzsk;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else {
|
else {
|
||||||
endtime = starttime.add(10, 'seconds');
|
endtime = moment(starttime).add(10, 'seconds');
|
||||||
}
|
}
|
||||||
|
|
||||||
var startms = zerotime.diff(starttime, 'ms');
|
var startms = starttime.diff(zerotime, 'ms');
|
||||||
var endms = zerotime.diff(endtime, 'ms');
|
var endms = endtime.diff(zerotime, 'ms');
|
||||||
|
|
||||||
sjmap["开始时间"] = startms;
|
sjmap["开始时间"] = startms;
|
||||||
sjmap["结束时间"] = endms;
|
sjmap["结束时间"] = endms;
|
||||||
@ -262,7 +268,7 @@ getKkwqsyList = async (bdid, qrxg, qcdh, zy, rq, rwbs) => {
|
|||||||
csmap["装备类别"] = "空空弹";
|
csmap["装备类别"] = "空空弹";
|
||||||
csmap["航迹"] = kkddhj;
|
csmap["航迹"] = kkddhj;
|
||||||
if (jhsk) {
|
if (jhsk) {
|
||||||
var jhms = zerotime.diff(jhsk, 'ms');
|
var jhms = jhsk.diff(zerotime, 'ms');
|
||||||
|
|
||||||
csmap["制导结束时刻"] = jhms + 1;
|
csmap["制导结束时刻"] = jhms + 1;
|
||||||
csmap["攻击开始时刻"] = startms;
|
csmap["攻击开始时刻"] = startms;
|
||||||
@ -270,8 +276,8 @@ getKkwqsyList = async (bdid, qrxg, qcdh, zy, rq, rwbs) => {
|
|||||||
}
|
}
|
||||||
|
|
||||||
var num = kkddhj.size;
|
var num = kkddhj.size;
|
||||||
endtime = starttime.add(num * 10, 'ms'); //导弹航迹精度为10ms
|
endtime = moment(starttime).add(num * 10, 'ms'); //导弹航迹精度为10ms
|
||||||
var endms = zerotime.diff(endtime, 'ms');
|
endms = endtime.diff(zerotime, 'ms');
|
||||||
sjmap["结束时间"] = endms;
|
sjmap["结束时间"] = endms;
|
||||||
}
|
}
|
||||||
csmap["标识"] = qcdh + fsbh;
|
csmap["标识"] = qcdh + fsbh;
|
||||||
@ -283,6 +289,27 @@ getKkwqsyList = async (bdid, qrxg, qcdh, zy, rq, rwbs) => {
|
|||||||
//传入Gis的事件
|
//传入Gis的事件
|
||||||
array.push(sjmap);
|
array.push(sjmap);
|
||||||
|
|
||||||
|
let eventMap = entityEvent.get(bdid);
|
||||||
|
if (!eventMap) {
|
||||||
|
eventMap = new Map();
|
||||||
|
}
|
||||||
|
{
|
||||||
|
let event = {};
|
||||||
|
event["事件"] = "空空攻击事件";
|
||||||
|
event["类型"] = "开始";
|
||||||
|
event["参数"] = csmap;
|
||||||
|
eventMap.set(startms, event);
|
||||||
|
|
||||||
|
}
|
||||||
|
{
|
||||||
|
let event = {};
|
||||||
|
event["事件"] = "空空攻击事件";
|
||||||
|
event["类型"] = "结束";
|
||||||
|
event["参数"] = csmap;
|
||||||
|
eventMap.set(endms, event);
|
||||||
|
}
|
||||||
|
entityEvent.set(bdid, eventMap);
|
||||||
|
|
||||||
result = await data.getRow();
|
result = await data.getRow();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -325,7 +352,21 @@ getKkddFromDb = async (bdid, gjcx) => {
|
|||||||
const byte = buffer.subarray(offset, offset + size);
|
const byte = buffer.subarray(offset, offset + size);
|
||||||
PlanePoint.setBuffer(byte);
|
PlanePoint.setBuffer(byte);
|
||||||
|
|
||||||
points.set(PlanePoint.get('iRelTime'), PlanePoint);
|
let pt = {};
|
||||||
|
pt["iNum"] = PlanePoint.get('iNum');
|
||||||
|
pt["iRelTime"] = PlanePoint.get('iRelTime');
|
||||||
|
pt["空速"] = PlanePoint.get('dAirspeed');
|
||||||
|
pt["升降率"] = PlanePoint.get('dSjl');
|
||||||
|
pt["过载"] = PlanePoint.get('dOverload');
|
||||||
|
pt["马赫数"] = PlanePoint.get('dMach');
|
||||||
|
pt["经度"] = PlanePoint.get('dLongitude');
|
||||||
|
pt["纬度"] = PlanePoint.get('dLatitude');
|
||||||
|
pt["海拔"] = PlanePoint.get('dAlitidude');
|
||||||
|
pt["航向角"] = PlanePoint.get('dHxj');
|
||||||
|
pt["俯仰角"] = PlanePoint.get('dFyj');
|
||||||
|
pt["倾斜角"] = PlanePoint.get('dQxj');
|
||||||
|
|
||||||
|
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]));
|
||||||
@ -349,8 +390,8 @@ getKdwqsyList = async (bdid, qrxg, rq) => {
|
|||||||
var starttime = moment(result[0]);
|
var starttime = moment(result[0]);
|
||||||
var endtime = moment(result[1]);
|
var endtime = moment(result[1]);
|
||||||
var fsbh = result[4];
|
var fsbh = result[4];
|
||||||
var startms = zerotime.diff(starttime, 'ms');
|
var startms = starttime.diff(zerotime, 'ms');
|
||||||
var endms = zerotime.diff(endtime, 'ms');
|
var endms = endtime.diff(zerotime, 'ms');
|
||||||
|
|
||||||
if (startms <= endms || endms == 0) {
|
if (startms <= endms || endms == 0) {
|
||||||
endms = startms + 10000;
|
endms = startms + 10000;
|
||||||
@ -370,6 +411,27 @@ getKdwqsyList = async (bdid, qrxg, rq) => {
|
|||||||
//传入Gis的事件
|
//传入Gis的事件
|
||||||
array.push(sjmap);
|
array.push(sjmap);
|
||||||
|
|
||||||
|
let eventMap = entityEvent.get(bdid);
|
||||||
|
if (!eventMap) {
|
||||||
|
eventMap = new Map();
|
||||||
|
}
|
||||||
|
{
|
||||||
|
let event = {};
|
||||||
|
event["事件"] = "空地攻击事件";
|
||||||
|
event["类型"] = "开始";
|
||||||
|
event["参数"] = csmap;
|
||||||
|
eventMap.set(startms, event);
|
||||||
|
|
||||||
|
}
|
||||||
|
{
|
||||||
|
let event = {};
|
||||||
|
event["事件"] = "空地攻击事件";
|
||||||
|
event["类型"] = "结束";
|
||||||
|
event["参数"] = csmap;
|
||||||
|
eventMap.set(endms, event);
|
||||||
|
}
|
||||||
|
entityEvent.set(bdid, eventMap);
|
||||||
|
|
||||||
result = await data.getRow();
|
result = await data.getRow();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -391,11 +453,11 @@ getGrqkList = async (bdid, grlx, qcdh, rq) => {
|
|||||||
var grsd = moment(result[1]);
|
var grsd = moment(result[1]);
|
||||||
var grjs = moment(result[4]);
|
var grjs = moment(result[4]);
|
||||||
if (grjs < grsd) {
|
if (grjs < grsd) {
|
||||||
grjs = grsd.add(30, 'seconds');
|
grjs = moment(grsd).add(30, 'seconds');
|
||||||
}
|
}
|
||||||
|
|
||||||
var grSec = zerotime.diff(grsd, 'ms');
|
var grSec = grsd.diff(zerotime, 'ms');
|
||||||
var grjsSec = zerotime.diff(grjs, 'ms');
|
var grjsSec = grjs.diff(zerotime, 'ms');
|
||||||
var grfx = result[5];
|
var grfx = result[5];
|
||||||
var tfsl = result[3];
|
var tfsl = result[3];
|
||||||
|
|
||||||
@ -415,6 +477,37 @@ getGrqkList = async (bdid, grlx, qcdh, rq) => {
|
|||||||
map["参数"] = csMap;
|
map["参数"] = csMap;
|
||||||
array.push(map);
|
array.push(map);
|
||||||
|
|
||||||
|
let eventMap = entityEvent.get(bdid);
|
||||||
|
if (!eventMap) {
|
||||||
|
eventMap = new Map();
|
||||||
|
}
|
||||||
|
var eventType;
|
||||||
|
if (grlx == "红外弹") {
|
||||||
|
eventType = "红外弹干扰事件";
|
||||||
|
} else if (grlx == "箔条弹") {
|
||||||
|
eventType = "箔条弹干扰事件";
|
||||||
|
} else if (grlx == "有源干扰") {
|
||||||
|
eventType = "有源干扰事件";
|
||||||
|
} else if (grlx == "机载雷达") {
|
||||||
|
eventType = "机载雷达事件";
|
||||||
|
}
|
||||||
|
{
|
||||||
|
let event = {};
|
||||||
|
event["事件"] = eventType;
|
||||||
|
event["类型"] = "开始";
|
||||||
|
event["参数"] = csMap;
|
||||||
|
eventMap.set(grSec, event);
|
||||||
|
|
||||||
|
}
|
||||||
|
{
|
||||||
|
let event = {};
|
||||||
|
event["事件"] = eventType;
|
||||||
|
event["类型"] = "结束";
|
||||||
|
event["参数"] = csMap;
|
||||||
|
eventMap.set(grjsSec, event);
|
||||||
|
}
|
||||||
|
entityEvent.set(bdid, eventMap);
|
||||||
|
|
||||||
result = await data.getRow();
|
result = await data.getRow();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -576,7 +669,21 @@ getDkddFromDb = async (bdid, gjcx, ddbh) => {
|
|||||||
const byte = buffer.subarray(offset, offset + size);
|
const byte = buffer.subarray(offset, offset + size);
|
||||||
PlanePoint.setBuffer(byte);
|
PlanePoint.setBuffer(byte);
|
||||||
|
|
||||||
points.set(PlanePoint.get('iRelTime'), PlanePoint);
|
let pt = {};
|
||||||
|
pt["iNum"] = PlanePoint.get('iNum');
|
||||||
|
pt["iRelTime"] = PlanePoint.get('iRelTime');
|
||||||
|
pt["空速"] = PlanePoint.get('dAirspeed');
|
||||||
|
pt["升降率"] = PlanePoint.get('dSjl');
|
||||||
|
pt["过载"] = PlanePoint.get('dOverload');
|
||||||
|
pt["马赫数"] = PlanePoint.get('dMach');
|
||||||
|
pt["经度"] = PlanePoint.get('dLongitude');
|
||||||
|
pt["纬度"] = PlanePoint.get('dLatitude');
|
||||||
|
pt["海拔"] = PlanePoint.get('dAlitidude');
|
||||||
|
pt["航向角"] = PlanePoint.get('dHxj');
|
||||||
|
pt["俯仰角"] = PlanePoint.get('dFyj');
|
||||||
|
pt["倾斜角"] = PlanePoint.get('dQxj');
|
||||||
|
|
||||||
|
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]));
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
const WebSocket = require('ws');
|
const WebSocket = require('ws');
|
||||||
const util = require("../util/common");
|
const util = require("../util/common");
|
||||||
var { entityHJ, simuStatus } = require("../util/variable");
|
var { entityHJ, entityEvent, simuStatus } = require("../util/variable");
|
||||||
|
|
||||||
const deltaT = 1000;
|
const deltaT = 1000;
|
||||||
|
|
||||||
@ -17,6 +17,36 @@ const createServer = () => {
|
|||||||
if (simType == 1) {
|
if (simType == 1) {
|
||||||
var currRadio = simuStatus["仿真倍速"];
|
var currRadio = simuStatus["仿真倍速"];
|
||||||
var currTime = simuStatus["当前时间"];
|
var currTime = simuStatus["当前时间"];
|
||||||
|
|
||||||
|
let data = {};
|
||||||
|
updateEntityHJ(currTime, data);
|
||||||
|
updateEntityEvent(currTime, data);
|
||||||
|
|
||||||
|
const message = {
|
||||||
|
time: currTime,
|
||||||
|
data: data
|
||||||
|
};
|
||||||
|
ws.send(JSON.stringify(message)); // 发送JSON格式的消息
|
||||||
|
|
||||||
|
var accTime = deltaT * currRadio;
|
||||||
|
currTime += accTime;
|
||||||
|
|
||||||
|
simuStatus["当前时间"] = currTime;
|
||||||
|
}
|
||||||
|
|
||||||
|
}, deltaT); // 每5秒发送一次消息
|
||||||
|
|
||||||
|
// 可以在这里添加更多的逻辑,例如当客户端关闭连接时清除定时器等
|
||||||
|
ws.on('close', () => {
|
||||||
|
clearInterval(intervalId); // 清除定时器,防止内存泄漏
|
||||||
|
console.log('客户端已断开连接');
|
||||||
|
});
|
||||||
|
});
|
||||||
|
|
||||||
|
console.log('WebSocket服务器正在运行在ws://localhost:9000');
|
||||||
|
}
|
||||||
|
|
||||||
|
updateEntityHJ = (currTime, data) => {
|
||||||
if (entityHJ.size > 0) {
|
if (entityHJ.size > 0) {
|
||||||
var array = [];
|
var array = [];
|
||||||
for (const [key, value] of entityHJ) {
|
for (const [key, value] of entityHJ) {
|
||||||
@ -95,29 +125,62 @@ const createServer = () => {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
const message = {
|
data["航迹列表"] = array;
|
||||||
time: currTime,
|
}
|
||||||
data: array
|
|
||||||
};
|
|
||||||
ws.send(JSON.stringify(message)); // 发送JSON格式的消息
|
|
||||||
}
|
}
|
||||||
|
|
||||||
var accTime = deltaT * currRadio;
|
updateEntityEvent = (currTime, data) => {
|
||||||
currTime += accTime;
|
if (entityEvent.size > 0) {
|
||||||
|
var array = [];
|
||||||
|
for (const [key, value] of entityEvent) {
|
||||||
|
var bdid = key;
|
||||||
|
const tArray = [...value.keys()];
|
||||||
|
var indexT = util.lower_bound(tArray, currTime);
|
||||||
|
if (indexT < tArray.length) {
|
||||||
|
var second = tArray[indexT];
|
||||||
|
if (second <= currTime) {
|
||||||
|
let event = value.get(second);
|
||||||
|
event["BDID"] = bdid;
|
||||||
|
array.push(event);
|
||||||
|
|
||||||
simuStatus["当前时间"] = currTime;
|
let para = event["参数"];
|
||||||
|
var hj = para["航迹"];
|
||||||
|
if (hj) {
|
||||||
|
let xh = para["型号"];
|
||||||
|
let bh = para["编号"];
|
||||||
|
var newBDID = xh + ";" + bh;
|
||||||
|
entityHJ.set(newBDID, hj);
|
||||||
|
var zdjs = para["制导结束时刻"];
|
||||||
|
if (zdjs) {
|
||||||
|
let eventMap = entityEvent.get(newBDID);
|
||||||
|
if (!eventMap) {
|
||||||
|
eventMap = new Map();
|
||||||
|
}
|
||||||
|
{
|
||||||
|
let eventJH = {};
|
||||||
|
eventJH["事件"] = "导弹截获事件";
|
||||||
|
eventJH["类型"] = "开始";
|
||||||
|
eventJH["参数"] = para["攻击目标"];
|
||||||
|
eventMap.set(zdjs, eventJH);
|
||||||
|
|
||||||
|
}
|
||||||
|
{
|
||||||
|
var endMs = para["结束时刻"];
|
||||||
|
let eventJH = {};
|
||||||
|
eventJH["事件"] = "导弹截获事件";
|
||||||
|
eventJH["类型"] = "结束";
|
||||||
|
eventJH["参数"] = para["攻击目标"];
|
||||||
|
eventMap.set(endMs, eventJH);
|
||||||
|
}
|
||||||
|
entityEvent.set(newBDID, eventMap);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
}, deltaT); // 每5秒发送一次消息
|
data["事件列表"] = array;
|
||||||
|
}
|
||||||
// 可以在这里添加更多的逻辑,例如当客户端关闭连接时清除定时器等
|
|
||||||
ws.on('close', () => {
|
|
||||||
clearInterval(intervalId); // 清除定时器,防止内存泄漏
|
|
||||||
console.log('客户端已断开连接');
|
|
||||||
});
|
|
||||||
});
|
|
||||||
|
|
||||||
console.log('WebSocket服务器正在运行在ws://localhost:9000');
|
|
||||||
}
|
}
|
||||||
|
|
||||||
module.exports = createServer()
|
module.exports = createServer()
|
Loading…
Reference in New Issue
Block a user