步骤一:建一个协议文件cs.proto,客户端服务端共享
//cleint <---> scene
syntax = "proto2";
package cs;
enum ID {
//锦囊系统
ID_C2S_EquipSilkbag = 31370;
ID_S2C_EquipSilkbag = 31371;
}
// 装备锦囊
message C2S_EquipSilkbag {
optional uint32 pos = 1;
optional uint32 index = 2;
optional uint64 silkbag_id = 3;
}
message S2C_EquipSilkbag {
optional uint32 ret = 1;
optional uint32 pos = 2;
optional uint32 index = 3;
optional uint64 silkbag_id = 4;
}
步骤二:建一个消息常量的文件MessageConst.js
var MessageConst = {
"cs31370": "cs.C2S_EquipSilkbag",
"cs31371": "cs.S2C_EquipSilkbag",
}
module.exports = MessageConst;
步骤三:建一个消息常量ID的文件MessageIDConst.js
var MessageIDConst = {
"ID_C2S_EquipSilkbag": 31370,
"ID_S2C_EquipSilkbag": 31371,
}
module.exports = MessageIDConst;
步骤四 引入probuffer库protobuf.js
protobuf.js
提取码:提取码: y1s6
步骤五 测试使用
require("./protobuf");
var protobuf = global["dcodeIO"].ProtoBuf;
var MessageConst = require("./MessageConst");
var MessageIDConst = require("./MessageIDConst")
// 实现文件写入操作
// 加载文件操作模块:fs模块
var fs = require('fs');
var _pbc;
var status = false;
// 调用fs.readFile()进行文件读取,这是一个异步操作
fs.readFile('./cs.proto', function(err, data) {
if(err) throw err;
// 调用Buffer对象的toString()方法的时候,不传 utf8 参数,默认也是 utf8
_pbc = protobuf.loadProto(data, './cs').build('cs');
c2sEquipSilkbag(1,5,10);
});
var sendMessage = function(id,buffer){
let msgBuff = encodeProtoBuff(id, buffer);
send(id,msgBuff);
}
var send = function(id,buffer){
receivedMessage(id,buffer);
}
var receivedMessage = function(msgId,msgBuf){
let cs = MessageConst["cs" + msgId]
let proto = _pbc[cs.substr(3)]
let buff = proto.decode(msgBuf);
console.log("收到发送来的buffer数据---",buff);
}
var received = function(buffer){
}
var encodeProtoBuff = function(id, buff) {
let protoId = MessageConst["cs" + id];
let proto = new _pbc[protoId.substr(3)];
for (let i in buff) {
proto[i] = buff[i];
}
return proto.toArrayBuffer();
}
var c2sEquipSilkbag = function(pos, index, silkbagId) {
sendMessage(MessageIDConst.ID_C2S_EquipSilkbag, {
pos: pos,
index: index,
silkbag_id: silkbagId
});
}