我正在爲現有軟件編寫一個插件,它將使用雙絞線與Denon AV接收器進行通信。我在協議中創建了一個方法powerDenonOff,用於關閉設備,並在應用程序通過runConcurrentThread啓動時讓反應堆在一個線程中啓動。我有另一種方法,powerOff,當用戶選擇在軟件中關閉設備時將會調用這個方法。我很難搞清楚如何在Plugin類的協議中調用我的powerDenonOff方法。創建「按需」事件?
from twisted.internet.protocol import Factory, Protocol
from twisted.protocols.basic import LineReceiver
from twisted.internet import reactor
class DenonProtocol(LineReceiver):
delimiter='\r'
def lineReceived(self, line):
pass
def connectionMade(self):
pass
def powerDenonOff(self):
self.transport.write("PWSTANDBY")
def __call__(self):
pass
class DenonFactory(Factory):
def __init__(self):
pass
def startedConnecting(self, connector):
pass
def clientConnectionFailed(self, one, two):
pass
def connectionMade(self):
pass
def buildProtocol(self, addr):
return DenonProtocol()
class Plugin(software.PluginClass):
def powerOff(self):
reactor.callInThread(powerDenonOff) #I think this may need to be callFromThread but
#but I left it since that was where the poorly
#worded version of my question left off.
def runConcurrentThread(self):
try:
while True:
#hardcoded for testing
port = 23
host = "111.11.11.11"
denon=DenonFactory()
reactor.connectTCP(host, port, denon)
reactor.run()
except self.StopThread:
pass
def stopConcurrentThread(self):
reactor.callFromThread(reactor.stop)
如何到達我的協議類中的方法?有沒有更好的方法來完成這一點?
感謝
這需要您在運行之前告訴反應堆,在運行命令之前需要等待多長時間,不是嗎? –
爲了進一步闡明:我無法知道什麼時候將來我需要打開設備。我需要讓reactor已經運行,因爲我想監聽它的狀態何時更新以更新UI。由於我不知道在將來用戶想要運行命令(或者即使它將被調用),我也不知道如何扭曲來處理它。 –
你原來的問題聽起來像你想要基於時間的事件。看起來情況並非如此,您需要基於GUI的事件? –