Exemplo n.º 1
0
 def __init__(self, obj_Server):
     """
     Инициализация протокола JIM и базы клиентов
     :param obj_Server:
     """
     self.protocol = JIMMessageServer()
     self.server = obj_Server
     self.base = Clients_Base()
Exemplo n.º 2
0
 def __init__(self, obj_Server):
     self.protocol = JIMMessageServer()
     self.server = obj_Server
     self.base = Clients_Base()
Exemplo n.º 3
0
class JIM_Server:
    """ Класс обрабатывает полученные сообщения от клиента и ответы сервера """
    def __init__(self, obj_Server):
        """
        Инициализация протокола JIM и базы клиентов
        :param obj_Server:
        """
        self.protocol = JIMMessageServer()
        self.server = obj_Server
        self.base = Clients_Base()

    @staticmethod
    def __deserialization_msg(data):
        """
        Декодирует полученное зашифрованное сообщение
        """
        dec_cry = Crypto_Message()
        data_dec_cry = dec_cry._decrypt(data)
        return json.loads(data_dec_cry.decode('utf-8'))

    def receive_response(self, client, data):
        """
        Проверка по action
        """
        try:
            response = self.__deserialization_msg(data)
            if response.get('action').startswith('presence'):
                log_config.log_server.debug('[Server]: receive_response: '
                                            'response:\n{}'.format(response))
                client.send(self.protocol.good_response())

            elif response.get('action').startswith('authenticate'):
                log_config.log_server.debug('[Server]: receive_response: '
                                            'response:\n{}'.format(response))
                try:
                    user = response['user']['account_name']
                    password = response['user']['password']
                    storage.verification(user, password,
                                         client.getpeername()[0])
                    client.send(self.protocol.response_2xx(202))
                    log_config.log_server.debug('[Server]: receive_response: '
                                                'user app base')
                except:
                    client.send(
                        self.protocol.response_4xx(
                            402, 'неправильный логин/пароль'))
                    log_config.log_server.error(
                        '[Server]: JIM_Server: receive_response: '
                        'ERROR: {}{}'.format(client, response))
                self.base.add_client(client)

            elif response.get('action').startswith('msg'):
                user = response['user']
                msg = response['message']
                for s_client in self.base.client_base:
                    try:
                        s_client.send(
                            self.protocol.response_6xx(600,
                                                       user['account_name'],
                                                       msg))
                    except:
                        pass

            elif response.get('action').startswith('quit'):
                self.base.remove_client(client)
                log_config.log_server.info('[Server]:'
                                           ' receive_response:'
                                           ' client {}'
                                           ' offline'.format(client))
                user = response['user']
                msg = response['message']
                for s_client in self.base.client_base:
                    try:
                        s_client.send(
                            self.protocol.response_6xx(600,
                                                       user['account_name'],
                                                       msg))
                    except:
                        pass
                server.close_request(client)

            else:
                log_config.log_server.info(
                    '[Server]:'
                    ' Сообщение содержит'
                    ' неверный /response/: {}'.format(response))
        except:
            pass

    def response_500(self):
        for s_client in self.base.client_base:
            try:
                s_client.send(self.protocol.response_5xx(500))
            except:
                pass
Exemplo n.º 4
0
class JIM_Server:
    """ Класс должен обрабатывать полученные сообщения от клиента и ответы сервера """

    def __init__(self, obj_Server):
        self.protocol = JIMMessageServer()
        self.server = obj_Server
        self.clients = Clients_Base()

    @staticmethod
    def __deserialization_msg(data):
        """ Декодирует полученное сообщение """
        return json.loads(data.decode('utf-8'))

    @log_config.log(__qualname__)
    def receive_response(self, client, data):
        """ проверка по action """
        w_clients = self.clients.base
        try:
            response = self.__deserialization_msg(data)
            # log_config.log_server.debug('[Server]:'
            #                             ' receive_response:'
            #                             ' response:\n{}'.format(response))
            if response.get('action').startswith('presence'):
                # log_config.log_server.debug('[Server]:'
                #                             ' receive_response(presence):'
                #                             ' response:\n{}'.format(response))
                self.clients.add_client(client)
                client.sendall(self.protocol.good_response())
            elif response.get('action').startswith('msg'):
                user = response['user']
                msg = response['message']
                # log_config.log_server.debug('[Server]:'
                #                             ' receive_response(msg):'
                #                             ' response:\n{}'.format(response))
                for s_client in w_clients:
                    try:
                        s_client.sendall(
                            self.protocol.response_6xx(600, user['account_name'], msg))
                        # log_config.log_server.debug('[Server]:'
                        #                             ' receive_response600:'
                        #                             ' response:\n{}'.format(json.loads(self.protocol.response_6xx(600, user['account_name'], msg).decode('utf-8'), encoding='utf-8')))
                    except:
                        pass
                # return '\nsend:\n{}\n'.format(msg)
            elif response.get('action').startswith('quit'):
                # log_config.log_server.debug('[Server]:'
                #                             ' receive_response(quit):'
                #                             ' response:\n{}'.format(response))
                self.clients.remove_client(client)
                log_config.log_server.debug('[Server]:'
                                            ' receive_response:'
                                            ' client {}'
                                            ' offline'.format(client))
                client.close()
                user = response['user']
                msg = response['message']
                for s_client in w_clients:
                    try:
                        s_client.sendall(self.protocol.response_6xx(600, user['account_name'], msg))
                    except:
                        pass
            else:
                log_config.log_server.info('[Server]:'
                                           ' Сообщение содержит'
                                           ' неверный /response/')
                pass
            # response = {}
        except:
            """
            1. Запустить сервер
            2. Запуск последовательно 3-х клиентов(без выбора режима работы)
            3. Выбор режима msg в первом клиенте
            4. Выбор режима receiver во втором клиенте
            5. Выбор режима receiver в третьем клиенте
            Ошибка:
            Проблема с JSON!!!
            raise JSONDecodeError("Expecting value", s, err.value) from None
            json.decoder.JSONDecodeError: Expecting value: line 1 column 1 (char 0)
            """
            log_config.log_server.debug('[Server]:'
                                        ' receive_response(data):'
                                        ' response:\n{}'.format(self.__deserialization_msg(data)))
            time.sleep(2)