SINETStream ユーザガイド:Android版SINETStreamライブラリ
目次
1. 概要 2. Android版SINETStreamライブラリの位置づけ 3. 総称型(Generics)の利用 4. Android版SINETStreamライブラリのAPI詳細 4.1 SinetStreamReader 4.2 SinetStreamReaderStream 4.3 SinetStreamReaderBytes 4.4 SinetStreamWriter 4.5 SinetStreamWriterStream 4.6 SinetStreamWriterBytes
1. 概要
Android版SINETStreamライブラリが提供する公開API関数群およびインタフェース群に関して述べる。
2. Android版SINETStreamライブラリの位置づけ
ユーザアプリケーションがAndroid版SINETStreamライブラリを用いてMQTTメッセージの送受信を行う場合、概略以下のような3階層構成となる。 図中、二重線(=)で区切られた中央部分がAndroid版SINETStreamライブラリである。
===========================================================================
< User Application >
#---------------------------+ #---------------------------+
| UserAPP (Publisher) | | UserApp (Subscriber) |
+---------------------------+ +---------------------------+
| A | A
==============|==============|==================|==============|===========
< SINETStream for Android > | | |
| | | |
V | V |
+-------------+ +-----------+ +-------------+ +-----------+
| SinetStream | | WriterXXX | | SinetStream | | WriterXXX |
| WriterXXX | | Listener | | ReaderXXX | | Listener |
+-------------+ +-----------+ +-------------+ +-----------+
... ...
+---------------------------+ +---------------------------+
| MqttAsyncMessageWriter | | MqttAsyncMessageReader |
+---------------------------+ +---------------------------+
| A
=================|====================================|====================
< Paho MQTT library for Android > |
| |
V |
+---------------------------+ +---------------------------+
| MqttAndroidClient | | MqttAndroidClient |
+---------------------------+ +---------------------------+
+-------------------------------------------------------------+
| MqttService |
+-------------------------------------------------------------+
| A
V |
MQTT messages MQTT messages
3. 総称型(Generics)の利用
Reader
やWriter
を表現する基本クラスは総称型(Generics)の抽象クラスとする。
これらを文字列型やバイト列型など特定のデータ型用に拡張した具象クラスを併せて用意し、ユーザアプリケーションは用途に応じて後者を使うことを想定する。
例えば、SinetStreamWriter<T>
クラスで定義するメッセージ発行メソッドpublish(T data)
は「総称型」の引数data
を取る。
public abstract class
SinetStreamWriter<T>
+---------------------+
| initialize() |
| terminate() |
| publish(T data) |
| ... |
+---------------------+
このSinetStreamWriter<T>
クラスを「文字列型」として拡張したSinetStreamWriterString
クラスでは、上記publish
の引数は「文字列型」を取るものとして再定義される。
同様に、「バイト列型」として拡張したSinetStreamWriterBytes
の場合はpublish
の引数は「バイト列型」を取るものとして再定義される。
public class
SinetStreamWriterString
extends SinetStreamWriter<String>
+-------------------------+
| |
| public abstract class |
| SinetStreamWriter<T> |
| +---------------------+ |
| | initialize() | |
| | terminate() | |
| | publish(T data) <------ publish(String data)
| | ... | |
| +---------------------+ |
+-------------------------+
public class
SinetStreamWriterBytes
extends SinetStreamWriter<byte[]>
+-------------------------+
| |
| public abstract class |
| SinetStreamWriter<T> |
| +---------------------+ |
| | initialize() | |
| | terminate() | |
| | publish(T data) <------ publish(byte[] data)
| | ... | |
| +---------------------+ |
+-------------------------+
インタフェース定義に関しても考え方は同様である。
例えば、インタフェースSinetStreamReaderListener<T>
は、受信メッセージ通知用のコールバック関数onReceiveData
の第3引数で「総称型」のdata
を持つ。
これを文字列に拡張したSinetStreamReaderStringListener
では、同じonReceiveData
の第3引数は「文字列型」のdata
と再定義される。
public interface
SinetStreamReaderStringListener
extends SinetStreamReaderListener<String>
+------------------------------------------+
| |
| public interface |
| SinetStreamReaderListener<T> |
| +--------------------------------------+ |
| | ... | |
| | void | |
| | onReceiveData(@NonNull String topic, | |
| | long timestamp, | |
| | @NonNull T data); <-------- "@NonNull String data"
| | ... | |
| +--------------------------------------+ |
+------------------------------------------+
4. Android版SINETStreamライブラリのAPI詳細
4.1 SinetStreamReader
受信側の抽象クラスおよびインタフェース: SinetStreamReader
4.2 SinetStreamReaderStream
文字列型データ受信用の派生クラスおよびインタフェース: SinetStreamReaderStream
4.3 SinetStreamReaderBytes
バイト型データ受信用の派生クラスおよびインタフェース: SinetStreamReaderBytes
4.4 SinetStreamWriter
送信側の抽象クラスおよびインタフェース: SinetStreamWriter
4.5 SinetStreamWriterStream
文字列型データ送信用の派生クラスおよびインタフェース: SinetStreamWriterStream
4.6 SinetStreamWriterBytes
バイト列型データ送信用の派生クラスおよびインタフェース: SinetStreamWriterBytes