%%%------------------------------------------------------------------- %%% @author anlicheng %%% @copyright (C) 2024, %%% @doc %%% %%% @end %%% Created : 09. 4月 2024 14:28 %%%------------------------------------------------------------------- -module(network_handler). -author("anlicheng"). -include_lib("sdlan_pb.hrl"). %% API -export([handle_request/4]). handle_request("POST", "/network/create", _, #{<<"id">> := NetworkId}) when NetworkId > 0 -> case sdlan_network_sup:ensured_network_started(NetworkId) of {ok, Pid} when is_pid(Pid) -> {ok, 200, sdlan_util:json_data(<<"success">>)}; {error, Reason} -> logger:debug("[network_handler] create network: ~p, get error: ~p", [NetworkId, Reason]), {ok, 200, sdlan_util:json_error(-1, <<"error">>)} end; handle_request("POST", "/network/delete", _, #{<<"id">> := NetworkId}) when NetworkId > 0 -> case sdlan_network:get_pid(NetworkId) of undefined -> {ok, 200, sdlan_util:json_data(<<"success">>)}; NetworkPid when is_pid(NetworkPid) -> case sdlan_network_sup:delete_network(NetworkId) of ok -> {ok, 200, sdlan_util:json_data(<<"success">>)}; {error, Reason} -> logger:debug("[network_handler] delete network: ~p, get error: ~p", [NetworkId, Reason]), {ok, 200, sdlan_util:json_error(-1, <<"error">>)} end end; handle_request("POST", "/network/exit_node_control", _, #{<<"id">> := NetworkId, <<"action">> := Action, <<"client_id">> := ClientId, <<"remark">> := Remark, <<"timeout">> := Timeout}) when NetworkId > 0 -> case sdlan_network:get_pid(NetworkId) of undefined -> {ok, 200, sdlan_util:json_data(<<"network not found">>)}; NetworkPid when is_pid(NetworkPid) -> ReceiverPid = self(), SubCommand = {exit_node, #'SDLCommand.ExitNodeControl'{ action = Action, remark = Remark }}, case sdlan_network:command(NetworkPid, ReceiverPid, ClientId, SubCommand) of {error, Reason} -> {ok, 200, sdlan_util:json_error(-1, Reason)}; {ok, Ref} -> case sdlan_network:wait_command_ack(Ref, Timeout * 1000) of {ok, #'SDLCommandAck'{code = Code, message = Message}} -> case Code == 0 of true -> {ok, 200, sdlan_util:json_data(<<"success">>)}; false -> {ok, 200, sdlan_util:json_error(Code, Message)} end; {error, timeout} -> {ok, 200, sdlan_util:json_error(-1, <<"任务执行超时"/utf8>>)} end end end; handle_request(_, Path, _, _) -> Path1 = list_to_binary(Path), {ok, 200, sdlan_util:json_error(-1, <<"url: ", Path1/binary, " not found">>)}.