zoukankan      html  css  js  c++  java
  • DELPHI、FLASH、AS3、FLEX使用Protobuf(google Protocol Buffers)的具体方法

    最近因为工作需要,需要在不同的开发环境中应用Protobuf,特此,我专门研究了一下。为了防止自己忘记这些事情,现在记录在这里!需要的朋友可以借鉴一些,因为这些东西在GOOGLE和百度上搜索起来真的很费劲!

    一、首先说DELPHI的。

    因为DELPHI现在用的人不多了,所以找这个东西真心不好找!还好,加了几个QQ群,有用过的朋友告诉了我!

    具体步骤如下:

    1、下载DELPHI使用Protobuf需要的项目。

    地址在这里:http://sourceforge.NET/projects/fundementals/files/Fundamentals4/

    2、编译ProtoCodeGen.exe
    下载完上面的文件后,在子目录中找到 ProtocolBuffersCodeGenAppProtoCodeGen.dpr  ----- 编译它

    我用的是DELPHI 2007 打开项目会提示打不开什么的,没关系,删掉ProtoCodeGen.dproj,然后在打开它。实在不行,用记事本打开,复制代码出来再建立个新项目……

    3、编译完毕后,得到ProtoCodeGen.exe一个。它就可以把   *.proto  文件,生成为PAS文件了。

    4、在D盘下,我新建了一个Google文件夹,把刚刚生成的protocodegen.exe放了进去

    在这个文件夹下,我用记事本新建了一个文件,里面的内容如下

    message Person {
        required string name = 1;
        required int32 id = 2;
    }

    保存为   message.proto   

    同样,我在Google文件夹下用建立一个叫做 pas_out文件夹

    具体编译的指令时这样的。

    打开 CMD。(DOS命令行那个,在开始——》运行——》CMD——》回车)

    敲入命令

    这个时候,去D:googlepas_out下去找,会发现生成了一个pbMessageMessages.pas文件。

    大功告成!!!!!

    5、如何使用

    新建一个项目

    把Fundamentals.ProtoBuf.4.0.01(加压文件夹中的) ProtocolBuffers和Utils目录下的文件拷贝到我们新建的项目下,添加到项目里。

    恩,其实并不是都能用的上的。这个自己看生成的pbMessageMessages.pas其他它就需要3个引用

      cUtils,
      cStrings,
      cProtoBufUtils;

    加密或者解密(序列化或者反序列化的代码如下)

    var p1,p2:TPersonRecord;
      len:Integer;
      Bt:TBytes;
    begin
      p1.Name := edtName.Text;
      p1.Id := StrToInt(edtID.Text);
      SetLength(Bt,100);
      //加密
      //len := pbEncodeValuePersonRecord(Bt[0],100,p1);
      len := pbEncodeValuePersonRecord(Bt[0],100,p1);
      SetLength(Bt,len);
      mmo1.Lines.Add(IntToStr(len));
      //解密
      //PersonRecordInit(p2);
      len :=pbDecodeValuePersonRecord(Bt[0],len,p2);
      mmo1.Lines.Add(IntToStr(len));
      mmo1.Lines.Add(p2.Name);
    end;

    彻底大功告成!!!!!

    ==================================================================================================

    二、再说FLASH的

    1、还是下载插件。

    话说,这FLASH的版本和开发工具很多,本座用的是FLash Builder 4.7

    话说这FLASH使用GOOGLE 的protobuf的插件也有2个。

    protobuf-actionscript3 (据说是官方,但也不想是官方)

    protoc-gen-as3(国人写的——需要力挺)

    网上评论说,国人写的好,更新的也及时,BUG也少,支持的也广,而所谓的官方的,貌似也能凑合着用 —— 相当凑合!

    本座特地去2个开源地址去看了一下。
    http://code.google.com/p/protobuf-actionscript3/downloads/list(所谓官方的)

    最后一个更新日期是   Oct 2009

    在看看我们国人的
    https://code.google.com/p/protoc-gen-as3/downloads/list
    最后一次更新日期是   Mar 2013

    还能说什么呢?果断用国人的!!!!

    2、下载之后怎么做呢?

    这部分我就不自己写出来了,引用前人的文章吧
    http://blog.csdn.net/luna84/article/details/8696217  --- 环境配置和编译指令

    http://blog.csdn.Net/luna84/article/details/8695418

    需要注意的是:你需要有Java的SDK作为环境,不然在敲CMD命令的时候 会提示

    ‘java‘不是内部或外部命令,也不是可运行的程序或批处理文件
    去http://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html下载JDK安装吧,100多M而已。

    3、编译和使用的方法是从别人的BLOG里复制过来的,详情参考上面的2个连接

    以下内容来自http://www.cnblogs.com/vincent-lee/archive/2012/01/23/2328866.html 

    window下使用actionscript的protoc-gen-as3步骤
    1)下载protoc-gen-as3-1.0.0-rc6-bin.tar.gz 并解压到d:googleas_plugin目录
    2)下载protoc-2.4.1-win32.zip 并解压到d:google
    3)创建d:googleas_out目录
    4)创建d:googlemessage.proto

    message Person {
        required string name = 1;
        required int32 id = 2;
    }
     

    5)开打cmd运行命令

    protoc.exe --plugin=protoc-gen-as3="protoc-gen-as3.bat" --as3_out=d:googleas_out message.proto

    目录d:googleas_out下自动生成initializer.as.inc,Person.as文件
    6)打开flash builder创建应用,引入d:googleas_pluginprotobuf.swc文件

    <?xml version="1.0" encoding="utf-8"?>
    <s:Application xmlns:fx="http://ns.adobe.com/mxml/2009" 
      xmlns:s="library://ns.adobe.com/flex/spark" 
      xmlns:mx="library://ns.adobe.com/flex/mx" minWidth="955" minHeight="600">

    <fx:Script>
    <![CDATA[
    import mx.controls.Alert;

    import Protocol.Person;
    protected function test_clickHandler(event:MouseEvent):void
    {
    // TODO Auto-generated method stub
    var p:Person=new Person();
    p.id=1;
    p.name="tommy";
    var b:ByteArray=new ByteArray();
    p.writeTo(b);
    b.position =0;
    var pp:Person=new Person();
    pp.mergeFrom(b);
    Alert.show("pp.id="+pp.id+" "+"pp.name="+pp.name,"person");
    }
    ]]>
    </fx:Script>

    <fx:Declarations>
    <!-- 将非可视元素(例如服务、值对象)放在此处 -->
    </fx:Declarations>
    <s:Button x="100" y="100" id="test" label="test" click="test_clickHandler(event)" />
    </s:Application>

     

  • 相关阅读:
    移动互联网实战--Apple的APNS桩推送服务的实现(1)
    移动互联网实战--社交游戏的排行榜设计和实现(2)
    移动互联网实战--社交游戏的排行榜设计和实现(1)
    Linux 线程--那一年, 我们一起忽视的pthread_join
    移动互联网实战--资源类APP的数据存储处理和优化
    Thrift 个人实战--RPC服务的发布订阅实现(基于Zookeeper服务)
    移动互联网实战--Web Restful API设计和基础架构
    Thrift 个人实战--Thrift RPC服务框架日志的优化
    Thrift 个人实战--Thrift 服务化 Client的改造
    Kafka集群副本分配算法解析
  • 原文地址:https://www.cnblogs.com/h2zZhou/p/7142324.html
Copyright © 2011-2022 走看看