[Sy] AWS IoT Device SDK for JavaScript のサンプルアプリケーションの処理を理解する(device-example.js)
AWS IoT Device SDK for JavaScript のサンプルアプリケーション device-example.js のコードを読んで、どのような処理になっているのかを見ていきます。
この前の記事では実際に device-example.js を動かしてみました。
とりあえず動かしたものの、処理の内容をあまり理解できていなかったのでコードを読んで理解を深めてみました。
関連するファイル
$ node examples/device-example.js とコマンドを実行する時に、処理に関連する主なファイルの階層はこのようになります。(SDKのトップディレクトリを aws-iot-device-sdk としてます)
aws-iot-device-sdk/
├ device/
│ └ index.js
├ examples/
│ ├ lib/
│ │ └ cmdline.js
│ └ device-example.js
└ index.js
処理の流れ
ざっくりの処理の流れはこうなります。
examples/device-example.jsが実行されるexamples/lib/cmdline.jsにdevice-example.jsで定義されているprocessTest()という処理の本体となる関数が渡される。cmdline.js側で 2 で渡された処理を実行する- コマンドのオプションで指定された
testModeの値によって処理が分岐
以降、それぞれちょっと細かく見ていきます。
1. examples/device-example.js が実行される
まず最初に呼び出されるのは処理の本体となる device-example.js になります。
このファイルでは、deviceModule という名前で device/index.js を requre で読み込んでます。(4 の subscribe, publish の際に使います)
あとは処理の本体 processTest() の定義が書かれています。
2. device-example.js から cmdline.js に処理の本体が渡される
device-example.js の processTest() を cmdline.js に渡します。
cmdline.js 側では、processFunction() という名前で受け取ります。
3. cmdline.js 側で処理の本体を実行する
device-example.js から渡された処理の本体(processTest => processFunction)を cmdline.js 側で実行します。
4. コマンドのオプションで指定された testMode の値によって処理が分岐
動作確認の記事で書いたとおり、 サンプルアプリケーションには testMode というオプションに 1 か 2 を指定して実行します。
testMode の値によって、以下のように処理が変わります。
testModeが 1 の場合topic_1を購読開始(subscribe)topic_2に4秒ごとにカウンタの値を送信(publish)
testModeが 2 の場合topic_2を購読開始(subscribe)topic_1に4秒ごとにカウンタの値を送信(publish)
device-example.js は結局何をしているのか?
ということで device-example.js でやっていることは、 2つのトピック(topic_1, topic_2)に対して、2つのプロセスがお互いに subscribe, publish しあっている ということでした。