HmNodeJS はじめての実行

  • 概要

    ここでは、hmNodeJSの具体的な利用方法を解説します。
    「HmNodeSample.mac」と「HmNodeSample.js」は同じ場所において、HmNodeSample.macを実行してください。

  • HmNodeJSを利用した、ミニマムなサンプル

    HmNodeSample.mac
    #V8 = loaddll( hidemarudir + @"\hmV8.dll" );
    
    #_ = dllfuncw( #V8, "DoString", R"ES6(
    
    // ライブラリの読み込み
    host.lib(clr, "HmNodeClient" );
    
    // このマクロファイルが置いてある場所をJSで獲得
    var currentmacrodirectory = hm.Macro.Var["currentmacrodirectory"];
    
    // 50001番を、HmNodeSample.js 用のチャンネルとして結びつける。
    // 一度結びつけると、「全ての秀丸」を終了するまでは、結びつけを変更することは出来ない。
    var client = new clr.HmNodeClient(50001, currentmacrodirectory + "/HmNodeSample.js");
    
    // 上記結びつき状態で 通信開始
    client.Start();
    
    // GETリクエストするため、word1=****&myapp=***** みたいなパラメータを構築する。
    var NameValueCollection = clr.System.Collections.Specialized.NameValueCollection;
    var param = new NameValueCollection();
    param.Add("word1", "C:/abc/♬e.mac");
    param.Add("myppp", "そそそそそ");
    
    // 上記パラメータを伴って、httpリクエストをNodeに投げる
    var res = client.GetResponse(param);
    
    // 
    console.log(res.Data);
    console.log(res.StatusDescription+"いいい");
    console.log(res.StatusCode+"あああ");
    console.log(res.CallCount);
    
    hm.Macro.Var["$data"] = res.Data + res.CallCount;
    
    )ES6"
    );
    
    
    message $data;
    
    freedll( #V8 );
    
  • 各データ型の概要

    • HmNodeClient

      HmNodeClientのコンストラクタには、

      • チャンネル番号
      • 「該当チャンネルでnode.jsが起動するjavascriptファイルのフルパス」を指定します。
        (このjavascriptはnode側で処理されます。)
    • NameValueCollection

      Node.jsにはhttp://localhost:チャンネル番号/word1=****&myapp=*****
      のようにGETリクエストの形で、GetResopnseメソッドの引数に渡してアクセスし、結果を得ることが出来ます。

    • レスポンス結果

      • Data

        node.jsが、Webリクエストに対して返したデータ。
        何をどのように返すのかは、チャンネル番号に結び付けたjavascriptで定義します。
        通常、「テキスト」「JSon」「XML」「HTML」などを返すことが多くなるのではないかと思います。

      • StatusCode

        エラーなどがあった際に、ステータスコードを含めた文字列が入っています。

      • StatusDescription

        エラーなどがあった際に、エラー内容の詳細の文字列が入っています。

      • CallCount

        Webリクエストとして成功したカウンタが入っています。
        この値を見ることで

        • このチャンネルで初めてWebRequestしたのか
        • 何回以上WebRequestしたことがあるのか

        などが判定可能です。

  • Node側が利用する「HmNodeSample.js」

    以下は、チャンネルに結び付けたnode.jsが実行するjavascriptの内容です。

    nodeは、チャンネル単位で、以下のようにプロセスとして起動されます。

            node.exe "javascriptのファイルのフルパス" チャンネル番号
            

    javascriptの内容自体は、node.jsの入門中の入門ですので説明は割愛します。

    HmNodeSample.js
    var http = require('http');
    var url = require('url');
    var qs = require('querystring');
    
    var port = process.argv[2]
    
    var server = http.createServer();
    server.on('request', doRequest);
    server.listen(port);
    
    console.log('Server running!');
    
    // リクエストの処理
    function doRequest(req, res) {
        var data = "aaa";
    
        // GETリクエストだったら
        if (req.method === 'GET') {
            var url_parts = url.parse(req.url,true);
            console.log(url_parts);
            data += url_parts.query["word1"];
            data += url_parts.query["myppp"];
        }
    
        res.writeHead(200, { 'Content-Type': 'text/plain' });
        res.write(data);
        res.end();
        console.log("ノード側:OK");
    }
    
    
  • 実行結果