zeroc ice : js客户端 + c++服务端通信操作记录

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/launch_225/article/details/80176538

环境: win7 ,visual studio 2013 ,zeroc 3.6.1 ,node.js v8.11.1 ,webstorm 2016.2.4 

第一步:

安装vs(i tell you 网站下载),zeroc 3.6.1 (官网) ,node.js (官网),webstorm 百度下容易找

如果访问官网的时间出现下载不了的情况可能是网络访问限制,考虑购买收费VPN翻墙


第二步:

用vs 布署c++的服务端,VS记得下边的两个配置




2.1 用slice2cpp 映射.ice文件

#Printer.ice文件内容

module Demo {
interface Printer {
void printString(string s);
};
};


执行命令: slice2cpp Printer.ice

2.2 生成服务端cpp,文件名无关自己定义,内容是按3.6.1 官档

#PrinterServer.cpp

#include <Ice/Ice.h>
#include "Printer.h"
using namespace std;
using namespace Demo;
class PrinterI : public Printer {
public:
    virtual void printString(const string& s, const Ice::Current&);
};
void
PrinterI::
printString(const string& s, const Ice::Current&)
{
    cout << s << endl;
}
int
main(int argc, char* argv[])
{
    int status = 0;
    Ice::CommunicatorPtr ic;
    try {
        ic = Ice::initialize(argc, argv);
        Ice::ObjectAdapterPtr adapter =
            ic->createObjectAdapterWithEndpoints("SimplePrinterAdapter", "default -p 10001");
            Ice::ObjectPtr object = new PrinterI;
        adapter->add(object, ic->stringToIdentity("SimplePrinter"));
        adapter->activate();

        std::cout << "==>  server started" << std::endl;
        ic->waitForShutdown();
    }


    catch (const Ice::Exception& e) {
        cerr << e << endl;
        status = 1;
    }
    catch (const char* msg) {
        cerr << msg << endl;
        status = 1;
    }
    if (ic) {
        try {
            ic->destroy();
        }
        catch (const Ice::Exception& e) {
            cerr << e << endl;
            status = 1;
        }
    }

    return status;
}

重新生成方案即可生成exe文件:


第三步:js客户端生成

3.1 将上边的ice文件用slice2js执行下


3.2 Client.js文件

var Ice = require("ice").Ice;
var Demo = require("./Printer").Demo;
var ic;
Ice.Promise.try(
    function()
    {
        ic = Ice.initialize();
        var base = ic.stringToProxy("SimplePrinter:default -h 127.0.0.1 -p 10001");
        return Demo.PrinterPrx.checkedCast(base).then(
            function(printer)
            {
                return printer.printString("Hello World!");
            });
    }
).finally(
    function()
    {
        if(ic)
        {
            return ic.destroy();
        }
    }
).exception(
    function(ex)
    {
        console.log(ex.toString());
        process.exit(1);
    });


3.3 在webstorm 运和前记得执行下边的,否则会报找不到ice 模块的错误

C:\Users\Administrator>npm install [email protected]
npm WARN saveError ENOENT: no such file or directory, open 'C:\Users\Administrat
or\package.json'
npm notice created a lockfile as package-lock.json. You should commit this file.

npm WARN enoent ENOENT: no such file or directory, open 'C:\Users\Administrator\
package.json'
npm WARN Administrator No description
npm WARN Administrator No repository field.
npm WARN Administrator No README data
npm WARN Administrator No license field.

+ [email protected]
added 1 package in 7.79s

C:\Users\Administrator>


3.4 执行js客户端




服务端显示 :


完成 .



猜你喜欢

转载自blog.csdn.net/launch_225/article/details/80176538