質問

Python-MPD2モジュールを使用して、GUIアプリケーションのラズベリーPI上のメディアプレーヤーを制御します。したがって、接続エラーとタイムアウトを正常に処理したい(質問のプレーヤーが60秒後にMPD接続をドロップします)を適切に処理したいと思います。ただし、MPDモジュールには、すべてのコマンドが送信されているか、または情報がパッチできます。

mpd.mpdclientと同じメソッドのすべてにアクセスできるクラスをお願いしますが、自分のエラー処理を追加しましょう。言い換えれば、私がするならば:

client.play()
.

とコネクションエラーがスローされ、それをキャッチして同じコマンドを再送信したいと思います。サーバーに再接続しなければならないことによって引き起こされる小さな遅延以外に、ユーザーは何もアミスがあることに気付いてはいけません。

これまでのところ、私が思い付く解決策です。私の申請書で働いていますが、私の目的を実際に満たしていません。

from functools import partial
from mpd import MPDClient, ConnectionError

class PersistentMPDClient(object):
    def __init__(self, host, port):
        self.host = host
        self.port = port
        self.client = MPDClient()
        self.client.connect(self.host, self.port)

    def command(self, cmd, *args, **kwargs):
        command_callable = partial(self.client.__getattribute__(cmd), *args, **kwargs)
        try:
            return command_callable()
        except ConnectionError:
            # Mopidy drops our connection after a while, so reconnect to send the command
            self.client._soc = None
            self.client.connect(self.host, self.port)
            return command_callable()
.

このクラスにメソッドを1つのMPDコマンド毎に追加できます。:

def play(self):
    return self.command("play")
.

しかしこれはそれを達成するための最良の方法からはるかに見えます。

役に立ちましたか?

解決

コマンド名を構成するすべての91文字列のリストを作成していない場合は、

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top