From 8694a825d31d01f1c6facfa6dd09885fc75ab5ab Mon Sep 17 00:00:00 2001 From: Ery Lee Date: Sat, 18 Apr 2015 18:36:57 +0800 Subject: [PATCH] route --- apps/emqttd/src/emqttd_router.erl | 37 ++++++++++++++++++++++++++++++- 1 file changed, 36 insertions(+), 1 deletion(-) diff --git a/apps/emqttd/src/emqttd_router.erl b/apps/emqttd/src/emqttd_router.erl index 6999abf21..d06ea379e 100644 --- a/apps/emqttd/src/emqttd_router.erl +++ b/apps/emqttd/src/emqttd_router.erl @@ -25,6 +25,8 @@ -include_lib("emqtt/include/emqtt.hrl"). +-include("emqttd.hrl"). + -behaviour(gen_server). -define(SERVER, ?MODULE). @@ -35,12 +37,32 @@ %%Router Chain--> --->In Out<--- -export([route/2]). +%% Mnesia Callbacks +-export([mnesia/1]). + +-boot_mnesia({mnesia, [boot]}). +-copy_mnesia({mnesia, [copy]}). + %% gen_server Function Exports -export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]). -record(state, {}). +%%%============================================================================= +%%% Mnesia callbacks +%%%============================================================================= +mnesia(boot) -> + %% topic table + ok = emqttd_mnesia:create_table(topic, [ + {type, bag}, + {ram_copies, [node()]}, + {record_name, mqtt_topic}, + {attributes, record_info(fields, mqtt_topic)}]). + +mnesia(copy) -> + ok = emqttd_mnesia:copy_table(topic), + %%%============================================================================= %%% API %%%============================================================================= @@ -71,7 +93,20 @@ route(From, Msg) -> %%% gen_server callbacks %%%============================================================================= init([]) -> - {ok, #state{}, hibernate}. + TabId = ets:new(?CLIENT_TABLE, [bag, + named_table, + public, + {read_concurrency, true}]), + %% local subscriber table, not shared with other nodes + ok = emqttd_mnesia:create_table(subscriber, [ + {type, bag}, + {ram_copies, [node()]}, + {record_name, mqtt_subscriber}, + {attributes, record_info(fields, mqtt_subscriber)}, + {index, [subpid]}, + {local_content, true}]); + + {ok, #state{tab = TabId}}. handle_call(_Request, _From, State) -> {reply, ok, State}.