Merge branch 'osc_query' into develop

This commit is contained in:
misyaguziya
2025-05-08 11:41:35 +09:00

View File

@@ -24,6 +24,7 @@ class OSCHandler:
self.osc_server_ip_address = ip_address self.osc_server_ip_address = ip_address
self.http_port = None self.http_port = None
self.osc_server_port = None self.osc_server_port = None
self.browser = None
def setOscIpAddress(self, ip_address:str) -> None: def setOscIpAddress(self, ip_address:str) -> None:
self.osc_ip_address = ip_address self.osc_ip_address = ip_address
@@ -45,18 +46,26 @@ class OSCHandler:
def getOSCParameterValue(self, address:str) -> Any: def getOSCParameterValue(self, address:str) -> Any:
value = None value = None
try: try:
browser = OSCQueryBrowser() # browserインスタンスを再利用し、毎回の生成と破棄を避ける
sleep(1) if self.browser is None:
service = browser.find_service_by_name(self.osc_server_name) self.browser = OSCQueryBrowser()
sleep(1) # 初回のみスリープ
service = self.browser.find_service_by_name(self.osc_server_name)
if service is not None: if service is not None:
osc_query_client = OSCQueryClient(service) osc_query_client = OSCQueryClient(service)
mute_self_node = osc_query_client.query_node(address) mute_self_node = osc_query_client.query_node(address)
value = mute_self_node.value[0] value = mute_self_node.value[0]
browser.zc.close()
browser.browser.cancel()
except Exception: except Exception:
errorLogging() errorLogging()
# エラー発生時にbrowserをリセットして次回再初期化
if self.browser is not None:
try:
self.browser.zc.close()
self.browser.browser.cancel()
except Exception:
pass
self.browser = None
return value return value
def getOSCParameterMuteSelf(self) -> bool: def getOSCParameterMuteSelf(self) -> bool:
@@ -82,7 +91,8 @@ class OSCHandler:
sleep(1) sleep(1)
def oscServerServe(self) -> None: def oscServerServe(self) -> None:
self.osc_server.serve_forever(2) # ポーリング間隔を長くして2秒から10秒にCPUの使用率を削減
self.osc_server.serve_forever(10)
def oscServerStop(self) -> None: def oscServerStop(self) -> None:
if isinstance(self.osc_server, osc_server.ThreadingOSCUDPServer): if isinstance(self.osc_server, osc_server.ThreadingOSCUDPServer):
@@ -91,6 +101,14 @@ class OSCHandler:
if isinstance(self.osc_query_service, OSCQueryService): if isinstance(self.osc_query_service, OSCQueryService):
self.osc_query_service.http_server.shutdown() self.osc_query_service.http_server.shutdown()
self.osc_query_service = None self.osc_query_service = None
# browserがある場合はクリーンアップ
if self.browser is not None:
try:
self.browser.zc.close()
self.browser.browser.cancel()
except Exception:
pass
self.browser = None
if __name__ == "__main__": if __name__ == "__main__":
handler = OSCHandler() handler = OSCHandler()