参考文章:cocos2dx使用lua和protobuf

首先得下载protobuf-gen-lua的插件,插件Git地址在此。

下载完之后进入到protoc-gen-lua\plugin这个目录,并在其中建立一个批处理文件:

@python E:\3rd\quick-x-protobuf\proto-gen-lua\protoc-gen-lua\plugin\protoc-gen-lua

然后进入到上一篇笔记中的addressbook.proto所在的文件夹内,运行如下命令:

protoc --lua_out=生成的lua存放地址 --plugin=protoc-gen-lua=上面新建的bat的完整地址 addressbook.proto

回车。

我们到目标地址下面就会看到一个addressbook_pb.lua文件,内容如下:

-- Generated By protoc-gen-lua Do not Edit
local protobuf = require "protobuf"
module('addressbook_pb') local PERSON = protobuf.Descriptor();
local PERSON_PHONENUMBER = protobuf.Descriptor();
local PERSON_PHONENUMBER_NUMBER_FIELD = protobuf.FieldDescriptor();
local PERSON_PHONENUMBER_TYPE_FIELD = protobuf.FieldDescriptor();
local PERSON_PHONETYPE = protobuf.EnumDescriptor();
local PERSON_PHONETYPE_MOBILE_ENUM = protobuf.EnumValueDescriptor();
local PERSON_PHONETYPE_HOME_ENUM = protobuf.EnumValueDescriptor();
local PERSON_PHONETYPE_WORK_ENUM = protobuf.EnumValueDescriptor();
local PERSON_NAME_FIELD = protobuf.FieldDescriptor();
local PERSON_ID_FIELD = protobuf.FieldDescriptor();
local PERSON_EMAIL_FIELD = protobuf.FieldDescriptor();
local PERSON_PHONE_FIELD = protobuf.FieldDescriptor();
local ADDRESSBOOK = protobuf.Descriptor();
local ADDRESSBOOK_PERSON_FIELD = protobuf.FieldDescriptor(); PERSON_PHONENUMBER_NUMBER_FIELD.name = "number"
PERSON_PHONENUMBER_NUMBER_FIELD.full_name = ".tutorial.Person.PhoneNumber.number"
PERSON_PHONENUMBER_NUMBER_FIELD.number =
PERSON_PHONENUMBER_NUMBER_FIELD.index =
PERSON_PHONENUMBER_NUMBER_FIELD.label =
PERSON_PHONENUMBER_NUMBER_FIELD.has_default_value = false
PERSON_PHONENUMBER_NUMBER_FIELD.default_value = ""
PERSON_PHONENUMBER_NUMBER_FIELD.type =
PERSON_PHONENUMBER_NUMBER_FIELD.cpp_type = PERSON_PHONENUMBER_TYPE_FIELD.name = "type"
PERSON_PHONENUMBER_TYPE_FIELD.full_name = ".tutorial.Person.PhoneNumber.type"
PERSON_PHONENUMBER_TYPE_FIELD.number =
PERSON_PHONENUMBER_TYPE_FIELD.index =
PERSON_PHONENUMBER_TYPE_FIELD.label =
PERSON_PHONENUMBER_TYPE_FIELD.has_default_value = true
PERSON_PHONENUMBER_TYPE_FIELD.default_value = HOME
PERSON_PHONENUMBER_TYPE_FIELD.enum_type = _PERSON_PHONETYPE
PERSON_PHONENUMBER_TYPE_FIELD.type =
PERSON_PHONENUMBER_TYPE_FIELD.cpp_type = PERSON_PHONENUMBER.name = "PhoneNumber"
PERSON_PHONENUMBER.full_name = ".tutorial.Person.PhoneNumber"
PERSON_PHONENUMBER.nested_types = {}
PERSON_PHONENUMBER.enum_types = {}
PERSON_PHONENUMBER.fields = {PERSON_PHONENUMBER_NUMBER_FIELD, PERSON_PHONENUMBER_TYPE_FIELD}
PERSON_PHONENUMBER.is_extendable = false
PERSON_PHONENUMBER.extensions = {}
PERSON_PHONENUMBER.containing_type = PERSON
PERSON_PHONETYPE_MOBILE_ENUM.name = "MOBILE"
PERSON_PHONETYPE_MOBILE_ENUM.index =
PERSON_PHONETYPE_MOBILE_ENUM.number =
PERSON_PHONETYPE_HOME_ENUM.name = "HOME"
PERSON_PHONETYPE_HOME_ENUM.index =
PERSON_PHONETYPE_HOME_ENUM.number =
PERSON_PHONETYPE_WORK_ENUM.name = "WORK"
PERSON_PHONETYPE_WORK_ENUM.index =
PERSON_PHONETYPE_WORK_ENUM.number =
PERSON_PHONETYPE.name = "PhoneType"
PERSON_PHONETYPE.full_name = ".tutorial.Person.PhoneType"
PERSON_PHONETYPE.values = {PERSON_PHONETYPE_MOBILE_ENUM,PERSON_PHONETYPE_HOME_ENUM,PERSON_PHONETYPE_WORK_ENUM}
PERSON_NAME_FIELD.name = "name"
PERSON_NAME_FIELD.full_name = ".tutorial.Person.name"
PERSON_NAME_FIELD.number =
PERSON_NAME_FIELD.index =
PERSON_NAME_FIELD.label =
PERSON_NAME_FIELD.has_default_value = false
PERSON_NAME_FIELD.default_value = ""
PERSON_NAME_FIELD.type =
PERSON_NAME_FIELD.cpp_type = PERSON_ID_FIELD.name = "id"
PERSON_ID_FIELD.full_name = ".tutorial.Person.id"
PERSON_ID_FIELD.number =
PERSON_ID_FIELD.index =
PERSON_ID_FIELD.label =
PERSON_ID_FIELD.has_default_value = false
PERSON_ID_FIELD.default_value =
PERSON_ID_FIELD.type =
PERSON_ID_FIELD.cpp_type = PERSON_EMAIL_FIELD.name = "email"
PERSON_EMAIL_FIELD.full_name = ".tutorial.Person.email"
PERSON_EMAIL_FIELD.number =
PERSON_EMAIL_FIELD.index =
PERSON_EMAIL_FIELD.label =
PERSON_EMAIL_FIELD.has_default_value = false
PERSON_EMAIL_FIELD.default_value = ""
PERSON_EMAIL_FIELD.type =
PERSON_EMAIL_FIELD.cpp_type = PERSON_PHONE_FIELD.name = "phone"
PERSON_PHONE_FIELD.full_name = ".tutorial.Person.phone"
PERSON_PHONE_FIELD.number =
PERSON_PHONE_FIELD.index =
PERSON_PHONE_FIELD.label =
PERSON_PHONE_FIELD.has_default_value = false
PERSON_PHONE_FIELD.default_value = {}
PERSON_PHONE_FIELD.message_type = PERSON_PHONENUMBER
PERSON_PHONE_FIELD.type =
PERSON_PHONE_FIELD.cpp_type = PERSON.name = "Person"
PERSON.full_name = ".tutorial.Person"
PERSON.nested_types = {PERSON_PHONENUMBER}
PERSON.enum_types = {PERSON_PHONETYPE}
PERSON.fields = {PERSON_NAME_FIELD, PERSON_ID_FIELD, PERSON_EMAIL_FIELD, PERSON_PHONE_FIELD}
PERSON.is_extendable = false
PERSON.extensions = {}
ADDRESSBOOK_PERSON_FIELD.name = "person"
ADDRESSBOOK_PERSON_FIELD.full_name = ".tutorial.AddressBook.person"
ADDRESSBOOK_PERSON_FIELD.number =
ADDRESSBOOK_PERSON_FIELD.index =
ADDRESSBOOK_PERSON_FIELD.label =
ADDRESSBOOK_PERSON_FIELD.has_default_value = false
ADDRESSBOOK_PERSON_FIELD.default_value = {}
ADDRESSBOOK_PERSON_FIELD.message_type = PERSON
ADDRESSBOOK_PERSON_FIELD.type =
ADDRESSBOOK_PERSON_FIELD.cpp_type = ADDRESSBOOK.name = "AddressBook"
ADDRESSBOOK.full_name = ".tutorial.AddressBook"
ADDRESSBOOK.nested_types = {}
ADDRESSBOOK.enum_types = {}
ADDRESSBOOK.fields = {ADDRESSBOOK_PERSON_FIELD}
ADDRESSBOOK.is_extendable = false
ADDRESSBOOK.extensions = {} AddressBook = protobuf.Message(ADDRESSBOOK)
Person = protobuf.Message(PERSON)
Person.PhoneNumber = protobuf.Message(PERSON_PHONENUMBER)

