async def update_class_properties(self, class_name, properties_info): new_properties = dict() for prop in properties_info: if prop['Persistent']: new_properties[prop['Name']] = prop['Type'] INFO_MSG("Updating properties for class %s" % class_name) await self.db.CreateClassTable(class_name, new_properties)
async def __ainit__(self, endpoint, client_handler_class): self.server = None # encapsulates the server sockets self.endpoint = endpoint self.client_handler_class = client_handler_class self.clients = dict() # task -> (reader, writer) await self.start() INFO_MSG("%s spawned" % self)
def accept_new_client(self, client_reader, client_writer): INFO_MSG("Server accepted client", client_writer) async def Task(): peername = client_writer.transport._extra['peername'] client = await TCPClient(peername, self.client_handler_class, False) self.clients[peername] = client client.accept(client_reader, client_writer) asyncio.Task(Task())
async def __ainit__(self, endpoint, client_handler_class=None, do_open_connection=True): INFO_MSG("Created tcp client") self.endpoint = endpoint self.reader = None self.writer = None self.client_handler = client_handler_class( self) if client_handler_class else None self.clients.add(self) if do_open_connection: try: reader, writer = await asyncio.streams.open_connection( self.endpoint[0], self.endpoint[1]) self.accept(reader, writer) except ConnectionRefusedError: WARN_MSG("Connection refused: %s" % self)
def __del__(self): """ Calling __del__ calls async __adel__ later for async destruction actions """ if self.async_initialized: INFO_MSG(f"Destroyed object {self}") asyncio.Task(self.__adel__())
async def start(self): INFO_MSG("Server start") await asyncio.streams.start_server(self.accept_new_client, self.endpoint[0], self.endpoint[1], loop=get_event_loop())
def accept(self, reader, writer): INFO_MSG("accepted", writer.transport._extra['peername']) self.reader = reader self.writer = writer asyncio.Task(self.client_loop())