Skip to content

Commit 7cb4eb3

Browse files
committed
规整iot代码,解耦SessionManager与IotDescriptor的关联。方便下一步处理设备mcp相关逻辑
1 parent a2f18a3 commit 7cb4eb3

File tree

9 files changed

+30
-99
lines changed

9 files changed

+30
-99
lines changed

src/main/java/com/xiaozhi/communication/common/ChatSession.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
package com.xiaozhi.communication.common;
22

3-
import com.xiaozhi.communication.domain.IotDescriptor;
3+
import com.xiaozhi.communication.domain.iot.IotDescriptor;
44
import com.xiaozhi.dialogue.llm.tool.ToolsSessionHolder;
55
import com.xiaozhi.entity.SysDevice;
66
import com.xiaozhi.entity.SysRole;

src/main/java/com/xiaozhi/communication/common/SessionManager.java

Lines changed: 1 addition & 77 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,5 @@
11
package com.xiaozhi.communication.common;
22

3-
import com.xiaozhi.communication.domain.IotDescriptor;
43
import com.xiaozhi.dialogue.llm.tool.ToolsSessionHolder;
54
import com.xiaozhi.entity.SysDevice;
65
import com.xiaozhi.entity.SysRole;
@@ -17,7 +16,6 @@
1716
import java.time.Duration;
1817
import java.time.Instant;
1918
import java.util.List;
20-
import java.util.Map;
2119
import java.util.concurrent.ConcurrentHashMap;
2220
import java.util.concurrent.Executors;
2321
import java.util.concurrent.ScheduledExecutorService;
@@ -159,7 +157,7 @@ public void closeSession(ChatSession chatSession) {
159157
logger.info("会话已关闭 - SessionId: {} SessionType: {}", chatSession.getSessionId(), chatSession.getClass().getSimpleName());
160158
} catch (Exception e) {
161159
logger.error("清理会话资源时发生错误 - SessionId: {}",
162-
chatSession.getSessionId(), e);
160+
chatSession.getSessionId(), e);
163161
}
164162
}
165163

@@ -179,48 +177,6 @@ public void registerDevice(String sessionId, SysDevice device) {
179177
}
180178
}
181179

