creator中使用protobufjs

安裝

sudo npm install -g [email protected]
pbjs -v

(不行的話:npm install [email protected]再試一試)

輸出版本信息 protobuf.js v6.7.0 CLI for JavaScript和相關命令

pbts -v

 

定位到.proto文件目錄

單個.proto文件轉js

pbjs -t static-module -w commonjs -o ChatMsg.js ChatMsg.proto

多個.proto文件轉js

pbjs -t static-module -w commonjs -o CMsg_pb.js *.proto

將轉的js轉ts(js文件超大,ts卻很小)

pbts -o CMsg_pb.d.ts CMsg_pb.js

導出的js文件超大,可以考慮去掉不用的函數。後面加入命令 --no-convert或者 --no-delimited

pbjs -t static-module -w commonjs -o ChatMsg.js ChatMsg.proto --no-convert

少了部分函數,文件會小很多,當然要確定不需要這些函數。

將導出的js和ts文件放到工程腳本文件夾下;

同時將/usr/local/lib/node_modules/protobufjs/dist/protobuf.js文件放到creator腳本文件下,導入爲插件,

因爲插件模式導入,可以直接使用,所以講導出的js文件開頭修改:

將文件開頭

var $protobuf = require("protobufjs/minimal");

改爲

var $protobuf = protobuf;

在使用的腳本文件中引用(ts工程),路徑根據實際情況去設置

import { grace } from "./ChatMsg";
let tChatMsg: grace.proto.msg.ChatMsg = new grace.proto.msg.ChatMsg();

let tPlayer: grace.proto.msg.Player = new grace.proto.msg.Player();

console.log(tChatMsg);

console.log(tPlayer);

tPlayer.id = 123;

tPlayer.name = 'lisi';

tPlayer.enterTime = 12345;

console.log(tPlayer);

let tPlayerData = PbUtil.Encode('msg','Player', tPlayer);

console.log("---Player---");

console.log(tPlayerData);

PbUtil文件

import { grace } from "./ChatMsg";

export default class PbUtil {

    //packageName: package名
	//msgTypeName: 消息類型名
	static Encode(packageName, msgTypeName, data): any {
		let PackageMgr = grace.proto;
		var msgType = PackageMgr[packageName][msgTypeName];
		var msg = msgType.create(data);
		var bytes = msgType.encode(msg).finish();
		return bytes;
	}
 
	static Decode(packageName, msgTypeName, bytes): any {
		let PackageMgr = grace.proto;
		var msgType = PackageMgr[packageName][msgTypeName];
		var msg = msgType.decode(bytes);
		var data = msgType.toObject(msg, {
			longs: Number,		//long默認轉換爲Number類型
			enums: String,
			bytes: String,
			// see ConversionOptions
		});
		return data;
	}
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章