diff --git a/cocoscreator_projects/YouleNexus/assets/framework/net/net-client.ts b/cocoscreator_projects/YouleNexus/assets/framework/net/net-client.ts index cb70cbb..d4c2672 100644 --- a/cocoscreator_projects/YouleNexus/assets/framework/net/net-client.ts +++ b/cocoscreator_projects/YouleNexus/assets/framework/net/net-client.ts @@ -114,14 +114,14 @@ export class NetClient { const msg = r.message; if (msg.rpc === 'submit_error') return; // docs §3.2-9 + // 服务器踢人:发事件并终止,**不自动重连**(对齐真实客户端 kick 弹窗停住;否则会空转重踢)。 + if (msg.rpc === 'kick_server') { this.bus.emit('kicked', msg.data); this.stop(); return; } if (this.isSendLoginState) { // docs §3.2-10 登录态门控 if (msg.rpc === 'player_login') { this.isSendLoginState = false; this.isLogin = true; if (this.loginGuard != null) { this.clock.clearTimeout(this.loginGuard); this.loginGuard = null; } this.policy.reset(); this.bus.emit('login', msg.data); - } else if (msg.rpc === 'kick_server') { - this.bus.emit('kicked', msg.data); } return; // 其它一律丢弃 } diff --git a/cocoscreator_projects/framework-tests/net/net-client.test.ts b/cocoscreator_projects/framework-tests/net/net-client.test.ts index 83ae4d8..039e8aa 100644 --- a/cocoscreator_projects/framework-tests/net/net-client.test.ts +++ b/cocoscreator_projects/framework-tests/net/net-client.test.ts @@ -124,6 +124,24 @@ test('TcpID 去重:旧连接的残留包被丢弃', async () => { assert.equal(messages.length, 0); }); +test('kick_server:emit kicked 且不再自动重连', async () => { + const t1 = new FakeTransport(), t2 = new FakeTransport(); + const { clock, advance } = fakeClock(); + const client = makeClient([t1, t2], clock); + let kicked = 0; + client.on('kicked', () => { kicked++; }); + client.start(); + await t1.flush(); + // 服务器踢人(登录态期间) + t1.serverPush(JSON.stringify({ route: 'agent', rpc: 'kick_server', data: { msg: 'x' } })); + await t1.flush(); + assert.equal(kicked, 1); + // 推进重连/超时定时器 → 不应建立新连接或重发 login + advance(30000); advance(10000); + await t2.flush(); + assert.equal(t2.sent.length, 0); +}); + test('debug=true 记录 send 与 recv(注入 logger)', async () => { const t = new FakeTransport(); const { clock } = fakeClock();