運行環境(VS2015)
一、ice配置
1、ICE安裝
1、進入程序包管理器(工具->NuGet包管理器->程序包管理器控制檯)
2、安裝ice、ice builder、ice插件
2.1、安裝ice,選擇項目,輸入install-package zeroc.ice.v140 -version 3.7.1
Tips:V140代表VS的版本,(V140<->VS2015,V120<->VS2013),3.7.1代表ice的版本
2.2、安裝ice.builder.msbuild,輸入install-package zeroc.icebuilder.msbuild
2.3、 安裝ice build插件
二、ice實例
1、配置
1.1、新增Slice Files篩選器(選擇項目,鼠標右鍵)
1.2、修改項目屬性
1.2.1、設定ice文件編譯輸出路徑
1.2.2、包含ice輸出目錄
2、代碼編寫
Test.ice
//Test.ice
module MyIceDemo
{
interface TestDemo
{
void PrintData(string strData);
}
}
Client
//Client.cpp
#include<iostream>
#include<Ice/Ice.h>
#include"Test.h"
using namespace MyIceDemo;
int main(int argc, char *argv[])
{
int status(0);
Ice::CommunicatorPtr ic;
try
{
ic = Ice::initialize(argc, argv);
//tcp/udp必須小寫
auto base(ic->stringToProxy("SimplePrinter:tcp -h 127.0.0.1 -p 10000"));
auto printer(Ice::checkedCast<TestDemoPrx>(base));
if (!printer)
throw std::runtime_error("invalid proxy");
printer->PrintData("hello");
}
catch (const Ice::Exception& ex)
{
std::cerr << ex << std::endl;
status = 1;
}
catch (const char* msg)
{
std::cerr << msg << std::endl;
status = 1;
}
if (ic)ic->destroy();
return status;
}
Server
//接口管理類
#include<string>
#include<Ice/Ice.h>
#include"Test.h"
class iceTestImpl :public MyIceDemo::TestDemo
{
public:
iceTestImpl();
~iceTestImpl();
virtual void PrintData(std::string strData, const Ice::Current &);
};
//虛函數實現
void iceTestImpl::PrintData(std::string strData, const Ice::Current &)
{
std::cout << strData.c_str() << std::endl;
}
//Main.cpp
#include<iostream>
#include "iceTestImpl.h"
using namespace MyIceDemo;
int main(int argc,char *argv[])
{
int status(0);
Ice::CommunicatorPtr ic;
try
{
ic = Ice::initialize(argc, argv);
auto adapter(ic->createObjectAdapterWithEndpoints("SimplePrinterAdapter", "default -p 10000"));
auto servant(std::make_shared<iceTestImpl>());
adapter->add(servant, Ice::stringToIdentity("SimplePrinter"));
adapter->activate();
ic->waitForShutdown();
}
catch (const Ice::Exception & e)
{
std::cerr << e << std::endl;
status = 1;
}
catch (const char * msg)
{
std::cerr << msg << std::endl;
status = 1;
}
if (ic)
{
try
{
ic->destroy();
}
catch (const Ice::Exception & e)
{
std::cerr << e << std::endl;
status = 1;
}
}
return status;
}
三、linux安裝ice**
3.1、yum源配置
cd /etc/yum.repos.d
sudo wget https://zeroc.com/download/Ice/3.7/el7/zeroc-ice3.7.repo
ls查看ice源
3.2、安裝
3.2.1、Install Ice for C++, Python, PHP, and all Ice services.
sudo yum install ice-all-runtime ice-all-devel
3.2.2、Install Freeze for C++
sudo yum install libfreeze-c++-devel freeze-utils
3.2.3、安裝的版本號查看:icebox -v