import asyncio
import logging

from cintes import gestiona_estat_cinta

class ServidorEstatCintes:
    def __init__(self):
        self.estat_cintes = {}

    async def cinta(self, reader: asyncio.StreamReader, writer: asyncio.StreamWriter):
        await gestiona_estat_cinta(self.estat_cintes, reader, writer)

    async def run(self, ip, port):
        escriu = asyncio.create_task(self.escriu_estat)
        servidor = await asyncio.start_server(self.cinta, ip, port)
        async with servidor:
            await servidor.serve_forever()
        escriu.cancel()
        try:
            await escriu
        except asyncio.CancelledError:
            print("main(): cancel_me is cancelled now")


    async def escriu_estat(self):
        while True:
            logging.info(self.estat_cintes)
            await asyncio.sleep(0.5)
        

if __name__ == "__main__":
    IP = '127.0.0.1'
    PORT = 7777

    sec = ServidorEstatCintes()
    try:
        asyncio.run(sec.run(IP, PORT))
    except KeyboardInterrupt:
        pass