实验完成,打算下一步把这个整合到自己的手游demo里面去,有机会我会好好阅读protoc-gen-lua代码的,现在最要紧的是下班,呵呵。

照着例子学习 protobuf-lua的更多相关文章

  1. Redis源码学习:Lua脚本

    Redis源码学习:Lua脚本 1.Sublime Text配置 我是在Win7下,用Sublime Text + Cygwin开发的,配置方法请参考<Sublime Text 3下C/C++开 ...

  2. 数百个 HTML5 例子学习 HT 图形组件 – 3D建模篇

    http://www.hightopo.com/demo/pipeline/index.html <数百个 HTML5 例子学习 HT 图形组件 – WebGL 3D 篇>里提到 HT 很 ...

  3. 数百个 HTML5 例子学习 HT 图形组件 – 3D 建模篇

    http://www.hightopo.com/demo/pipeline/index.html <数百个 HTML5 例子学习 HT 图形组件 – WebGL 3D 篇>里提到 HT 很 ...

  4. 数百个 HTML5 例子学习 HT 图形组件 – WebGL 3D 篇

    <数百个 HTML5 例子学习 HT 图形组件 – 拓扑图篇>一文让读者了解了 HT的 2D 拓扑图组件使用,本文将对 HT 的 3D 功能做个综合性的介绍,以便初学者可快速上手使用 HT ...

  5. 数百个 HTML5 例子学习 HT 图形组件 – 拓扑图篇

    HT 是啥:Everything you need to create cutting-edge 2D and 3D visualization. 这口号是当年心目中的产品方向,接着就朝这个方向慢慢打 ...

  6. HTML5 例子学习 HT 图形组件

    HTML5 例子学习 HT 图形组件 HT 是啥:Everything you need to create cutting-edge 2D and 3D visualization. 这口号是当年心 ...

  7. pytorch例子学习-DATA LOADING AND PROCESSING TUTORIAL

    参考:https://pytorch.org/tutorials/beginner/data_loading_tutorial.html DATA LOADING AND PROCESSING TUT ...

  8. Lua学习---编译生成lua和luac

    众所周知,Lua是一种强大的脚本语言,并且这种语言是用C语言实现的.为什么要学习这门语言?因为它可以增强我看C语言代码的功底. 我下的Lua版本是Lua5.3,关于Lua5.3的简介如下: http: ...

  9. 通过例子学习C++(二)最小公倍数

    本文是通过例子学习C++的第二篇,通过这个例子可以快速入门c++相关的语法. 题目要求:输入两个整数,求其最小公倍数. 解答方法一:两个数的最小公倍数,是这两个数中的大数,或者是这2个数的倍数中的最小 ...

  10. 通过例子学习C++(三)最大公约数,并知其然

    本文是通过例子学习C++的第三篇,通过这个例子可以快速入门c++相关的语法. 题目要求:输入两个整数,求其大公约数. 解答方法一:两个数的最大公约数,是这两个数中的小数,或者是这2个数的公约数中的最大 ...

