TAF快速入门c环境开发am

1.  服务开发

1.1创建服务

运行创建脚本

/usr/local/taf/create_taf_server.sh[App][Server][Servant]

/usr/local/taf/create_taf_server.shTestAppHelloServerHello

其中

App:TestApp

Server:HelloServer

Sevant:Hello

命令执行后,会在当前目录的TestApp/HelloServer/目录下,生成下面文件:

HelloServer.hHelloServer.cppHello.jceHelloImp.hHelloImp.cppmakefile

这些文件,已经包含了最基本的服务框架和默认测试接口实现。

JCE接口文件(JCE的语法和使用,参见《TAF开发指南(c++)》),如下:

Hello.jce:

moduleTestApp

{

interfaceHello

{

inttest();

};

};

采用jce2cpp工具自动生成c++文件:/usr/local/taf/bin/jce2cpphello.jce会生成hello.cpp,hello.h文件,里面包含客户端和服务端的代码。

HelloImp是Servant的接口实现类,即实现服务定义的jce文件中的接口,如下:

HelloImp.h

#ifndef_HelloImp_H_

#define_HelloImp_H_

#include"servant/Application.h"

#include"Hello.h"

/**

*HelloImp继承hello.cpphello.h中定义的Hello对象

*/

classHelloImp:publicTestApp::Hello

{

public:

/**

*

*/

virtual~HelloImp(){}

/**

*初始化,Hello的虚拟函数,HelloImp初始化时调用

*/

virtualvoidinitialize();

/**

*析构,Hello的虚拟函数,服务析构HelloImp退出时调用

*/

virtualvoiddestroy();

/**

*实现jce文件中定义的test接口

*/

virtualinttest(taf::JceCurrentPtrcurrent){return0;};

};

/////////////////////////////////////////////////////

#endif

HelloImp.cpp:

#include"HelloImp.h"

#include"servant/Application.h"

usingnamespacestd;

//////////////////////////////////////////////////////

voidHelloImp::initialize()

{

//initializeservanthere:

//...

}

//////////////////////////////////////////////////////

voidHelloImp::destroy()

{

//destroyservanthere:

//...

}

HelloServer是服务的实现类,如下:

HelloServer.h:

#ifndef_HelloServer_H_

#define_HelloServer_H_

#includeiostream

#include"servant/Application.h"

usingnamespacetaf;

/**

*HelloServer继承框架的Application类

**/

classHelloServer:publicApplication

{

public:

/**

*

**/

virtual~HelloServer(){};

/**

*服务的初始化接口

**/

virtualvoidinitialize();

/**

*服务退出时的清理接口

**/

virtualvoiddestroyApp();

};

externHelloServerg_app;

////////////////////////////////////////////

#endif

HelloServer.cpp:

#include"HelloServer.h"

#include"HelloImp.h"

usingnamespacestd;

HelloServerg_app;

/////////////////////////////////////////////////////////////////

voidHelloServer::initialize()

{

//添加Servant接口实现类HelloImp与路由Obj绑定关系

addServantHelloImp(ServerConfig::Application+"."+ServerConfig::ServerName+".HelloObj");

//…

}

/////////////////////////////////////////////////////////////////

voidHelloServer::destroyApp()

{

//...

}

/////////////////////////////////////////////////////////////////

intmain(intargc,char*argv[])

{

try

{

g_app.main(argc,argv);

g_app.waitForShutdown();

}

catch(std::exceptione)

{

cerr"std::exception:"e.what()std::endl;

}

catch(...)

{

cerr"unknownexception."std::endl;

}

return-1;

}

/////////////////////////////////////////////////////////////////

1.2  服务编译

进入代码目录,先不修改任何代码,依次执行:

makecleanall

make

maketar

观察输出,是否有错误.如一切无误,服务会生成一个打包文件HelloServer.tgz。

1.3  扩展服务功能

TAF框架提供了接口定义语言的功能,我们称为Jce,可以在Jce文件中,增加一下接口和方法,扩展服务的功能。

可以修改由create_taf_server.sh生成的jce文件,以下3个接口方法中,test是默认生成的,testHello是新增加的接口。

moduleTestApp

{

interfaceHello

{

inttest();

inttestHello(stringsReq,outstringsRsp);

};

};

使用/usr/local/taf/bin/jce2cpphello.jce,重新生成hello.h,hello.cpp。

修改HelloImp.h/HelloImp.cpp,实现新的接口代码。

其中HelloImp.h中新增testHello方法,重载HelloObj的testHello方法:

virtualinttestHello(conststd::stringsReq,std::stringsRsp,taf::JceCurrentPtrcurrent);

HelloImp.cpp实现testHello方法:

intHelloImp::testHello(conststd::stringsReq,std::stringsRsp,taf::JceCurrentPtrcurrent)

{

TLOGDEBUG("HelloImp::testHellosReq:"sReqendl);

sRsp=sReq;

return0;

}

重新makecleanall;make;maketar,会重新生成HelloServer.tgz发布包。

1.4  客户端同步/异步调用服务

在开发环境上,创建/home/tafjce/[APP]/[Server]目录。

例如:/home/tafjce/TestApp/HelloServer

在刚才编写服务器的代码目录下,执行makerelease

这时会在/home/tafjce/TestApp/HelloServer目录下生成h、jce、o和mk文件。

建立客户端代码目录,如TestHelloClient/。

编写main.cpp,创建实例并调用刚编写的接口函数进行测试。

同步方式:

#includeiostream

#include"servant/Communicator.h"

#include"Hello.h"

usingnamespacestd;

usingnamespaceTestApp;

usingnamespacetaf;

intmain(intargc,char**argv)

{

Communicator







































北京治疗白癜风哪家医院比较好
北京好治疗白癜风医院



转载请注明:http://www.nydjfy.com/xxzl/1503.html