You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
100 lines
2.4 KiB
100 lines
2.4 KiB
7 months ago
|
const { getConnection, writeData } = require('./pav-client');
|
||
|
const { dumyData } = require('./pav-utils');
|
||
|
|
||
|
// const host = "192.168.0.24"
|
||
|
const host = "localhost"
|
||
|
// const host = '211.253.38.218';
|
||
|
// const port = 8082;
|
||
|
const port = 8888;
|
||
|
|
||
|
const prefix = 'TEST-DRON-';
|
||
|
const severalDrones = cnt => {
|
||
|
// 클라이언트 정보 저장공간
|
||
|
const clients = [];
|
||
|
|
||
|
// 최초 좌표
|
||
|
// y - y' : 37.57 -> 35.36
|
||
|
// x - x' : 126.60 -> 128.94
|
||
|
const firstCoord = [37.57, 126.6];
|
||
|
const lastCoord = [35.36, 128.94];
|
||
|
// 좌표 차이 계산
|
||
|
const diffX = firstCoord[0] - lastCoord[0];
|
||
|
const diffY = lastCoord[1] - firstCoord[1];
|
||
|
// 구분점
|
||
|
const divCnt = Math.round(Math.sqrt(cnt));
|
||
|
const divDiifX = diffX / divCnt;
|
||
|
const divDiifY = diffY / divCnt;
|
||
|
|
||
|
// 초기값 저장
|
||
|
for (let i = 0; i < cnt; i++) {
|
||
|
const client = {};
|
||
|
const suffix = i.toString().padStart(3, '0');
|
||
|
const dronName = prefix + suffix;
|
||
|
// client
|
||
|
client.dronName = dronName;
|
||
|
client.socket = getConnection(dronName, host, port);
|
||
|
|
||
|
const divX = i % divCnt;
|
||
|
const divY = Math.floor(i / divCnt);
|
||
|
const x = Number((firstCoord[0] - divX * divDiifX).toFixed(5)) || 0;
|
||
|
const y = Number((firstCoord[1] + divY * divDiifY).toFixed(5)) || 0;
|
||
|
|
||
|
const initialData = {
|
||
|
...dumyData,
|
||
|
terminalId: dronName,
|
||
|
body: [
|
||
|
{
|
||
|
...dumyData.body[0],
|
||
|
objectId: dronName,
|
||
|
lat: x,
|
||
|
lon: y
|
||
|
}
|
||
|
]
|
||
|
};
|
||
|
client.data = initialData;
|
||
|
|
||
|
clients.push(client);
|
||
|
}
|
||
|
return clients;
|
||
|
};
|
||
|
//
|
||
|
const clients = severalDrones(100);
|
||
|
const dist = 0.01;
|
||
|
const sendData = cnt => {
|
||
|
const direction = Math.floor(cnt / 10) % 4;
|
||
|
clients.forEach(item => {
|
||
|
switch (direction) {
|
||
|
case 1:
|
||
|
item.data.body[0].lat = Number(
|
||
|
(item.data.body[0].lat - dist).toFixed(5)
|
||
|
);
|
||
|
break;
|
||
|
case 2:
|
||
|
item.data.body[0].lon = Number(
|
||
|
(item.data.body[0].lon - dist).toFixed(5)
|
||
|
);
|
||
|
break;
|
||
|
case 3:
|
||
|
item.data.body[0].lat = Number(
|
||
|
(item.data.body[0].lat + dist).toFixed(5)
|
||
|
);
|
||
|
break;
|
||
|
default:
|
||
|
item.data.body[0].lon = Number(
|
||
|
(item.data.body[0].lon + dist).toFixed(5)
|
||
|
);
|
||
|
break;
|
||
|
}
|
||
|
|
||
|
writeData(item.socket, JSON.stringify(item.data));
|
||
|
});
|
||
|
if (cnt >= 39) cnt = null;
|
||
|
iteratorSendData(++cnt);
|
||
|
};
|
||
|
|
||
|
const iteratorSendData = (cnt = 0) => {
|
||
|
setTimeout(() => sendData(cnt), 1000);
|
||
|
};
|
||
|
|
||
|
iteratorSendData();
|