mirror of
https://github.com/legop3/MultiRoombaRover.git
synced 2026-09-16 01:21:20 -04:00
wag
This commit is contained in:
File diff suppressed because one or more lines are too long
@@ -11,7 +11,7 @@
|
|||||||
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
|
<meta name="apple-mobile-web-app-status-bar-style" content="black-translucent" />
|
||||||
<meta name="apple-mobile-web-app-title" content="Multi Roomba Rover" />
|
<meta name="apple-mobile-web-app-title" content="Multi Roomba Rover" />
|
||||||
<title>Multi Roomba Rover</title>
|
<title>Multi Roomba Rover</title>
|
||||||
<script type="module" crossorigin src="/assets/index-BP_AZjbu.js"></script>
|
<script type="module" crossorigin src="/assets/index-DNjDcUqU.js"></script>
|
||||||
<link rel="stylesheet" crossorigin href="/assets/index-HhAzSaxc.css">
|
<link rel="stylesheet" crossorigin href="/assets/index-HhAzSaxc.css">
|
||||||
</head>
|
</head>
|
||||||
<body>
|
<body>
|
||||||
|
|||||||
@@ -64,11 +64,11 @@ io.on('connection', (socket) => {
|
|||||||
if (!roverId) {
|
if (!roverId) {
|
||||||
throw new Error('roverId required');
|
throw new Error('roverId required');
|
||||||
}
|
}
|
||||||
const isSongCommand = type === 'song';
|
const payload = data ? { ...data } : {};
|
||||||
|
const isSongCommand = type === 'song' || (type === 'raw' && isSongRawPayload(payload));
|
||||||
if (!isSongCommand && !roverManager.canDrive(roverId, socket)) {
|
if (!isSongCommand && !roverManager.canDrive(roverId, socket)) {
|
||||||
throw new Error('Not your turn or no control');
|
throw new Error('Not your turn or no control');
|
||||||
}
|
}
|
||||||
const payload = data ? { ...data } : {};
|
|
||||||
const isAdminSocket = isAdmin(socket);
|
const isAdminSocket = isAdmin(socket);
|
||||||
const driveDirect = payload?.driveDirect;
|
const driveDirect = payload?.driveDirect;
|
||||||
if (type === 'drive' && driveDirect && !isAdminSocket) {
|
if (type === 'drive' && driveDirect && !isAdminSocket) {
|
||||||
@@ -110,3 +110,20 @@ io.on('connection', (socket) => {
|
|||||||
socket.on('command', handleCommand);
|
socket.on('command', handleCommand);
|
||||||
socket.on('command:issue', handleCommand);
|
socket.on('command:issue', handleCommand);
|
||||||
});
|
});
|
||||||
|
|
||||||
|
function isSongRawPayload(payload) {
|
||||||
|
if (!payload) return false;
|
||||||
|
const raw = payload.raw;
|
||||||
|
if (!raw) return false;
|
||||||
|
let bytes = null;
|
||||||
|
if (Buffer.isBuffer(raw)) {
|
||||||
|
bytes = raw;
|
||||||
|
} else if (Array.isArray(raw)) {
|
||||||
|
bytes = Buffer.from(raw);
|
||||||
|
} else if (typeof raw === 'string') {
|
||||||
|
bytes = Buffer.from(raw, 'base64');
|
||||||
|
}
|
||||||
|
if (!bytes || bytes.length === 0) return false;
|
||||||
|
const opcode = bytes[0];
|
||||||
|
return opcode === 140 || opcode === 141;
|
||||||
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user