随机推荐

  1. 理解Java String和String Pool

    本文转载自: http://blog.sina.com.cn/s/blog_5203f6ce0100tiux.html 要理解 java中String的运作方式,必须明确一点:String是一个非可变 ...

  2. jsp 页面取值

    <%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding= ...

  3. git 提高下载速度

    1.  直接下载分支,就不用下载不需要的源码了. git clone --depth 1 git://github.com/TI-OpenLink/wl18xx.git  --branch ol_r8 ...

  4. Call an activity method from a fragment

    From fragment to activty: ((YourActivityClassName)getActivity()).yourPublicMethod(); From activity t ...

  5. Lucene add、updateDocument添加、更新与search查询(转)

    package com.lucene;   import java.io.IOException;   import org.apache.lucene.analysis.standard.Stand ...

  6. hadoop yarn

    简介: 本文介绍了 Hadoop 自 0.23.0 版本后新的 map-reduce 框架(Yarn) 原理,优势,运作机制和配置方法等:着重介绍新的 yarn 框架相对于原框架的差异及改进:并通过 ...

  7. Django: 之Apache、Nginx部署以及发送邮件

    在这里讲述部署的方法和常见的问题,并给出了在BAE,JAE,SAE等上面部署的实例. Django + nginx + Gunicorn/uwsgi部署方式,参见另一篇:Django部署(nginx) ...

  8. logstash安装配置

    vim /usr/local/logstash/etc/hello_search.conf 输入下面: input { stdin { type => "human" }} ...

  9. 【转】PHP里的basename函数不支持中文名的解决

    今天用到basename 函数获取文件名称时,发现如果是中文的文件名返回只有后缀的空文件名(如:.pdf)    string basename ( string path [, string suf ...

  10. Entity Framework 学习初级篇6--EntityClient

    System.Data.EntityClient 命名空间是 实体框架的 .NET Framework 数据提供程序.EntityClient 提供程序使用存储特定的 ADO.NET 数据提供程序类和 ...