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).
-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, [
binary,
@ -41,15 +41,17 @@
-type listener() :: {atom(), inet:port_number(), [esockd:option()]}.
%%------------------------------------------------------------------------------
%% @doc
%% Start emqttd application.
%%
%% @doc Start emqttd application.
%% @end
%%------------------------------------------------------------------------------
-spec start() -> ok | {error, any()}.
start() ->
application:start(emqttd).
%%------------------------------------------------------------------------------
%% @doc Open Listeners
%% @end
%%------------------------------------------------------------------------------
-spec open([listener()] | listener()) -> any().
open(Listeners) when is_list(Listeners) ->
[open(Listener) || Listener <- Listeners];
@ -72,6 +74,17 @@ open(Protocol, Port, Options) ->
MFArgs = {emqttd_client, start_link, [PktOpts]},
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) ->
case rpc:call(Node, erlang, whereis, [emqttd]) of
{badrpc, _} -> false;

View File

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