feat:增加多角色在线功能
- 增加远程登录角色精灵 - 基于后端接口完成位置同步 - 实现多人在线以及跳转 - 增加个人房间功能
This commit is contained in:
118
test_client.js
Normal file
118
test_client.js
Normal file
@@ -0,0 +1,118 @@
|
||||
const WebSocket = require('ws');
|
||||
const http = require('http');
|
||||
|
||||
// Mock Data
|
||||
// const TOKEN = "mock_token_for_validation"; // Assuming manual auth is bypassed or working
|
||||
const WS_URL = 'ws://localhost:3000/location-broadcast';
|
||||
const SESSION_ID = 'debug_room';
|
||||
|
||||
function loginAndStart() {
|
||||
// 1. Try Register first (in case user doesn't exist)
|
||||
const registerData = JSON.stringify({
|
||||
username: 'testuser1',
|
||||
password: 'password123',
|
||||
nickname: 'TestUser'
|
||||
});
|
||||
|
||||
const regOptions = {
|
||||
hostname: 'localhost',
|
||||
port: 3000,
|
||||
path: '/auth/register',
|
||||
method: 'POST',
|
||||
headers: { 'Content-Type': 'application/json', 'Content-Length': registerData.length }
|
||||
};
|
||||
|
||||
const regReq = http.request(regOptions, (res) => {
|
||||
// Regardless of success (maybe already exists), try login
|
||||
performLogin();
|
||||
});
|
||||
regReq.on('error', () => performLogin()); // Proceed to login on error
|
||||
regReq.write(registerData);
|
||||
regReq.end();
|
||||
}
|
||||
|
||||
function performLogin() {
|
||||
const postData = JSON.stringify({
|
||||
identifier: 'testuser1', // Using a test account
|
||||
password: 'password123'
|
||||
});
|
||||
|
||||
const options = {
|
||||
hostname: 'localhost',
|
||||
port: 3000,
|
||||
path: '/auth/login',
|
||||
method: 'POST',
|
||||
headers: {
|
||||
'Content-Type': 'application/json',
|
||||
'Content-Length': postData.length
|
||||
}
|
||||
};
|
||||
|
||||
const req = http.request(options, (res) => {
|
||||
let data = '';
|
||||
res.on('data', (chunk) => { data += chunk; });
|
||||
res.on('end', () => {
|
||||
if (res.statusCode === 201 || res.statusCode === 200) {
|
||||
const json = JSON.parse(data);
|
||||
const realToken = json.data.access_token;
|
||||
console.log("Got Token:", realToken.substring(0, 10) + "...");
|
||||
startClients(realToken);
|
||||
} else {
|
||||
console.error("Login Failed:", res.statusCode, data);
|
||||
}
|
||||
});
|
||||
});
|
||||
|
||||
req.on('error', (e) => {
|
||||
console.error(`Login Request Error: ${e.message}`);
|
||||
});
|
||||
|
||||
req.write(postData);
|
||||
req.end();
|
||||
}
|
||||
|
||||
function startClients(validToken) {
|
||||
console.log("Starting Test Clients...");
|
||||
createClient('Listener', validToken);
|
||||
setTimeout(() => createClient('Sender', validToken), 1000);
|
||||
}
|
||||
|
||||
function createClient(name, token) {
|
||||
const ws = new WebSocket(WS_URL);
|
||||
|
||||
ws.on('open', () => {
|
||||
// console.log(`[${name}] Connected`);
|
||||
setTimeout(() => {
|
||||
// console.log(`[${name}] Sending Join Session...`);
|
||||
const joinMsg = {
|
||||
event: 'join_session',
|
||||
data: {
|
||||
sessionId: SESSION_ID,
|
||||
token: token
|
||||
}
|
||||
};
|
||||
ws.send(JSON.stringify(joinMsg));
|
||||
}, 500);
|
||||
});
|
||||
|
||||
ws.on('message', (data) => {
|
||||
console.log(`[${name}] Rx: ${data.toString()}`);
|
||||
});
|
||||
|
||||
ws.on('close', (code, reason) => {
|
||||
console.log(`[${name}] Closed: ${code} ${reason}`);
|
||||
});
|
||||
|
||||
ws.on('error', (err) => {
|
||||
console.error(`[${name}] Error:`, err.message);
|
||||
});
|
||||
}
|
||||
|
||||
// Start
|
||||
loginAndStart();
|
||||
|
||||
// Timeout
|
||||
setTimeout(() => {
|
||||
console.log("❌ Test Timed Out - No broadcast received.");
|
||||
process.exit(1);
|
||||
}, 15000);
|
||||
Reference in New Issue
Block a user