fix: 修复命令行工具
This commit is contained in:
@@ -150,10 +150,69 @@ class JSONRPCMethodRegistry:
|
||||
self.dispatcher.add_method(func, method_name)
|
||||
|
||||
|
||||
def handle_request(self, request_data: str) -> str:
|
||||
def handle_request(self, request_data: str) -> Optional[str]:
|
||||
"""处理JSON-RPC请求"""
|
||||
response = JSONRPCResponseManager.handle(request_data, self.dispatcher)
|
||||
return response.json
|
||||
try:
|
||||
# 解析请求
|
||||
request_json = json.loads(request_data)
|
||||
method_name = request_json.get("method")
|
||||
params = request_json.get("params", {})
|
||||
request_id = request_json.get("id")
|
||||
|
||||
# 检查方法是否存在
|
||||
if method_name not in self.methods:
|
||||
error_response = {
|
||||
"jsonrpc": "2.0",
|
||||
"id": request_id,
|
||||
"error": {
|
||||
"code": -32601,
|
||||
"message": f"Method '{method_name}' not found"
|
||||
}
|
||||
}
|
||||
return json.dumps(error_response, ensure_ascii=False, separators=(',', ':'))
|
||||
|
||||
try:
|
||||
# 调用方法
|
||||
if isinstance(params, dict):
|
||||
result = self.methods[method_name](**params)
|
||||
elif isinstance(params, list):
|
||||
result = self.methods[method_name](*params)
|
||||
else:
|
||||
result = self.methods[method_name](params)
|
||||
|
||||
# 如果方法返回None,表示响应已经异步发送,不需要额外响应
|
||||
if result is None:
|
||||
return None
|
||||
|
||||
# 正常响应
|
||||
success_response = {
|
||||
"jsonrpc": "2.0",
|
||||
"id": request_id,
|
||||
"result": result
|
||||
}
|
||||
return json.dumps(success_response, ensure_ascii=False, separators=(',', ':'))
|
||||
|
||||
except Exception as e:
|
||||
error_response = {
|
||||
"jsonrpc": "2.0",
|
||||
"id": request_id,
|
||||
"error": {
|
||||
"code": -32603,
|
||||
"message": f"Internal error: {str(e)}"
|
||||
}
|
||||
}
|
||||
return json.dumps(error_response, ensure_ascii=False, separators=(',', ':'))
|
||||
|
||||
except Exception as e:
|
||||
error_response = {
|
||||
"jsonrpc": "2.0",
|
||||
"id": None,
|
||||
"error": {
|
||||
"code": -32700,
|
||||
"message": f"Parse error: {str(e)}"
|
||||
}
|
||||
}
|
||||
return json.dumps(error_response, ensure_ascii=False, separators=(',', ':'))
|
||||
|
||||
# 全局实例
|
||||
enhanced_progress_reporter = EnhancedProgressReporter()
|
||||
|
||||
@@ -62,9 +62,17 @@ class JSONRPCHTTPHandler(BaseHTTPRequestHandler):
|
||||
|
||||
# 处理JSON-RPC请求
|
||||
response_data = self.method_registry.handle_request(request_data)
|
||||
|
||||
# 发送响应
|
||||
self._send_json_response(response_data)
|
||||
|
||||
# 如果响应为None,表示响应已经异步发送,不需要额外响应
|
||||
if response_data is not None:
|
||||
# 发送响应
|
||||
self._send_json_response(response_data)
|
||||
else:
|
||||
# 发送空的200响应,表示请求已处理但无需响应体
|
||||
self.send_response(200)
|
||||
if self.config.cors_enabled:
|
||||
self._send_cors_headers()
|
||||
self.end_headers()
|
||||
|
||||
except Exception as e:
|
||||
if self.config.debug:
|
||||
|
||||
Reference in New Issue
Block a user