[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 しあっている ということでした。