Przeglądaj źródła

Merge branch 'develop' of https://github.com/emqtt/emqttd into develop

HuangDan 8 lat temu
rodzic
commit
6f28c36fef
2 zmienionych plików z 45 dodań i 5 usunięć
  1. 31 1
      src/emqttd_cli.erl
  2. 14 4
      src/emqttd_ctl.erl

+ 31 - 1
src/emqttd_cli.erl

@@ -477,8 +477,38 @@ listeners([]) ->
                         end, Info)
             end, esockd:listeners());
 
+listeners(["reopen", Proto, ListenOn1]) ->
+    ListenOn = case string:tokens(ListenOn1, ":") of
+        [Port]     -> list_to_integer(Port);
+        [IP, Port] -> {IP, list_to_integer(Port)}
+    end,
+    case emqttd_app:restart_listener({list_to_atom(Proto), ListenOn, []}) of
+        {ok, _Pid} ->
+            io:format("Reopen ~p listen on ~p successfully.~n",
+                      [list_to_atom(Proto), list_to_atom(ListenOn1)]);
+        {error, Error} ->
+            io:format("Failed to reopen ~p listen on ~p, error:~p~n",
+                      [list_to_atom(Proto), list_to_atom(ListenOn1) ,Error])
+    end;
+
+listeners(["close", Proto, ListenOn1]) ->
+    ListenOn = case string:tokens(ListenOn1, ":") of
+        [Port]     -> list_to_integer(Port);
+        [IP, Port] -> {IP, list_to_integer(Port)}
+    end,
+    case emqttd_app:stop_listener({list_to_atom(Proto), ListenOn, []}) of
+        ok ->
+            io:format("Close ~p on ~p successfully.~n",
+                      [list_to_atom(Proto), list_to_atom(ListenOn1)]);
+        {error, Error} ->
+            io:format("Failed to close ~p on ~p, error:~p~n",
+                      [list_to_atom(Proto), list_to_atom(ListenOn1) ,Error])
+    end;
+
 listeners(_) ->
-    ?PRINT_CMD("listeners", "List listeners").
+    ?USAGE([{"listeners",                       "List listeners"},
+            {"listeners reopen <Proto> <Port>", "Reopen a listener port"},
+            {"listeners close  <Proto> <Port>", "Close  a listener port"}]).
 
 %%--------------------------------------------------------------------
 %% Dump ETS

+ 14 - 4
src/emqttd_ctl.erl

@@ -64,14 +64,24 @@ cast(Msg) -> gen_server:cast(?SERVER, Msg).
 
 %% @doc Run a command
 -spec(run([string()]) -> any()).
-run([]) -> usage();
+run([]) -> usage(), ok;
 
-run(["help"]) -> usage();
+run(["help"]) -> usage(), ok;
 
 run([CmdS|Args]) ->
     case lookup(list_to_atom(CmdS)) of
-        [{Mod, Fun}] -> Mod:Fun(Args);
-        [] -> usage() 
+        [{Mod, Fun}] ->
+            try Mod:Fun(Args) of
+               _ -> ok
+            catch
+                _:Reason ->
+                    io:format("Reason:~p, get_stacktrace:~p~n",
+                              [Reason, erlang:get_stacktrace()]),
+                    {error, Reason}
+            end;
+        [] ->
+            usage(),
+            {error, cmd_not_found}
     end.
 
 %% @doc Lookup a command