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

Add: [Server][EDCB] コマンドを追加 #47

Merged
merged 9 commits into from
Jun 16, 2023

Conversation

xtne6f
Copy link
Contributor

@xtne6f xtne6f commented Jun 16, 2023

変更の種類

  • 不具合の修正
  • 新しい機能の追加
  • 改善・リファクタリング(機能は追加されないが、動作やコードを改善する破壊的でない変更)

チェックリスト:

  • 開発資料データベース設計 は読みましたか?
    • もともと自分用のメモですが、このプロジェクトの開発方針や設計などが記載されています。開発時の参考にしてください。
  • Git のコミットメッセージは開発資料に記載のフォーマットになっていますか?(重要)
    • このプロジェクト上のコミットメッセージは、基本的に全てこのフォーマットに従って記述されています(文字数は問いません)。
    • 正しいフォーマットになっていない場合、force push で必ずコミットメッセージを変更してから送信してください。
  • このプロジェクトのコーディング規約に従ったコードになっていますか?
    • コーディング規約は開発資料に記載されています。
    • そもそもコーディング規約と言えるほど大層なものではありませんが、一度目を通しておいてください。
  • プルリクエストは master ブランチに送信されていますか?
    • release ブランチはリリースした時にしか更新されません。必ず master ブランチに送信してください。

説明

EDCB バックエンドの制御コマンドの追加を行いました。Python 型ヒントの詳細化も併せて行いました。
e790c70 は空白類の PEP8 規約への調整と、 asyncio のキャンセル時の整合性のため Exception 例外のみキャッチするように変更するものです。
32a8b9b は表題通りで、外部的な仕様変更はないですが利用側の型ヒントの調整が必要になるかもしれません。
a1abf62 の更新通知については、一例ですが以下のように利用することを想定しています。

edcb = CtrlCmdUtil()
# TCP/IP モードでは EpgTimerSrv の「無通信タイムアウト」間隔でロングポーリングになる
# 既定のタイムアウトだと早めに切断してしまいもったいないので長めにする
#edcb.setConnectTimeOutSec(180)
target_count = 0
check_restart_time = time.monotonic()
while True:
    t = time.monotonic()
    info = await edcb.sendGetNotifySrvInfo(target_count)
    if info:
        # 新しい通知がきた (ここで通知に従って各情報一覧を取得しなおす)
        target_count = info['count']
        check_restart_time = time.monotonic()
    elif time.monotonic() - t < 5:
        # パイプモードは単なるポーリングなのでここを踏む
        # TCP/IP モードでは通常ここは踏まない。ただしエラー時ビジーループになるのを回避できるので推奨
        await asyncio.sleep(5)

    # EpgTimerSrv の中途終了や再起動を想定しないなら以下は不要
    # EpgTimerSrv が再起動してカウントが戻った場合に通知がこなくなるのを回避する
    t = time.monotonic()
    if t - check_restart_time > 30:
        check_restart_time = t
        info = await edcb.sendGetNotifySrvStatus()
        if info and info['count'] < target_count:
            # たぶん再起動した (ここで情報一覧をすべて取得しなおす)
            # 通知を維持するのが目的なので再起動を必ず検出できるわけではない
            target_count = info['count']

動機とコンテキスト

EDCB バックエンドの制御コマンドの拡張を希望されていたので、今後必要になりそうとこちらが考えたコマンドについてひととおり追加するもです。

@tsukumijima
Copy link
Owner

大変助かります…!!!本当にありがとうございます!
マージさせていただきます!🙏🙏🙏🙏🙏

@tsukumijima tsukumijima merged commit 1cf1dbf into tsukumijima:master Jun 16, 2023
@xtne6f xtne6f deleted the update-edcb-ctrlcmdutil branch October 9, 2023 12:11
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants