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.
99 lines
2.4 KiB
99 lines
2.4 KiB
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();
|
|
|