zeroc ice : js客戶端 + c++服務端通信操作記錄

環境: 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客戶端




服務端顯示 :


完成 .



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章