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()
|
||||
|
||||
Reference in New Issue
Block a user