[Update] WebSocket: Disable server by default and add port availability check
This commit is contained in:
@@ -1172,7 +1172,7 @@ class Config:
|
|||||||
self._LOGGER_FEATURE = False
|
self._LOGGER_FEATURE = False
|
||||||
self._VRC_MIC_MUTE_SYNC = False
|
self._VRC_MIC_MUTE_SYNC = False
|
||||||
self._NOTIFICATION_VRC_SFX = True
|
self._NOTIFICATION_VRC_SFX = True
|
||||||
self._WEBSOCKET_SERVER = True
|
self._WEBSOCKET_SERVER = False
|
||||||
self._WEBSOCKET_HOST = "127.0.0.1"
|
self._WEBSOCKET_HOST = "127.0.0.1"
|
||||||
self._WEBSOCKET_PORT = 2231
|
self._WEBSOCKET_PORT = 2231
|
||||||
|
|
||||||
|
|||||||
@@ -295,10 +295,12 @@ class Controller:
|
|||||||
"transliteration":transliteration
|
"transliteration":transliteration
|
||||||
})
|
})
|
||||||
|
|
||||||
if config.WEBSOCKET_SERVER is True:
|
if model.checkWebSocketServerAlive() is True:
|
||||||
model.websocketSendMessage(
|
model.websocketSendMessage(
|
||||||
{
|
{
|
||||||
"type":"SENT",
|
"type":"SENT",
|
||||||
|
"src_languages":config.SELECTED_YOUR_LANGUAGES[config.SELECTED_TAB_NO],
|
||||||
|
"dst_languages":config.SELECTED_TARGET_LANGUAGES[config.SELECTED_TAB_NO],
|
||||||
"message":message,
|
"message":message,
|
||||||
"translation":translation,
|
"translation":translation,
|
||||||
"transliteration":transliteration
|
"transliteration":transliteration
|
||||||
@@ -389,10 +391,12 @@ class Controller:
|
|||||||
"transliteration":transliteration,
|
"transliteration":transliteration,
|
||||||
})
|
})
|
||||||
|
|
||||||
if config.WEBSOCKET_SERVER is True:
|
if model.checkWebSocketServerAlive() is True:
|
||||||
model.websocketSendMessage(
|
model.websocketSendMessage(
|
||||||
{
|
{
|
||||||
"type":"RECEIVED",
|
"type":"RECEIVED",
|
||||||
|
"src_languages":config.SELECTED_TARGET_LANGUAGES[config.SELECTED_TAB_NO],
|
||||||
|
"dst_languages":config.SELECTED_YOUR_LANGUAGES[config.SELECTED_TAB_NO],
|
||||||
"message":message,
|
"message":message,
|
||||||
"translation":translation,
|
"translation":translation,
|
||||||
"transliteration":transliteration
|
"transliteration":transliteration
|
||||||
@@ -456,10 +460,12 @@ class Controller:
|
|||||||
overlay_image = model.createOverlayImageLargeLog("send", message, translation[0] if len(translation) > 0 else "")
|
overlay_image = model.createOverlayImageLargeLog("send", message, translation[0] if len(translation) > 0 else "")
|
||||||
model.updateOverlayLargeLog(overlay_image)
|
model.updateOverlayLargeLog(overlay_image)
|
||||||
|
|
||||||
if config.WEBSOCKET_SERVER is True:
|
if model.checkWebSocketServerAlive() is True:
|
||||||
model.websocketSendMessage(
|
model.websocketSendMessage(
|
||||||
{
|
{
|
||||||
"type":"CHAT",
|
"type":"CHAT",
|
||||||
|
"src_languages":config.SELECTED_YOUR_LANGUAGES[config.SELECTED_TAB_NO],
|
||||||
|
"dst_languages":config.SELECTED_TARGET_LANGUAGES[config.SELECTED_TAB_NO],
|
||||||
"message":message,
|
"message":message,
|
||||||
"translation":translation,
|
"translation":translation,
|
||||||
"transliteration":transliteration
|
"transliteration":transliteration
|
||||||
@@ -1816,11 +1822,31 @@ class Controller:
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def setWebSocketHost(data, *args, **kwargs) -> dict:
|
def setWebSocketHost(data, *args, **kwargs) -> dict:
|
||||||
config.WEBSOCKET_HOST = data
|
if isValidIpAddress(data) is False:
|
||||||
if model.checkWebSocketServer() is True:
|
response = {
|
||||||
model.stopWebSocketServer()
|
"status":400,
|
||||||
model.startWebSocketServer()
|
"result":{
|
||||||
return {"status":200, "result":config.WEBSOCKET_HOST}
|
"message":"Invalid IP address",
|
||||||
|
"data": config.WEBSOCKET_HOST
|
||||||
|
}
|
||||||
|
}
|
||||||
|
else:
|
||||||
|
if model.checkWebSocketServerAlive() is True:
|
||||||
|
model.stopWebSocketServer()
|
||||||
|
|
||||||
|
if model.checkWebSocketServerPortAvailable() is True:
|
||||||
|
model.startWebSocketServer(data, config.WEBSOCKET_PORT)
|
||||||
|
config.WEBSOCKET_HOST = data
|
||||||
|
response = {"status":200, "result":config.WEBSOCKET_HOST}
|
||||||
|
else:
|
||||||
|
response = {
|
||||||
|
"status":400,
|
||||||
|
"result":{
|
||||||
|
"message":"WebSocket server port is not available",
|
||||||
|
"data": config.WEBSOCKET_HOST
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return response
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def getWebSocketPort(*args, **kwargs) -> dict:
|
def getWebSocketPort(*args, **kwargs) -> dict:
|
||||||
@@ -1828,11 +1854,21 @@ class Controller:
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def setWebSocketPort(data, *args, **kwargs) -> dict:
|
def setWebSocketPort(data, *args, **kwargs) -> dict:
|
||||||
config.WEBSOCKET_PORT = int(data)
|
if model.checkWebSocketServerAlive() is True:
|
||||||
if model.checkWebSocketServer() is True:
|
|
||||||
model.stopWebSocketServer()
|
model.stopWebSocketServer()
|
||||||
model.startWebSocketServer()
|
if model.checkWebSocketServerPortAvailable() is True:
|
||||||
return {"status":200, "result":config.WEBSOCKET_PORT}
|
model.startWebSocketServer(config.WEBSOCKET_HOST, int(data))
|
||||||
|
config.WEBSOCKET_PORT = int(data)
|
||||||
|
response = {"status":200, "result":config.WEBSOCKET_PORT}
|
||||||
|
else:
|
||||||
|
response = {
|
||||||
|
"status":400,
|
||||||
|
"result":{
|
||||||
|
"message":"WebSocket server port is not available",
|
||||||
|
"data": config.WEBSOCKET_PORT
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return response
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def getWebSocketServer(*args, **kwargs) -> dict:
|
def getWebSocketServer(*args, **kwargs) -> dict:
|
||||||
@@ -1840,9 +1876,19 @@ class Controller:
|
|||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def setEnableWebSocketServer(*args, **kwargs) -> dict:
|
def setEnableWebSocketServer(*args, **kwargs) -> dict:
|
||||||
model.startWebSocketServer()
|
if model.checkWebSocketServerPortAvailable() is True:
|
||||||
config.WEBSOCKET_SERVER = True
|
model.startWebSocketServer(config.WEBSOCKET_HOST, config.WEBSOCKET_PORT)
|
||||||
return {"status":200, "result":config.WEBSOCKET_SERVER}
|
config.WEBSOCKET_SERVER = True
|
||||||
|
response = {"status":200, "result":config.WEBSOCKET_SERVER}
|
||||||
|
else:
|
||||||
|
response = {
|
||||||
|
"status":400,
|
||||||
|
"result":{
|
||||||
|
"message":"WebSocket server port is not available",
|
||||||
|
"data": config.WEBSOCKET_SERVER
|
||||||
|
}
|
||||||
|
}
|
||||||
|
return response
|
||||||
|
|
||||||
@staticmethod
|
@staticmethod
|
||||||
def setDisableWebSocketServer(*args, **kwargs) -> dict:
|
def setDisableWebSocketServer(*args, **kwargs) -> dict:
|
||||||
@@ -1951,7 +1997,12 @@ class Controller:
|
|||||||
|
|
||||||
printLog("Init WebSocket Server")
|
printLog("Init WebSocket Server")
|
||||||
if config.WEBSOCKET_SERVER is True:
|
if config.WEBSOCKET_SERVER is True:
|
||||||
model.startWebSocketServer()
|
if model.checkWebSocketServerPortAvailable() is True:
|
||||||
|
model.startWebSocketServer(config.WEBSOCKET_HOST, config.WEBSOCKET_PORT)
|
||||||
|
else:
|
||||||
|
config.WEBSOCKET_SERVER = False
|
||||||
|
model.stopWebSocketServer()
|
||||||
|
printLog("WebSocket server port is not available")
|
||||||
|
|
||||||
printLog("Update settings")
|
printLog("Update settings")
|
||||||
self.updateConfigSettings()
|
self.updateConfigSettings()
|
||||||
|
|||||||
@@ -1,6 +1,8 @@
|
|||||||
import copy
|
import copy
|
||||||
import gc
|
import gc
|
||||||
import asyncio
|
import asyncio
|
||||||
|
import socket
|
||||||
|
import errno
|
||||||
import json
|
import json
|
||||||
from subprocess import Popen
|
from subprocess import Popen
|
||||||
from os import makedirs as os_makedirs
|
from os import makedirs as os_makedirs
|
||||||
@@ -838,16 +840,36 @@ class Model:
|
|||||||
"""WebSocketメッセージ受信時の処理"""
|
"""WebSocketメッセージ受信時の処理"""
|
||||||
pass
|
pass
|
||||||
|
|
||||||
def startWebSocketServer(self):
|
def checkWebSocketServerPortAvailable(self):
|
||||||
|
"""WebSocketサーバーのポートが使用中かどうかを確認する"""
|
||||||
|
response = True
|
||||||
|
with socket.socket(socket.AF_INET, socket.SOCK_STREAM) as chk:
|
||||||
|
try:
|
||||||
|
chk.bind((config.WEBSOCKET_HOST, config.WEBSOCKET_PORT))
|
||||||
|
chk.shutdown(socket.SHUT_RDWR)
|
||||||
|
chk.close()
|
||||||
|
except OSError as e:
|
||||||
|
if e.errno == errno.EADDRINUSE:
|
||||||
|
response = False
|
||||||
|
else:
|
||||||
|
errorLogging(e)
|
||||||
|
response = False
|
||||||
|
return response
|
||||||
|
|
||||||
|
def startWebSocketServer(self, host, port):
|
||||||
"""WebSocketサーバーを起動し、別スレッドで実行する"""
|
"""WebSocketサーバーを起動し、別スレッドで実行する"""
|
||||||
|
if self.websocket_server_alive is True:
|
||||||
|
# サーバーが既に起動している場合は何もしない
|
||||||
|
return
|
||||||
|
|
||||||
self.websocket_server_loop = True
|
self.websocket_server_loop = True
|
||||||
self.websocket_server_alive = False # 初期状態を明示
|
self.websocket_server_alive = False # 初期状態を明示
|
||||||
|
|
||||||
async def WebSocketServerMain():
|
async def WebSocketServerMain():
|
||||||
try:
|
try:
|
||||||
self.websocket_server = WebSocketServer(
|
self.websocket_server = WebSocketServer(
|
||||||
host=config.WEBSOCKET_HOST,
|
host=host,
|
||||||
port=config.WEBSOCKET_PORT,
|
port=port,
|
||||||
)
|
)
|
||||||
self.websocket_server.set_message_handler(self.message_handler)
|
self.websocket_server.set_message_handler(self.message_handler)
|
||||||
self.websocket_server.start()
|
self.websocket_server.start()
|
||||||
@@ -893,7 +915,7 @@ class Model:
|
|||||||
self.websocket_server = None
|
self.websocket_server = None
|
||||||
self.websocket_server_alive = False
|
self.websocket_server_alive = False
|
||||||
|
|
||||||
def checkWebSocketServer(self):
|
def checkWebSocketServerAlive(self):
|
||||||
"""WebSocketサーバーの稼働状態を確認する"""
|
"""WebSocketサーバーの稼働状態を確認する"""
|
||||||
return self.websocket_server_alive
|
return self.websocket_server_alive
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user