import asyncio
import utils.LogMgr as log
from notification.agent import Agent
from notification.center import MessageCenter
import notification.configListenser as listener
import threading
from settings import options

logger = log.GetLogger()

async def start_server(addr='localhost', port=8080):
    loop = asyncio.get_running_loop()
    svr = await loop.create_server(lambda: Agent(), addr, port)
    host = svr.sockets[0].getsockname()  # 获得这个服务器的第一个套接字的地址和端口
    print('Serving on {}. Hit CTRL-C to stop.'.format(host))  # 在控制台中显示地址和端口

    async with svr:
        await svr.serve_forever()

def dispatch(data):
    MessageCenter.SendNotification(data)


try:
    listenThread = threading.Thread(
        target=listener.listen, args=(options, dispatch))
    listenThread.daemon = True
    
    listenThread.start()

    loop = asyncio.get_event_loop()
    task = asyncio.gather(start_server())
    loop.run_until_complete(task)
except KeyboardInterrupt:
    logger.info("server close by user[Press Ctl+C]")

except Exception as e:
    logger.exception("exception occur and close server", e)
    
    

import asyncio
import utils.LogMgr as log
from notification.agent import Agent
from notification.center import MessageCenter
import notification.configListenser as listener
import threading
from settings import options

logger = log.GetLogger()

async def start_server(addr='localhost', port=8080):
    loop = asyncio.get_running_loop()
    svr = await loop.create_server(lambda: Agent(), addr, port)
    host = svr.sockets[0].getsockname()  # 获得这个服务器的第一个套接字的地址和端口
    print('Serving on {}. Hit CTRL-C to stop.'.format(host))  # 在控制台中显示地址和端口

    async with svr:
        await svr.serve_forever()

def dispatch(data):
    MessageCenter.SendNotification(data)


try:
    listenThread = threading.Thread(
        target=listener.listen, args=(options, dispatch))
    listenThread.daemon = True
    
    listenThread.start()

    loop = asyncio.get_event_loop()
    task = asyncio.gather(start_server())
    loop.run_until_complete(task)
except KeyboardInterrupt:
    logger.info("server close by user[Press Ctl+C]")

except Exception as e:
    logger.exception("exception occur and close server", e)
    
    

# 获得这个服务器的第一个套接字的地址和端口 # 在控制台中显示地址和端口