123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384 |
- import {
- common,
- user
- } from '../proto/bundle.js';
- const protoMap = {}
- function getEncodeFun(servant) {
- return protoMap[servant.toString()].requestEncode;
- }
- function getDecodeFun(servant) {
- return protoMap[servant.toString()].responseDecode
- }
- function getMsgWebsocket(version, server, servant, buffer) {
- return common.MsgWebsocket.create({
- version: version,
- app: 1,
- server: server,
- servant: servant,
- data: buffer,
- })
- }
- function getRequestBuffer(request, buffer){
- let requestMessage = getMsgWebsocket(1, request.server, request.servant, buffer)
- let requestBuffer = common.MsgWebsocket.encode(requestMessage).finish()
- return new Uint8Array([...requestBuffer]).buffer
- }
- function getResponseDataBuf(response){
- let resBuf = Buffer.from(response.data)
- let resMessage = common.MsgWebsocket.decode(resBuf)
- return resMessage.data
- }
- //1005 是后端提供的此接口的servant
- protoMap['1005'] = {
- requestEncode: function(request) { //登录请求的编码
- //创建login_req的message对象
- let loginMessage = user.login_req.create({
- type: request.data.type,
- //如果phone定义的是bytes,这里要转换一下,
- //如果phone定义的是string,这里就不需要Buffer.from了
- //要确认phone是string类型,才能把phone的bytes更换成string
- phone: Buffer.from(request.data.phone),
- //同phone,在proto文件中字段名(verifyInfo)最好用驼峰命名规则,不要用verify_info
- verifyInfo: Buffer.from(request.data.verifyInfo),
- })
- //login_req的message 编码转换为Buffer数据
- let buffer = user.login_req.encode(loginMessage).finish()
- //返回请求的ArrayBuffer
- return getRequestBuffer(request,buffer)
- },
- responseDecode: function(response) { //登录响应的解码
- //得到loginRsp message的buffer数据
- let loginRspBuf = getResponseDataBuf(response)
- //解码得到loginRsp的message对象
- let loginRspMessage = user.login_rsp.decode(loginRspBuf)
- //把loginRsp Message对象转换为js对象
- let obj = user.login_rsp.toObject(loginRspMessage, {
- longs: String,
- enums: String,
- })
- //如果proto定义的字段是bytes,在这里可以转换成一下String
- //也可以直接在proto文件中把字段的bytes 类型 替换成string类型,
- //但是要确认这个字段是string类型的,string类型在这里就不需要转换了
- if(typeof obj.errInfo.errorMessage !== 'undefined'){
- obj.errInfo.errorMessage = Buffer.from(obj.errInfo.errorMessage).toString()
- }
- if(typeof obj.token !== 'undefined'){
- obj.token = Buffer.from(obj.token).toString()
- }
- return obj
- }
- }
- module.exports = {
- getEncodeFun,
- getDecodeFun,
- }
|