xbmc 用の python サービスを開発していますが、どうしようもなく立ち往生しています。XBMC には、JSON-RPC で通信する TCP API があります。XBMC には、主にコマンドを受信して応答するように設計されたサーバー TCP ソケットがありますが、システムで何かが発生すると、「通知」を TCP に送信します。問題は、サーバーのように動作する TCP クライアントを作成する必要があるため、この「通知」を受信できることです。コードをループする必要があるため、どこで実行socket.recv(4096)
してもデータを待機し、コードがスタックします。コードの構造は基本的に次のようになります。
import xbmc, xbmcgui, xbmcaddon
class XPlayer(xbmc.Player) :
def __init__ (self):
xbmc.Player.__init__(self)
def onPlayBackStarted(self):
if xbmc.Player().isPlayingVideo():
doPlayBackStartedStuff()
player=XPlayer()
doStartupStuff()
while (not xbmc.abortRequested):
if xbmc.Player().isPlayingVideo():
doPlayingVideoStuff()
else:
doPlayingEverythingElseStuff()
xbmc.sleep(500)
# This loop is the most essential part of code
if (xbmc.abortRequested):
closeEverything()
xbmc.log('Aborting...')
スレッド化、マルチプロセッシング、ブロッキング、ノンブロッキングのすべてを試しましたが、何も役に立ちませんでした。ありがとう、