3

xbmcの発信者IDアドオンとして機能する非常に単純なPythonスクリプトを作成(ほとんどコピー)しました。ソケットを閉じることを除いて、期待どおりに機能します。xbmc.abortRequested(XBMCがシャットダウンしているという通知)がTrueに設定されているため、ループが終了することを確認しました。しかし、それは行われず(ハングしているようです)、xbmcはクリーンアップ中の約5秒後にスクリプトを強制終了します。この不適切な終了は問題を引き起こしませんが、スクリプトを適切に終了することをお勧めします。設定できるタイムアウトが他にあるのか、それとも何なのかわかりません。助けてくれてありがとう。

ダグ

私のコード:

import socket, threading, thread, sys, asyncore, xbmc, xbmcgui, xbmcaddon
from time import *
from string import *

xbmc.log("YAC Listener: Starting")
PORT = 10629

class Server(asyncore.dispatcher):
    def __init__(self, host, port):
        asyncore.dispatcher.__init__(self)
        self.create_socket(socket.AF_INET, socket.SOCK_STREAM)
        self.bind((host, port))
        self.listen(1)

    def handle_accept(self):
        socket, address = self.accept()
        ConnectionHandler(socket)

    def handle_close(self):
        self.close()
        xbmc.log("YAC Listener: Closing Port")

class ConnectionHandler(asyncore.dispatcher_with_send):
    def handle_read(self):
        self.buffer = self.recv(1024)
        self.buffer = split(self.buffer[5:], "~")
        self.close()
        global data
        if len(self.buffer) > 1:
            name = self.buffer[0]
            number = self.buffer[1]
                xbmc.executebuiltin("XBMC.Notification("+name+","+number+",7000,special://home/addons/script.yaclistener/phone.png)")
        else:
            data = self.buffer

s = Server('', PORT)

while not xbmc.abortRequested:
    asyncore.loop(timeout=1)

s.close()
sys.exit()
xbmc.log("YAC Listener: Exiting")
4

1 に答える 1