close listeners

This commit is contained in:
Feng Lee 2015-04-22 00:14:52 +08:00
parent b857f0c2c0
commit f7d44f88f1
2 changed files with 23 additions and 8 deletions

View File

@ -26,9 +26,9 @@
%%%----------------------------------------------------------------------------- %%%-----------------------------------------------------------------------------
-module(emqttd). -module(emqttd).
-author('feng@emqtt.io'). -author("Feng Lee <feng@emqtt.io>").
-export([start/0, open/1, is_running/1]). -export([start/0, open/1, close/1, is_running/1]).
-define(MQTT_SOCKOPTS, [ -define(MQTT_SOCKOPTS, [
binary, binary,
@ -41,15 +41,17 @@
-type listener() :: {atom(), inet:port_number(), [esockd:option()]}. -type listener() :: {atom(), inet:port_number(), [esockd:option()]}.
%%------------------------------------------------------------------------------ %%------------------------------------------------------------------------------
%% @doc %% @doc Start emqttd application.
%% Start emqttd application.
%%
%% @end %% @end
%%------------------------------------------------------------------------------ %%------------------------------------------------------------------------------
-spec start() -> ok | {error, any()}. -spec start() -> ok | {error, any()}.
start() -> start() ->
application:start(emqttd). application:start(emqttd).
%%------------------------------------------------------------------------------
%% @doc Open Listeners
%% @end
%%------------------------------------------------------------------------------
-spec open([listener()] | listener()) -> any(). -spec open([listener()] | listener()) -> any().
open(Listeners) when is_list(Listeners) -> open(Listeners) when is_list(Listeners) ->
[open(Listener) || Listener <- Listeners]; [open(Listener) || Listener <- Listeners];
@ -72,6 +74,17 @@ open(Protocol, Port, Options) ->
MFArgs = {emqttd_client, start_link, [PktOpts]}, MFArgs = {emqttd_client, start_link, [PktOpts]},
esockd:open(Protocol, Port, emqttd_opts:merge(?MQTT_SOCKOPTS, Options) , MFArgs). esockd:open(Protocol, Port, emqttd_opts:merge(?MQTT_SOCKOPTS, Options) , MFArgs).
%%------------------------------------------------------------------------------
%% @doc Close Listeners
%% @end
%%------------------------------------------------------------------------------
-spec close([listener()] | listener()) -> any().
close(Listeners) when is_list(Listeners) ->
[close(Listener) || Listener <- Listeners];
close({Protocol, Port, _Options}) ->
esockd:close({Protocol, Port}).
is_running(Node) -> is_running(Node) ->
case rpc:call(Node, erlang, whereis, [emqttd]) of case rpc:call(Node, erlang, whereis, [emqttd]) of
{badrpc, _} -> false; {badrpc, _} -> false;

View File

@ -51,7 +51,7 @@ start(_StartType, _StartArgs) ->
emqttd_mnesia:start(), emqttd_mnesia:start(),
{ok, Sup} = emqttd_sup:start_link(), {ok, Sup} = emqttd_sup:start_link(),
start_servers(Sup), start_servers(Sup),
{ok, Listeners} = application:get_env(listen), {ok, Listeners} = application:get_env(listeners),
emqttd:open(Listeners), emqttd:open(Listeners),
register(emqttd, self()), register(emqttd, self()),
print_vsn(), print_vsn(),
@ -127,13 +127,15 @@ supervisor_spec(Name, Opts) ->
worker_spec(Name) -> worker_spec(Name) ->
{Name, {Name,
{Name, start_link, []}, {Name, start_link, []},
permanent, 5000, worker, [Name]}. permanent, 10000, worker, [Name]}.
worker_spec(Name, Opts) -> worker_spec(Name, Opts) ->
{Name, {Name,
{Name, start_link, [Opts]}, {Name, start_link, [Opts]},
permanent, 5000, worker, [Name]}. permanent, 10000, worker, [Name]}.
-spec stop(State :: term()) -> term(). -spec stop(State :: term()) -> term().
stop(_State) -> stop(_State) ->
{ok, Listeners} = application:get_env(listeners),
emqttd:close(Listeners),
ok. ok.