117 lines
3.8 KiB
TypeScript
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();
|
|
}
|
|
}
|