js版本的protobuf使用

步骤一:建一个协议文件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
        });
    }
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值