#ifndef SIMPLE_ICE
#define SIMPLE_ICE
module DiyModule{
interface CAbsPrinter{
void DispStr(string s);
int Calc(int num);
};
};
#endif
#include
#include "Printer.h"
using namespace DiyModule;
#include
using namespace std;
class CPrinter : public CAbsPrinter{
public:
virtual void DispStr(const string& msg, const Ice::Current& curr){
cout << msg << endl;
}
virtual int Calc(int num, const Ice::Current& curr){
return num*10;
}
};
int main(int argc, char* argv[])
{
int iStatus = 0;//程序的退出时的状态,就是否成功执行
Ice::CommunicatorPtr spCommunicator;//来包含Ice run time 的主句柄
cout << "~~~~~~~~~~服务器开始启动~~~~~~~~~~~~~" << endl;
try{
spCommunicator = Ice::initialize(argc, argv);
Ice::ObjectAdapterPtr pAdapter= spCommunicator->createObjectAdapterWithEndpoints("PrinterAdapter", "default -p 10000");
Ice::ObjectPtr pObj = new CPrinter;
pAdapter->add(pObj, spCommunicator->stringToIdentity("SimplePrinter"));
pAdapter->activate();
spCommunicator->waitForShutdown();
}
catch (const Ice::Exception& e){
cerr << e << endl;
iStatus = 1;
}
catch (const char* msg) {
cerr << msg << endl;
iStatus = 1;
}
if (spCommunicator){
try{
spCommunicator->destroy();
}
catch (const Ice::Exception& e) {
cerr << e << endl;
iStatus = 1;
}
}
return iStatus;
}
#include
#include "Printer.h"
using namespace DiyModule;
#include
#include
#include
using namespace std;
int main(int argc, char * argv[])
{
int status = 0;
Ice::CommunicatorPtr spCommunicator;
cout << "~~~~~~~~~~~客户端开始测试~~~~~~~~~~~~~~~~~~" << endl;
try{
spCommunicator = Ice::initialize(argc, argv);
Ice::ObjectPrx pProxy = spCommunicator->stringToProxy("SimplePrinter:default -p 10000");
CAbsPrinterPrx pPrinter = CAbsPrinterPrx::checkedCast(pProxy);
if (!pPrinter) throw "Invalid proxy";
for(int i = 0; i < 9; i++){
stringstream oSS; oSS << i+1;
pPrinter->DispStr(oSS.str() + " : Hello, Server !");
cout << oSS.str() << " * 10 = " << pPrinter->Calc(i+1) << endl;
}
}
catch (const Ice::Exception & ex){
cerr << ex << endl;
status = 1;
}
catch (const char * msg){
cerr << msg << endl;
status = 1;
}
if (spCommunicator) spCommunicator->destroy();
system("Pause");
return status;
}
PrinterAdapter.AdapterId=PrinterAdapter
PrinterAdapter.Endpoints=tcp
Ice.Default.Locator=FirstIceGrid/Locator:tcp -h 127.0.0.1 -p 4061
IceGrid.InstanceName=FirstIceGrid
#客户端连接到注册中心的地址
IceGrid.Registry.Client.Endpoints=tcp -p 4061
IceGrid.Registry.Server.Endpoints=tcp
IceGrid.Registry.Internal.Endpoints=tcp
IceGrid.Registry.PermissionsVerifier=FirstIceGrid/NullPermissionsVerifier
IceGrid.Registry.AdminPermissionsVerifier=FirstIceGrid/NullPermissionsVerifier
#注册中心数据保存路径,需要手动创建文件夹
IceGrid.Registry.Data=D:\Projects\IceUsing\Debug\db\registry
IceGrid.Registry.DynamicRegistration=1
Ice.Admin.InstanceName=AdminInstance
Ice.Admin.ServerId=Admin
# 注册中心地址
Ice.Default.Locator=FirstIceGrid/Locator:tcp -h 127.0.0.1 -p 4061
#node名
IceGrid.Node.Name=node1
IceGrid.Node.Endpoints=tcp
#node存储路径
IceGrid.Node.Data=D:\Projects\IceUsing\Debug\db\node1
IceGrid.Node.Output=D:\Projects\IceUsing\Debug\db\node1
IceGrid.Node.CollocateRegistry=0
D:\Projects\IceUsing\Debug\db\registry
D:\Projects\IceUsing\Debug\db\node1
icegridadmin --Ice.Config=node1.cfg -e "application add 'app.xml'"
使用icegridgui查看服务所需的配置:
FirstIceGrid
tcp -h 127.0.0.1 -p 4061