182-
/**
183-
* 注册设备iot部件描述信息
184-
*
185-
* @param sessionId 会话ID
186-
* @param iotDescriptor iot部件描述信息
187-
*/
188-
public void registerIot(String sessionId, IotDescriptor iotDescriptor) {
189-
ChatSession chatSession = sessions.get(sessionId);
190-
if(chatSession != null){
191-
// 先检查是否已存在该sessionId的配置
192-
Map<String, IotDescriptor> existingIotDescriptors = chatSession.getIotDescriptors();
193-
existingIotDescriptors.put(iotDescriptor.getName(), iotDescriptor);
194-
logger.debug("设备iot部件已注册 - SessionId: {}, Iot: {}", sessionId, iotDescriptor.getName());
195-
}
196-
}
197-
198-
/**
199-
* 注册会话的function_call
200-
*
201-
* @param sessionId 会话ID
202-
* @param toolsSessionHolder function_call工具
203-
*/
204-
public void registerFunctionSessionHolder(String sessionId, ToolsSessionHolder toolsSessionHolder) {
205-
ChatSession chatSession = sessions.get(sessionId);
206-
if(chatSession != null){
207-
chatSession.setFunctionSessionHolder(toolsSessionHolder);
208-
}
209-
}
210-
211-
/**
212-
* 注册设备iot部件描述信息
213-
*
214-
* @param sessionId 会话ID
215-
* @param roles 可用角色列表
216-
*/
217-
public void registerRoles(String sessionId, List<SysRole> roles) {
218-
ChatSession chatSession = sessions.get(sessionId);
219-
if(chatSession != null){
220-
chatSession.setSysRoleList(roles);
221-
}
222-
}
223-
224180
/**
225181
* 设置会话完成后是否关闭
226182
*
@@ -309,38 +265,6 @@ public SysDevice getDeviceConfig(String sessionId) {
309265
return null;
310266
}
311267

312-
/**
313-
* 获取Iot部件描述信息
314-
*
315-
* @param sessionId 会话ID
316-
* @return 设备配置
317-
*/
318-
public Map<String, IotDescriptor> getAllIotDescriptor(String sessionId) {
319-
ChatSession chatSession = sessions.get(sessionId);
320-
if (chatSession != null) {
321-
return chatSession.getIotDescriptors();
322-
}
323-
return null;
324-
}
325-
326-
/**
327-
* 获取Iot部件描述信息
328-
*
329-
* @param sessionId 会话ID
330-
* @param iotName IoT名称
331-
* @return 设备配置
332-
*/
333-
public IotDescriptor getIotDescriptor(String sessionId, String iotName) {
334-
ChatSession chatSession = sessions.get(sessionId);
335-
if (chatSession != null) {
336-
Map<String, IotDescriptor> descriptors = chatSession.getIotDescriptors();
337-
if (descriptors != null) {
338-
return descriptors.get(iotName);
339-
}
340-
}
341-
return null;
342-
}
343-
344268
/**
345269
* 获取会话的function holder
346270
*

src/main/java/com/xiaozhi/communication/domain/IotMessage.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
package com.xiaozhi.communication.domain;
22

3-
import java.util.List;
4-
3+
import com.xiaozhi.communication.domain.iot.IotDescriptor;
4+
import com.xiaozhi.communication.domain.iot.IotState;
55
import lombok.Data;
66
import lombok.EqualsAndHashCode;
77

8+
import java.util.List;
9+
810
@Data
911
@EqualsAndHashCode(callSuper = true)
1012
public final class IotMessage extends Message {

src/main/java/com/xiaozhi/communication/domain/IotDescriptor.java renamed to src/main/java/com/xiaozhi/communication/domain/iot/IotDescriptor.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.xiaozhi.communication.domain;
1+
package com.xiaozhi.communication.domain.iot;
22

33
import com.xiaozhi.utils.JsonUtil;
44
import lombok.Data;

src/main/java/com/xiaozhi/communication/domain/IotMethod.java renamed to src/main/java/com/xiaozhi/communication/domain/iot/IotMethod.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.xiaozhi.communication.domain;
1+
package com.xiaozhi.communication.domain.iot;
22

33
import com.xiaozhi.utils.JsonUtil;
44
import lombok.Data;

src/main/java/com/xiaozhi/communication/domain/IotMethodParameter.java renamed to src/main/java/com/xiaozhi/communication/domain/iot/IotMethodParameter.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.xiaozhi.communication.domain;
1+
package com.xiaozhi.communication.domain.iot;
22

33
import com.xiaozhi.utils.JsonUtil;
44
import lombok.Data;

src/main/java/com/xiaozhi/communication/domain/IotProperty.java renamed to src/main/java/com/xiaozhi/communication/domain/iot/IotProperty.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.xiaozhi.communication.domain;
1+
package com.xiaozhi.communication.domain.iot;
22

33
import com.xiaozhi.utils.JsonUtil;
44
import lombok.Data;

src/main/java/com/xiaozhi/communication/domain/IotState.java renamed to src/main/java/com/xiaozhi/communication/domain/iot/IotState.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package com.xiaozhi.communication.domain;
1+
package com.xiaozhi.communication.domain.iot;
22

33
import lombok.Data;
44

src/main/java/com/xiaozhi/dialogue/service/IotService.java

Lines changed: 19 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,9 @@
33
import com.fasterxml.jackson.databind.node.JsonNodeType;
44
import com.xiaozhi.communication.common.ChatSession;
55
import com.xiaozhi.communication.common.SessionManager;
6-
import com.xiaozhi.communication.domain.*;
6+
import com.xiaozhi.communication.domain.iot.IotDescriptor;
7+
import com.xiaozhi.communication.domain.iot.IotProperty;
8+
import com.xiaozhi.communication.domain.iot.IotState;
79
import com.xiaozhi.dialogue.llm.tool.ToolCallStringResultConverter;
810
import com.xiaozhi.dialogue.llm.tool.ToolsSessionHolder;
911
import com.xiaozhi.utils.JsonUtil;
@@ -16,7 +18,10 @@
1618
import org.springframework.ai.tool.metadata.ToolMetadata;
1719
import org.springframework.stereotype.Service;
1820

19-
import java.util.*;
21+
import java.util.Collections;
22+
import java.util.HashMap;
23+
import java.util.List;
24+
import java.util.Map;
2025

2126
/**
2227
* Iot服务 - 负责iot处理和WebSocket发送
@@ -39,8 +44,9 @@ public class IotService {
3944
* @param descriptors iot设备描述消息内容
4045
*/
4146
public void handleDeviceDescriptors(String sessionId, List<IotDescriptor> descriptors) {
47+
ChatSession chatSession = sessionManager.getSession(sessionId);
4248
for (var descriptor : descriptors) {
43-
sessionManager.registerIot(sessionId, descriptor);
49+
chatSession.getIotDescriptors().put(descriptor.getName(), descriptor);
4450
registerFunctionTools(sessionId, descriptor);
4551
}
4652
}
@@ -52,14 +58,13 @@ public void handleDeviceDescriptors(String sessionId, List<IotDescriptor> descri
5258
* @param states iot状体消息内容
5359
*/
5460
public void handleDeviceStates(String sessionId, List<IotState> states) {
55-
61+
ChatSession chatSession = sessionManager.getSession(sessionId);
5662
for (var state : states) {
57-
var iotDescriptor = sessionManager.getIotDescriptor(sessionId, state.getName());
63+
var iotDescriptor = chatSession.getIotDescriptors().get(state.getName());
5864
if (iotDescriptor == null) {
5965
logger.error("[{}] - SessionId: {} 未找到设备: {} 的描述信息", TAG, sessionId, state.getName());
6066
continue;
6167
}
62-
6368
for (var stateProp : state.getState().entrySet()) {
6469
var propName = stateProp.getKey();
6570
var propValue = stateProp.getValue();
@@ -83,8 +88,8 @@ public void handleDeviceStates(String sessionId, List<IotState> states) {
8388
* @return 属性值,如未找到则返回null
8489
*/
8590
public Object getIotStatus(String sessionId, String iotName, String propertyName) {
86-
IotDescriptor iotDescriptor = sessionManager.getIotDescriptor(sessionId, iotName);
87-
91+
ChatSession chatSession = sessionManager.getSession(sessionId);
92+
var iotDescriptor = chatSession.getIotDescriptors().get(iotName);
8893
if (iotDescriptor != null) {
8994
IotProperty property = iotDescriptor.getProperties().get(propertyName);
9095
if (property != null) {
@@ -108,8 +113,8 @@ public Object getIotStatus(String sessionId, String iotName, String propertyName
108113
* @return 是否设置成功
109114
*/
110115
public boolean setIotStatus(String sessionId, String iotName, String propertyName, Object value) {
111-
IotDescriptor iotDescriptor = sessionManager.getIotDescriptor(sessionId, iotName);
112-
116+
ChatSession chatSession = sessionManager.getSession(sessionId);
117+
var iotDescriptor = chatSession.getIotDescriptors().get(iotName);
113118
if (iotDescriptor != null) {
114119
IotProperty property = iotDescriptor.getProperties().get(propertyName);
115120
if (property != null) {
@@ -151,14 +156,14 @@ public boolean sendIotMessage(String sessionId, String iotName, String methodNam
151156
try {
152157
logger.info("[{}] - SessionId: {}, message send iotName: {}, methodName: {}, parameters: {}", TAG, sessionId,
153158
iotName, methodName, JsonUtil.toJson(parameters));
154-
ChatSession session = sessionManager.getSession(sessionId);
155-
IotDescriptor iotDescriptor = sessionManager.getIotDescriptor(sessionId, iotName);
159+
ChatSession chatSession = sessionManager.getSession(sessionId);
160+
IotDescriptor iotDescriptor = chatSession.getIotDescriptors().get(iotName);
156161
if (iotDescriptor != null && iotDescriptor.getMethods().containsKey(methodName)) {
157162
Map<String, Object> command = new HashMap<>();
158163
command.put("name", iotName);
159164
command.put("method", methodName);
160165
command.put("parameters", parameters);
161-
messageService.sendIotCommandMessage(session, Collections.singletonList(command));
166+
messageService.sendIotCommandMessage(chatSession, Collections.singletonList(command));
162167
return true;
163168
} else {
164169
logger.error("[{}] - SessionId: {}, {} method not found: {}", TAG, sessionId, iotName, methodName);
@@ -308,4 +313,4 @@ private void registerMethodFunctionTools(String sessionId, ToolsSessionHolder to
308313
}
309314
}
310315

311-
}
316+
}

0 commit comments

Comments
 (0)