From 740e35833b1a87425b136cd4161ea73d0d25c736 Mon Sep 17 00:00:00 2001 From: anlicheng <244108715@qq.com> Date: Wed, 7 May 2025 21:27:42 +0800 Subject: [PATCH] fix host --- apps/iot/src/iot_host.erl | 43 ++++++++++++++++++--------------------- 1 file changed, 20 insertions(+), 23 deletions(-) diff --git a/apps/iot/src/iot_host.erl b/apps/iot/src/iot_host.erl index dc2cf27..9c31a80 100644 --- a/apps/iot/src/iot_host.erl +++ b/apps/iot/src/iot_host.erl @@ -296,34 +296,31 @@ handle_event({call, From}, {attach_channel, _}, _, State = #state{uuid = UUID, c {keep_state, State, [{reply, From, {error, <<"channel existed">>}}]}; %% 重新加载设备信息 -handle_event({call, From}, {reload_device, DeviceUUID}, _, State) -> - case iot_device_sup:ensured_device_started(DeviceUUID) of - {ok, DevicePid} -> - iot_device:reload(DevicePid), - {keep_state, State, [{reply, From, ok}]}; - {error, Reason} -> - {keep_state, State, [{reply, From, {error, Reason}}]} +handle_event({call, From}, {reload_device, DeviceUUID}, _, State = #state{device_map = DeviceMap}) -> + case maps:find(DeviceUUID, DeviceMap) of + error -> + {keep_state, State, [{reply, From, {error, <<"device not found">>}}]}; + {ok, Device} -> + case iot_device:reload(Device) of + error -> + {keep_state, State#state{device_map = maps:remove(Device, DeviceMap)}, [{reply, From, {error, <<"reload device error">>}}]}; + {ok, NDevice} -> + {keep_state, State#state{device_map = maps:put(DeviceUUID, NDevice, DeviceMap)}, [{reply, From, ok}]} + end end; %% 删除设备 -handle_event({call, From}, {delete_device, DeviceUUID}, _, State) -> - case iot_device:get_pid(DeviceUUID) of - undefined -> - ok; - DevicePid when is_pid(DevicePid) -> - iot_device_sup:delete_device(DeviceUUID) - end, - {keep_state, State, [{reply, From, ok}]}; +handle_event({call, From}, {delete_device, DeviceUUID}, _, State = #state{device_map = DeviceMap}) -> + {keep_state, State#state{device_map = maps:remove(DeviceUUID, DeviceMap)}, [{reply, From, ok}]}; %% 激活设备 -handle_event({call, From}, {activate_device, DeviceUUID, Auth}, _, State) -> - case iot_device_sup:ensured_device_started(DeviceUUID) of - {ok, DevicePid} -> - iot_device:auth(DevicePid, Auth), - - {keep_state, State, [{reply, From, ok}]}; - {error, Reason} -> - {keep_state, State, [{reply, From, {error, Reason}}]} +handle_event({call, From}, {activate_device, DeviceUUID, Auth}, _, State = #state{device_map = DeviceMap}) -> + case maps:find(DeviceUUID, DeviceMap) of + error -> + {keep_state, State, [{reply, From, {error, <<"device not found">>}}]}; + {ok, Device} -> + NDevice = iot_device:auth(Device, Auth), + {keep_state, State#state{device_map = maps:put(DeviceUUID, NDevice, DeviceMap)}, [{reply, From, ok}]} end; %% 需要将消息转换成json格式然后再处理, 需要在host进程里面处理, 数据带有props,服务端暂时未用到