Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

PingSenderの拡張実装 #11

Closed
1 task done
Tracked by #9
TodorokiKohei opened this issue Jul 3, 2023 · 2 comments · Fixed by #15
Closed
1 task done
Tracked by #9

PingSenderの拡張実装 #11

TodorokiKohei opened this issue Jul 3, 2023 · 2 comments · Fixed by #15

Comments

@TodorokiKohei
Copy link
Owner

TodorokiKohei commented Jul 3, 2023

  • PingSenderを実装したAbstractなTimerPingSenderを実装する
@TodorokiKohei
Copy link
Owner Author

TodorokiKohei commented Jul 6, 2023

PINGREQ生成メソッド以外を実装した抽象クラスExtendedPingSenderを実装する。この抽象クラスを実装する理由は、ユースケースによってPINGREQに付加したい情報が異なると考えられるためである。このクラスを継承し、PINGREQ生成メソッドcreatePingreqで任意のデータを送信できるようにする。
また、PINGREQの送信間隔をKeepAliveやServerKeepAliveとは独立して設定できるようにする。現在のクライアントではKeepAliveで設定した時間間隔でPINGREQが送信されるように実装されており、MQTTの仕様ではKeepAliveの最小値は1秒である。しかし、各サブスクライバのPINGREQ送信を同期することができない現状では、この1秒という時間はサブスクライバの最新状態を十分に反映できるものではないと考えられる。そのため、今回の実装ではサーバに送信するKeepAliveとは独立してPINGREQの送信間隔を設定可能にする。

@TodorokiKohei
Copy link
Owner Author

TodorokiKohei commented Jul 8, 2023

拡張PINGREQを有効にするのに、現在はMqttConnectOptions経由でMqttConnectionStateにフラグを設定していた。この実装ではクライアントがブローカに接続するまで拡張PINGREQが有効かを判定することができない。
MqttAsyncClientに拡張PINGREQを有効にするsetterを実装するのでもいいが、MqttAsyncClient生成時にClientCommsClientStateも生成されるため、後からsetterによってそれぞれに反映させるのは遅い気がする。

今回はPingSenderExtendedPingSenderを継承したクラスの場合にフラグを立てる設計にする。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
Status: Done
Development

Successfully merging a pull request may close this issue.

1 participant