Syntax Error.

[Sy] AWS IoT Device SDK for JavaScript のサンプルアプリケーションの処理を理解する(device-example.js)

2018/01/04

AWS IoT Device SDK for JavaScript のサンプルアプリケーション device-example.js のコードを読んで、どのような処理になっているのかを見ていきます。

この前の記事では実際に device-example.js を動かしてみました。

⇒ [Sy] AWS IoT Device SDK for JavaScript を Mac にインストールして サンプルアプリケーションを動かす(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

処理の流れ

ざっくりの処理の流れはこうなります。

  1. examples/device-example.js が実行される
  2. examples/lib/cmdline.jsdevice-example.js で定義されている processTest() という処理の本体となる関数が渡される。
  3. cmdline.js 側で 2 で渡された処理を実行する
  4. コマンドのオプションで指定された testMode の値によって処理が分岐

以降、それぞれちょっと細かく見ていきます。

1. examples/device-example.js が実行される

まず最初に呼び出されるのは処理の本体となる device-example.js になります。

このファイルでは、deviceModule という名前で device/index.jsrequre で読み込んでます。(4 の subscribe, publish の際に使います)

あとは処理の本体 processTest() の定義が書かれています。

2. device-example.js から cmdline.js に処理の本体が渡される

device-example.jsprocessTest()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 しあっている ということでした。