Gtk3アプリ NodeRedとC#を連携する 入門編

###Gtk3アプリ NodeRedとC#を連携する

####前提
Node.jsをインストールする
Node-Redをインストールする

https://nodered.jp/docs/getting-started/local

###NodeRedを入門動画で学ぶ

https://www.youtube.com/watch?v=IIyrdBAUO10&list=PL0WmCz6WHYBVBxLafRV81c68IKbPKhZcS&index=1

https://www.youtube.com/watch?v=d9CFfAIWX0I

https://www.youtube.com/watch?v=IIyrdBAUO10


###Nodeを配置する

以下のノードをFlowに配置します。

| 使用するノード |
|:-----------:|
| Inject node |
| exec node |
| Debug node |
<img width="500" alt="Screenshot from 2021-10-27 15-59-05.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182324/1c6215dd-2d0b-7b92-d616-77278db152da.png">

####配置

<img width="700" alt="Screenshot from 2021-10-27 15-58-50.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182324/44fe6098-4bda-d3c0-408c-78c71c20f419.png">


####execノードにパラメーターを追加
コマンドと引数を追加します。
<img width="400" alt="Screenshot from 2021-10-27 15-59-28.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182324/f372ae6a-742b-4c10-6d2f-74b44b1c4fe4.png">


####C#コンソールアプリ側

Rider画面　コンソールアプリを選択する

<img width="500" alt="Screenshot from 2021-10-27 16-00-28.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182324/df95fb8e-6611-77d3-4e7a-e8488b84f08e.png">

コンソールアプリ実行時に取得した引数を出力するような内容です。

```cs
using System;

namespace nodeRedApp
{
    class Program
    {
        static void Main(string[] args)
        {

            foreach (string str in args)
            {
                Console.WriteLine(str);
            }            
        }
    }
}
```

#### デプロイ　実行する
インジェクションノードから実行します。
C#のコンソールアプリで出力された文字列をmsg.payloadに取得できます。

このサンプルの例ではタイムスタンプと引数を出力させています。

<img width="400" alt="Screenshot from 2021-10-27 15-58-34.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182324/96d87afa-f602-c591-059a-f19fc43ed2a2.png">

node red exec 実行時にエラーが出た場合はパーミッションを変更します。

```
node red exec node permission deny

chmod 755 アプリ名
```

###func-execノードを使う
functionの中でexecコマンドが使えます。

https://github.com/cuongquay/node-red-contrib-func-exec

<img width="500" alt="Screenshot from 2021-10-29 13-17-58.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/182324/ae7ceb89-4b52-ef5c-8cbd-87df4b178ae1.png">

```
[{"id":"18fa45e.dd993ba","type":"debug","z":"ce212a3e.f97778","name":"","active":true,"console":"false","complete":"false","x":560,"y":380,"wires":[]},{"id":"d649825e.ab13d","type":"inject","z":"ce212a3e.f97778","name":"","topic":"","payload":"","payloadType":"date","repeat":"","crontab":"","once":false,"x":160,"y":300,"wires":[["3197e4b9.85addc"]]},{"id":"3197e4b9.85addc","type":"func-exec","z":"ce212a3e.f97778","name":"","func":"var exec = child_process.exec('ls -la', (error, stdout, stderr) => { \n    if (error) { \n    console.error(`exec error: ${error}`); \n    return; \n    } \n    console.log(`stdout: ${stdout}`); \n    console.log(`stderr: ${stderr}`); \n    msg.payload = stdout;\n    callback(msg);\n}); ","outputs":1,"noerr":0,"x":360,"y":340,"wires":[["18fa45e.dd993ba"]]}]
```



```js
var command = '/nodeRedApp test1 test2';

var exec = child_process.exec(command, (error, stdout, stderr) => { 
    if (error) { 
    console.error(`exec error: ${error}`); 
    return; 
    } 
    console.log(`stdout: ${stdout}`); 
    console.log(`stderr: ${stderr}`); 
    msg.payload = stdout;
    callback(msg);
}); 
return msg;
```

[Gtk3アプリ NodeRedで仮想通貨を表示する その１](https://qiita.com/iota_11/items/fa2f3b6ce5ebb542e3fe)に続く