############################################################################### # Copyright (C) 2023 Kostiantyn Klochko # # # # This file is part of notification-client. # # # # notification-client is free software: you can redistribute it and/or modify # # it under the terms of the GNU Affero General Public License as published by # # the Free Software Foundation, either version 3 of the License, or (at your # # option) any later version. # # # # notification-client is distributed in the hope that it will be useful, but # # WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY # # or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public # # License for more details. # # # # You should have received a copy of the GNU Affero General Public License # # along with notification-client. If not, see .# ############################################################################### import asyncio import struct import sys from notification_client.MessagePrinter import MessagePrinter from notification_client.notitication import Notification from notification_client.timestamp import Timestamp class Client: BUFFER_SIZE = 1024 def __init__(self, ip: str, port: int): self.__ip = ip self.__port = port async def connect(self): try: reader, writer = await asyncio.open_connection(self.__ip, self.__port) MessagePrinter.connected(self.__ip, self.__port, Timestamp.now()) except ConnectionRefusedError: now = Timestamp.now() sys.stderr.write(f"[ERROR][{now}] Could not connect to the server. Please, check the ip and the port.\n") sys.exit(1) await self.handle(reader, writer) @staticmethod async def receive_message(reader) -> str: size, = struct.unpack('