refactor: 重构WebSocket服务及相关实体类

重构WebSocket服务名称从WebSocketService改为WebSocketClientService,并实现Serializable接口
添加WebSocket常量定义和消息处理实现
优化实体类equals和hashCode方法
修复控制器路径和日志配置
添加查询服务和任务接口方法
This commit is contained in:
2025-09-17 11:45:50 +08:00
parent 30deb0a280
commit c42ff7501d
152 changed files with 1933 additions and 999 deletions

View File

@@ -1,24 +1,25 @@
package com.ecep.contract;
import com.ecep.contract.constant.WebSocketConstant;
import com.ecep.contract.task.Tasker;
import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonNode;
import lombok.Getter;
import lombok.Setter;
import org.springframework.beans.BeanUtils;
import java.beans.PropertyDescriptor;
import java.util.Map;
import java.util.UUID;
import java.util.logging.Level;
public class WebSocketSession {
public class WebSocketClientSession {
@Getter
private String sessionId = UUID.randomUUID().toString();
private WebSocketClientTasker tasker;
private final WebSocketService webSocketService;
private final WebSocketClientService webSocketService;
public WebSocketSession(WebSocketService webSocketService) {
public WebSocketClientSession(WebSocketClientService webSocketService) {
this.webSocketService = webSocketService;
}
@@ -26,31 +27,63 @@ public class WebSocketSession {
}
public void submitTask(WebSocketClientTasker tasker, Object... args) throws JsonProcessingException {
Map<String, Object> argments = Map.of(
WebSocketConstant.SESSION_ID_FIELD_NAME, getSessionId(),
"type", "createTask",
"taskName", tasker.getTaskName(),
"args", args);
webSocketService.send(argments);
this.tasker = tasker;
// 将 tasker.getTaskName() 和 args 合并到一个数组参数中
Object[] mergedArgs = new Object[args.length + 1];
mergedArgs[0] = tasker.getTaskName();
System.arraycopy(args, 0, mergedArgs, 1, args.length);
send("createTask", mergedArgs);
}
public void send(String type, Object... args) throws JsonProcessingException {
Map<String, Object> arguments = Map.of(
WebSocketConstant.SESSION_ID_FIELD_NAME, getSessionId(),
"type", type,
WebSocketConstant.ARGUMENTS_FIELD_NAME, args);
webSocketService.send(arguments);
}
public void onMessage(JsonNode node) {
if (node.has("type")) {
String type = node.get("type").asText();
JsonNode args = node.get(WebSocketConstant.ARGUMENTS_FIELD_NAME);
if (type.equals("message")) {
JsonNode args = node.get("args");
String message = args.get(1).asText();
String level = args.get(0).asText();
if (tasker instanceof Tasker<?> t) {
t.updateMessage(java.util.logging.Level.parse(level), message);
}
updateMessage(java.util.logging.Level.parse(level), message);
} else if (type.equals("title")) {
JsonNode args = node.get("args");
String message = args.get(0).asText();
if (tasker instanceof Tasker<?> t) {
t.updateTitle(message);
tasker.updateTitle(message);
} else if (type.equals("property")) {
String name = args.get(0).asText();
Object value = args.get(1);
try {
PropertyDescriptor descriptor = BeanUtils.getPropertyDescriptor(tasker.getClass(), name);
System.out.println("descriptor = " + descriptor);
System.out.println("descriptor.getPropertyType() = " + descriptor.getPropertyType());
Object object = webSocketService.getObjectMapper().convertValue(value, descriptor.getPropertyType());
System.out.println("object = " + object);
System.out.println("descriptor.getWriteMethod() = " + descriptor.getWriteMethod());
System.out.println("descriptor.getWriteMethod().getParameterTypes() = " + descriptor.getWriteMethod().getParameterTypes());
descriptor.getWriteMethod().invoke(tasker, object);
} catch (Exception e) {
tasker.updateMessage(java.util.logging.Level.SEVERE, "属性设置失败: " + name + " = " + value);
}
} else if (type.equals("progress")) {
long current = args.get(0).asLong();
long total = args.get(1).asLong();
tasker.updateProgress(current, total);
} else {
tasker.updateMessage(java.util.logging.Level.INFO, "未知的消息类型: " + node.toString());
}
} else {
tasker.updateMessage(java.util.logging.Level.INFO, "未知的消息: " + node.toString());
}
}
public void updateMessage(Level level, String message) {
tasker.updateMessage(level, message);
}
}