egret游戏引擎入门(六)

今天分享一下通信控制SocketManager。
在egret引擎中,websocket是作为第三方库存在的,需要在创建之初将websocket选项选中,或者参照官网教程,在egret项目的egretProperties.json中编写。官网-如何使用第三方库

通信控制也是采用单例模式,里面也会有几个方法:

当socket连接打开

this.webSocket.addEventListener(egret.Event.CONNECT, this.onSocketOpen, this);

当socket连接关闭,这个地方会有一些处理。如:掉线重连操作等

this.webSocket.addEventListener(egret.Event.CLOSE, this.onSocketClose, this);

当socket连接错误

this.webSocket.addEventListener(egret.IOErrorEvent.IO_ERROR, this.onSocketError, this);

当接收到后端传过来的消息,因为通信是通过protobuf,所以这个地方接收到消息后,会传入SocketDataHandler方法中按照cmd进行对应的解析,如果发送的消息很多的话,这里也要写很多。值得注意的是,书写的顺序必须与后端保持一致。这里我也没大有发言权,毕竟是另一个同事调研编写的。但是个人感觉通过protobuf相当麻烦,需要给每一条消息体都做相应的定义,加上处理数据需要写一遍、通过不同cmd执行不同方法写一遍,加起来就是要在收到消息这里编写三次。

this.webSocket.addEventListener(egret.ProgressEvent.SOCKET_DATA, this.onReceiveMessage, this);

通过url与后端进行连接

this.webSocket.connectByUrl(GlobalData.scUrl);

在消息传输的过程中发现了一个语言层面的巨大无比的坑…
ts中使用protobuf时需要定义一个该条消息的类型,类似string、int32、int64这种的。之前在定义userID的时候,将类型写为int64,结果发现userID尾数不是0的都变为了0,好像是第15为之后。找了各种资料才发现,js只能到15位,最终无奈将userID这个类型变为了string。


下次会分享几个封装的egret方法。

发表评论

邮箱地址不会被公开。 必填项已用*标注