예제 #1
0
    def _server_run_self(self, tid, server_info):
        """
        自定义服务处理函数,实现类可重载该函数加入自己的处理逻辑(例如进行实际业务处理)
            注意:该函数每次只处理一次就应该返回,且应该实现异常处理

        @param {int} tid - 线程id
        @param {object} server_info - _start_server_self函数生成的server_info信息

        @returns {CResult} - 处理结果:
            result.code :'00000'-成功,其他值为失败
            result.is_finished :处理是否已完成,True - 已处理完成,False - 未完成,需循环再处理

        """
        _result = CResult(code='00000')  # 成功
        _result.is_finished = False
        with ExceptionTool.ignored_cresult(
                _result,
                logger=self._logger,
                self_log_msg='[%s][NAME:%s]%s: ' %
            (self._server_log_prefix, self._server_name,
             _('service run error')),
                force_log_level=logging.ERROR):
            # 可在该部分实现自定义逻辑
            pass
        # 返回处理结果
        return _result
예제 #2
0
    def _stop_server_predeal_self(self, tid, server_info):
        """
        自定义服务停止前处理函数,实现类可重载该函数加入自己的处理逻辑(例如结束子线程)

        @param {int} tid - 线程id
        @param {object} server_info - _start_server_self函数生成的server_info信息

        @returns {CResult} - 处理结果:
            result.code :'00000'-成功,其他值为失败
            result.is_finished :处理是否已完成,True - 已处理完成,False - 未完成,需循环再处理

        """
        _result = CResult(code='00000')  # 成功
        _result.is_finished = True
        with ExceptionTool.ignored_cresult(
                _result,
                logger=self._logger,
                self_log_msg='[%s-STOPING][NAME:%s]%s: ' %
            (self._server_log_prefix, self._server_name,
             _('stop service predeal error')),
                force_log_level=logging.ERROR):
            # 可在该部分实现自定义逻辑
            pass
        # 返回处理结果
        return _result
예제 #3
0
    def _stop_server_predeal_self(self, tid, server_info):
        """
        自定义服务停止前处理函数,实现类可重载该函数加入自己的处理逻辑(例如结束子线程)
        重载该函数,检查连接子线程是否均已结束,否则返回未完成,继续等待下一次检查

        @param {int} tid - 线程id
        @param {object} server_info - _start_server_self函数生成的server_info信息

        @returns {CResult} - 处理结果:
            result.code :'00000'-成功,其他值为失败
            result.is_finished :处理是否已完成,True - 已处理完成,False - 未完成,需循环再处理

        """
        _result = CResult(code='00000')  # 成功
        _result.is_finished = True
        if len(self.__server_connect_thread_list.keys()) > 0:
            _result.is_finished = False
        return _result
예제 #4
0
    def _server_run_self(self, tid, server_info):
        """
        自定义服务处理函数,实现类可重载该函数加入自己的处理逻辑(例如进行实际业务处理)
            注意:该函数每次只处理一次就应该返回,且应该实现异常处理

        @param {int} tid - 线程id
        @param {object} server_info - _start_server_self函数生成的server_info信息

        @returns {CResult} - 处理结果:
            result.code :'00000'-成功,其他值为失败
            result.is_finished :处理是否已完成,True - 已处理完成,False - 未完成,需循环再处理

        """
        _result = CResult(code='00000')  # 成功
        _result.is_finished = False
        with ExceptionTool.ignored_cresult(
            _result,
            logger=self._logger,
            self_log_msg='[%s][NAME:%s]%s: ' % (
                self._server_log_prefix, self._server_name, _('service run error')),
            force_log_level=logging.ERROR
        ):
            # 可在该部分实现自定义逻辑
            # 监听下一个连接请求
            _accept_result = self._accept_one(self._server_opts, server_info)
            if _accept_result.is_success():
                # 获取到一个连接,创建线程
                self.__server_connect_thread_id = self.__server_connect_thread_id + 1
                _thread_id = self.__server_connect_thread_id
                _new_thread = threading.Thread(
                    target=self.__server_connect_thread_fun,
                    args=(_thread_id, self._server_opts, _accept_result.net_info),
                    name='Thread-ConnectDeal' + str(_thread_id)
                )
                self.__server_connect_thread_add(_thread_id, _new_thread)
                _new_thread.setDaemon(True)
                _new_thread.start()
            elif _accept_result.code != '20407':
                # 不是超时的其他获取错误,打印信息
                self._logger.log(
                    logging.ERROR,
                    "[%s][NAME:%s][EX:%s]%s: %s\n%s" % (
                        self._server_log_prefix,
                        self._server_name, str(type(_accept_result.error)),
                        _('accept net connection error'), _accept_result.msg,
                        _accept_result.trace_str
                    )
                )
            else:
                # 监听超时
                pass
        # 返回处理结果
        return _result