def new_func(*args, **kwargs):
            logger.info(
                f'Функции {old_func.__name__}() вызвана из функции {inspect.stack()[1][3]}'
            )

            result = old_func(*args, **kwargs)
            return result
Example #2
0
    def presence_response(self):
        """
        Формирование ответа клиенту
        :param presence_message: Словарь presence запроса
        :return: Словарь ответа
        """
        # Делаем проверки
        if ACTION in self.presence and \
                self.presence[ACTION] == PRESENCE and \
                TIME in self.presence and \
                isinstance(self.presence[TIME], float):
            # Если всё хорошо шлем ОК
            logger.info('Клиент подключён.')

            return {RESPONSE: 200}
        else:
            # Шлем код ошибки
            logger.error('Не верный запрос.')
            return {RESPONSE: 400, ERROR: 'Не верный запрос'}
Example #3
0
    def read_requests(self):
        # Чтение запросов из списка клиентов

        responses = {}  # Словарь ответов сервера вида {сокет: запрос}

        for sock in self.r:
            try:
                data = JimRcv(sock).get_message()
                logger.debug(f'Получили сообщение от клиента: {data}')

                # responses[sock] = data
                for sock2 in self.w:
                    responses[sock2] = data
                logger.debug(f'Отпраляем словарь ответов сервера: {responses}')
            except:
                print('Клиент {} {} отключился'.format(sock.fileno(),
                                                       sock.getpeername()))
                logger.info('Клиент {} {} отключился'.format(
                    sock.fileno(), sock.getpeername()))
                self.clients.remove(sock)

        return responses
        def new_func(*args, **kwargs):
            logger.info(f'Имя функции: {old_func.__name__}')
            logger.info(f'Параметры по имени: {args}')
            # logger.debug(f'Параметры по названию: {kwargs}')

            result = old_func(*args, **kwargs)
            logger.info(f'Результат {result}')
            return result
Example #5
0
 def write_responses(self):
     # Эхо-ответ сервера клиентам, от которых были запросы
     for sock in self.w:
         if sock in self.requests:
             try:
                 if self.requests[sock][ACTION] == 'get_contacts':
                     Server.get_contacts(self, sock)
                 elif self.requests[sock][ACTION] == 'write':
                     # Подготовить и отправить ответ сервера
                     resp = {
                         RESPONSE: 200,
                         'message': self.requests[sock]['message']
                     }
                     JimSend(sock).send_message(resp)
                 logger.debug(
                     f'Отвера сервера был отправлен клинету {sock.fileno()} {sock.getpeername()}'
                 )
             except:  # Сокет недоступен, клиент отключился
                 print('Клиент {} {} отключился'.format(
                     sock.fileno(), sock.getpeername()))
                 logger.info('Клиент {} {} отключился'.format(
                     sock.fileno(), sock.getpeername()))
                 sock.close()
                 self.clients.remove(sock)
Example #6
0
    def __init__(self):
        address = ('', 8888)

        try:
            addr = sys.argv[1]
        except IndexError:
            addr = ''
        try:
            port = int(sys.argv[2])
        except IndexError:
            port = 8888
        except ValueError:
            print('Порт должен быть целым числом')
            sys.exit(0)

        self.clients = []

        self.s = socket(AF_INET, SOCK_STREAM)
        # TODO что такое bind, и зачем он нужен
        self.s.bind(address)
        self.s.listen(100)
        self.s.settimeout(0.2)  # Таймаут для операций с сокетом

        while True:

            try:
                self.conn, self.addr = self.s.accept()  # Проверка подключения
                logger.debug('Проверка подключения прошла успешно.')
                # Получаем сообщение от клиента
                self.presence = JimRcv(self.conn).get_message()
                logger.debug(
                    f'Сообщение от клиента было получено: {self.presence}')
                # Формируем ответ
                response = Server.presence_response(self)
                logger.debug(f'Клинту был сформирован ответ: {response}')
                # Отправляем ответ клиенту
                JimSend(self.conn).send_message(response)
                logger.info(f'Клиенту был отправлен ответ: {response}')

                self.connect_to_db()
                # Выполним вход
                Server.login(self)

                sender = TimeServer(self.conn, 5)
                th_sender = Thread(target=sender)

                th_sender.start()

            except OSError as e:
                pass  # timeout Вышел
            else:
                self.clients.append(self.conn)
            finally:

                # Проверяю наличие событий ввода-вывода
                self.wait = 0
                self.r = []
                self.w = []
                try:
                    self.r, self.w, self.e = select.select(
                        self.clients, self.clients, [], self.wait)
                    # print('r | ', self.r)
                    # print('w | ', self.w)
                    # r делают send
                    # w делают read
                except:
                    pass

                self.requests = Server.read_requests(
                    self)  # Сохраним запросы клиентов
                Server.write_responses(
                    self)  # Выполним отправку ответов клиентам