def dispatch()

in apisix/runner/server/handle.py [0:0]


    def dispatch(self) -> flatbuffers.Builder:
        # init builder
        builder = runner_utils.new_builder()
        # parse request
        req = NewHttpRequest(self.r)

        if self.r.request.ty == runner_utils.RPC_PREPARE_CONF:
            # generate token
            token = runner_cache.generate_token()
            # get plugins config
            configs = req.get_configs()
            # cache plugins config
            ok = runner_cache.set_config_by_token(token, configs)
            if not ok:
                self.r.log.error("token `%d` cache setting failed" % token)
                req.code = ErrCode.CONF_TOKEN_NOT_FOUND
                req.unknown_handler(builder)
                return builder

            req.set_conf_token(token)
            ok = req.config_handler(builder)
            if not ok:
                self.r.log.error("prepare conf request failure")
                req.code = ErrCode.BAD_REQUEST
                req.unknown_handler(builder)
                return builder

            return builder

        elif self.r.request.ty == runner_utils.RPC_HTTP_REQ_CALL:
            # get request token
            token = req.get_conf_token()
            # get plugins
            configs = runner_cache.get_config_by_token(token)

            if len(configs) == 0:
                self.r.log.error("token `%d` cache acquisition failed" % token)
                req.code = ErrCode.CONF_TOKEN_NOT_FOUND
                req.unknown_handler(builder)
                return builder

            # init response
            resp = NewHttpResponse()
            resp.set_req_id(req.get_id())

            # execute plugins
            ok = runner_plugin.execute(configs, self.r, req, resp)
            if not ok:
                req.code = ErrCode.SERVICE_UNAVAILABLE
                req.unknown_handler(builder)
                return builder

            # response changed
            ok = resp.call_handler(builder)
            if ok:
                return builder

            # request changed
            ok = req.call_handler(builder)
            if not ok:
                self.r.log.error("http request call failure")
                req.code = ErrCode.BAD_REQUEST
                req.unknown_handler(builder)
                return builder

            return builder

        else:
            self.r.log.error("unknown request")
            req.code = ErrCode.BAD_REQUEST
            req.unknown_handler(builder)
            return builder