添加对应方法,加入输出管理器

This commit is contained in:
2022-07-15 16:10:07 +08:00
parent d0e067ae44
commit 49238a09e0
7 changed files with 76 additions and 42 deletions

View File

@ -1,43 +1,52 @@
from messages.base import Base
from messages.chat import ChatMessage
from messages.control import ControlMessage
from messages.fansclub import FansclubMessage
from messages.gift import GiftMessage
from messages.like import LikeMessage
from messages.member import MemberMessage
from messages.roomuserseq import RoomUserSeqMessage
from messages.social import SocialMessage
from typing import TYPE_CHECKING
if TYPE_CHECKING:
from messages.base import Base
from messages.chat import ChatMessage
from messages.control import ControlMessage
from messages.fansclub import FansclubMessage
from messages.gift import GiftMessage
from messages.like import LikeMessage
from messages.member import MemberMessage
from messages.roomuserseq import RoomUserSeqMessage
from messages.social import SocialMessage
from config import ConfigManager
class IOutput():
_config_manager: "ConfigManager"
def __del__(self):
self.terminate()
def output(self, message_type: str, message_obj: Base):
def __init__(self, config_manager: "ConfigManager"):
self._config_manager = config_manager
def output(self, message_type: str, message_obj: "Base"):
...
def chat_output(self, message: ChatMessage):
def chat_output(self, message: "ChatMessage"):
...
def like_output(self, message: LikeMessage):
def like_output(self, message: "LikeMessage"):
...
def member_output(self, message: MemberMessage):
def member_output(self, message: "MemberMessage"):
...
def social_output(self, message: SocialMessage):
def social_output(self, message: "SocialMessage"):
...
def gift_output(self, message: GiftMessage):
def gift_output(self, message: "GiftMessage"):
...
def userseq_output(self, message: RoomUserSeqMessage):
def userseq_output(self, message: "RoomUserSeqMessage"):
...
def control_output(self, message: ControlMessage):
def control_output(self, message: "ControlMessage"):
...
def fansclub_output(self, message: FansclubMessage):
def fansclub_output(self, message: "FansclubMessage"):
...
def other_output(self, message_type: str, message_raw: bytes):

View File

@ -0,0 +1 @@
from .manager import OutputManager

View File

@ -2,17 +2,17 @@ import os
import time
import traceback
from config.helper import config
from output.IOutput import IOutput
class DebugWriter(IOutput):
def __init__(self):
def __init__(self, config_manager):
super(DebugWriter, self).__init__(config_manager)
# 获取对应配置文件
self.unknown_output_dir = config()['output']['debug']['save_path']['unknown']
self.unknown_output_dir = self._config_manager.config['output']['debug']['save_path']
if not os.path.isdir(self.unknown_output_dir):
os.makedirs(self.unknown_output_dir)
self.error_output_dir = config()['output']['debug']['save_path']['error']
self.error_output_dir = os.path.join(self._config_manager.config['output']['debug']['save_path'], "error")
if not os.path.isdir(self.error_output_dir):
os.makedirs(self.error_output_dir)

View File

@ -2,7 +2,7 @@ import gzip
import threading
from typing import TYPE_CHECKING
from config.helper import config
from common import Singleton
from messages.chat import ChatMessage
from messages.control import ControlMessage
from messages.fansclub import FansclubMessage
@ -21,9 +21,11 @@ if TYPE_CHECKING:
from typing import Type, Optional, List
from output.IOutput import IOutput
from proxy.common import MessagePayload
from config import ConfigManager
class OutputManager():
class OutputManager(metaclass=Singleton):
_config_manager: "ConfigManager"
_mapping: "dict[str, Type[IOutput]]" = {
"print": Print,
"xml": XMLWriter,
@ -33,14 +35,15 @@ class OutputManager():
_thread: "Optional[threading.Thread]"= None
_should_exit = threading.Event()
def __init__(self):
_config = config()['output']['use']
def __init__(self, config_manager: "ConfigManager"):
self._config_manager = config_manager
_config = self._config_manager.config['output']['use']
if type(_config) != list:
_config = [_config]
for _c in _config:
if _c not in self._mapping:
raise Exception("不支持的输出方式")
self._writer.append(self._mapping[_c]())
self._writer.append(self._mapping[_c](self._config_manager))
def __del__(self):
self.terminate()

View File

@ -1,4 +1,3 @@
from config.helper import config
from output.IOutput import IOutput
from typing import IO
import time
@ -9,10 +8,11 @@ class XMLWriter(IOutput):
可输出与B站弹幕姬兼容的xml弹幕格式,可用于转成ass字幕
"""
def __init__(self):
def __init__(self, config_manager):
super(XMLWriter, self).__init__(config_manager)
self._file_mappings: "dict[str, IO[str]]" = {}
self.time_mappings: "dict[str, float]" = {}
self._file_name_pattern: "str" = config()['output']['xml']['file_pattern']
self._file_name_pattern: "str" = self._config_manager.config['output']['xml']['file_pattern']
def _get_fd_by_room_id(self, room_id: str) -> IO[str]:
if room_id in self._file_mappings: