Files
rougelike-demo/client/assets/scripts/Framework/Net/NetExample.ts
2025-12-14 22:39:43 +08:00

117 lines
3.8 KiB
TypeScript

import { _decorator, Component } from 'cc';
import { NetConfig } from './NetConfig';
import { NetEvent } from './NetEvent';
import { NetManager } from './NetManager';
const { ccclass } = _decorator;
/**
* 网络管理器使用示例
* 演示如何使用 NetManager 连接服务器并进行通信
*/
@ccclass('NetExample')
export class NetExample extends Component {
start() {
// 演示网络管理器的使用
this.initNetwork();
}
/**
* 初始化网络
*/
private async initNetwork() {
console.log('=== 网络模块使用示例 ===');
// 1. 获取网络管理器实例
const netManager = NetManager.getInstance();
// 2. 设置服务协议 (必须在 init 之前调用)
// TODO: 运行 npm run sync-shared 后,从 Shared 目录导入协议
// import { serviceProto } from '../../Shared/protocols/serviceProto';
// netManager.setServiceProto(serviceProto);
console.log('⚠️ 提示: 请先运行 npm run sync-shared 同步服务端协议');
console.log('⚠️ 然后导入 serviceProto 并调用 setServiceProto()');
// 3. 监听网络事件
netManager.on(NetEvent.Connected, () => {
console.log('✅ 网络已连接');
this.onConnected();
});
netManager.on(NetEvent.Disconnected, () => {
console.log('❌ 网络已断开');
});
netManager.on(NetEvent.Reconnecting, (count: number) => {
console.log(`🔄 正在重连... (${count})`);
});
netManager.on(NetEvent.Error, (error: any) => {
console.error('⚠️ 网络错误:', error);
});
// 4. 配置网络参数
const config: NetConfig = {
serverUrl: 'http://localhost:3000', // TODO: 替换为实际服务器地址
timeout: 30000,
autoReconnect: true,
reconnectInterval: 3000,
maxReconnectTimes: 5
};
// 5. 初始化
netManager.init(config);
// 6. 连接服务器 (HttpClient 创建即可用)
const success = await netManager.connect();
if (success) {
console.log('✅ 网络初始化成功');
} else {
console.error('❌ 网络初始化失败');
}
}
/**
* 连接成功后的处理
*/
private async onConnected() {
const netManager = NetManager.getInstance();
// 示例: 调用登录 API
// 需要先同步服务端协议并导入类型定义
// import { ReqLogin, ResLogin } from '../../Shared/protocols/PtlLogin';
//
// const result = await netManager.callApi<ReqLogin, ResLogin>('login', {
// username: 'testUser',
// password: '123456'
// });
//
// if (result) {
// console.log('登录成功:', result);
// }
// 示例: 监听服务器消息
// import { MsgUserJoin } from '../../Shared/protocols/MsgUserJoin';
//
// netManager.listenMsg('UserJoin', (msg: MsgUserJoin) => {
// console.log('有新用户加入:', msg);
// });
console.log('');
console.log('========================================');
console.log('📝 使用步骤:');
console.log('1. 运行 npm run sync-shared 同步协议');
console.log('2. 从 Shared 导入 serviceProto');
console.log('3. 调用 setServiceProto(serviceProto)');
console.log('4. 就可以使用 callApi 和 listenMsg 了');
console.log('========================================');
}
onDestroy() {
// 断开网络连接
NetManager.getInstance().disconnect();
}
}