mirror of
https://github.com/xfgryujk/blivechat.git
synced 2025-01-28 21:30:55 +08:00
93 lines
2.0 KiB
Python
93 lines
2.0 KiB
Python
|
#!/usr/bin/env python
|
|||
|
# -*- coding: utf-8 -*-
|
|||
|
import asyncio
|
|||
|
import logging.handlers
|
|||
|
import os
|
|||
|
import signal
|
|||
|
import sys
|
|||
|
from typing import *
|
|||
|
|
|||
|
import blcsdk
|
|||
|
import config
|
|||
|
import listener
|
|||
|
import tts
|
|||
|
|
|||
|
logger = logging.getLogger('text-to-speech')
|
|||
|
|
|||
|
shut_down_event: Optional[asyncio.Event] = None
|
|||
|
|
|||
|
|
|||
|
async def main():
|
|||
|
try:
|
|||
|
if not await init():
|
|||
|
return 1
|
|||
|
await run()
|
|||
|
finally:
|
|||
|
await shut_down()
|
|||
|
return 0
|
|||
|
|
|||
|
|
|||
|
async def init():
|
|||
|
init_signal_handlers()
|
|||
|
|
|||
|
init_logging()
|
|||
|
config.init()
|
|||
|
|
|||
|
await blcsdk.init()
|
|||
|
if not blcsdk.is_sdk_version_compatible():
|
|||
|
raise RuntimeError('SDK version is not compatible')
|
|||
|
|
|||
|
if not tts.init():
|
|||
|
return False
|
|||
|
listener.init()
|
|||
|
return True
|
|||
|
|
|||
|
|
|||
|
def init_signal_handlers():
|
|||
|
global shut_down_event
|
|||
|
shut_down_event = asyncio.Event()
|
|||
|
|
|||
|
signums = (signal.SIGINT, signal.SIGTERM)
|
|||
|
try:
|
|||
|
loop = asyncio.get_running_loop()
|
|||
|
for signum in signums:
|
|||
|
loop.add_signal_handler(signum, start_shut_down)
|
|||
|
except NotImplementedError:
|
|||
|
# 不太安全,但Windows只能用这个
|
|||
|
for signum in signums:
|
|||
|
signal.signal(signum, start_shut_down)
|
|||
|
|
|||
|
|
|||
|
def start_shut_down(*_args):
|
|||
|
shut_down_event.set()
|
|||
|
|
|||
|
|
|||
|
def init_logging():
|
|||
|
filename = os.path.join(config.LOG_PATH, 'text-to-speech.log')
|
|||
|
stream_handler = logging.StreamHandler()
|
|||
|
file_handler = logging.handlers.TimedRotatingFileHandler(
|
|||
|
filename, encoding='utf-8', when='midnight', backupCount=7, delay=True
|
|||
|
)
|
|||
|
logging.basicConfig(
|
|||
|
format='{asctime} {levelname} [{name}]: {message}',
|
|||
|
style='{',
|
|||
|
level=logging.INFO,
|
|||
|
# level=logging.DEBUG,
|
|||
|
handlers=[stream_handler, file_handler],
|
|||
|
)
|
|||
|
|
|||
|
|
|||
|
async def run():
|
|||
|
logger.info('Running event loop')
|
|||
|
await shut_down_event.wait()
|
|||
|
logger.info('Start to shut down')
|
|||
|
|
|||
|
|
|||
|
async def shut_down():
|
|||
|
listener.shut_down()
|
|||
|
await blcsdk.shut_down()
|
|||
|
|
|||
|
|
|||
|
if __name__ == '__main__':
|
|||
|
sys.exit(asyncio.run(main()))
|