From a1ed02499c873b8afb012343a95a1459f8c772e0 Mon Sep 17 00:00:00 2001 From: Feng Lee Date: Sun, 21 Aug 2016 16:21:45 +0800 Subject: [PATCH] mqtt_topic --- include/emqttd.hrl | 21 +++++++++++---------- src/emqttd_router.erl | 21 +++++++++++---------- 2 files changed, 22 insertions(+), 20 deletions(-) diff --git a/include/emqttd.hrl b/include/emqttd.hrl index 57fc55cb6..0059d11a3 100644 --- a/include/emqttd.hrl +++ b/include/emqttd.hrl @@ -36,16 +36,6 @@ -define(SHARE, <<"$share/">>). %% Shared Topic -%%-------------------------------------------------------------------- -%% MQTT Topic -%%-------------------------------------------------------------------- --record(mqtt_topic, { - topic :: binary(), - flags :: [retained | static] - }). - --type mqtt_topic() :: #mqtt_topic{}. - %%-------------------------------------------------------------------- %% PubSub %%-------------------------------------------------------------------- @@ -54,6 +44,17 @@ -define(PUBSUB(PS), (PS =:= publish orelse PS =:= subscribe)). +%%-------------------------------------------------------------------- +%% MQTT Topic +%%-------------------------------------------------------------------- + +-record(mqtt_topic, { + topic :: binary(), + flags = [] :: [retained | static] +}). + +-type(mqtt_topic() :: #mqtt_topic{}). + %%-------------------------------------------------------------------- %% MQTT Client %%-------------------------------------------------------------------- diff --git a/src/emqttd_router.erl b/src/emqttd_router.erl index d3948a1b6..a58e599e0 100644 --- a/src/emqttd_router.erl +++ b/src/emqttd_router.erl @@ -53,20 +53,19 @@ %%-------------------------------------------------------------------- mnesia(boot) -> + ok = emqttd_mnesia:create_table(mqtt_topic, [ + {ram_copies, [node()]}, + {record_name, mqtt_topic}, + {attributes, record_info(fields, mqtt_topic)}]), ok = emqttd_mnesia:create_table(mqtt_route, [ {type, bag}, {ram_copies, [node()]}, {record_name, mqtt_route}, - {attributes, record_info(fields, mqtt_route)}]), - - ok = emqttd_mnesia:create_table(topic, [ - {ram_copies, [node()]}, - {record_name, mqtt_topic}, - {attributes, record_info(fields, mqtt_topic)}]); + {attributes, record_info(fields, mqtt_route)}]); mnesia(copy) -> - ok = emqttd_mnesia:copy_table(mqtt_route, ram_copies), - ok = emqttd_mnesia:copy_table(topic). + ok = emqttd_mnesia:copy_table(topic), + ok = emqttd_mnesia:copy_table(mqtt_route, ram_copies). %%-------------------------------------------------------------------- %% Start the Router @@ -126,7 +125,8 @@ add_route_(Route = #mqtt_route{topic = Topic}) -> true -> emqttd_trie:insert(Topic); false -> ok end, - mnesia:write(Route); + mnesia:write(Route), + mnesia:write(#mqtt_topic{topic = Topic}); Records -> case lists:member(Route, Records) of true -> ok; @@ -164,7 +164,8 @@ del_route_(Route = #mqtt_route{topic = Topic}) -> case emqttd_topic:wildcard(Topic) of true -> emqttd_trie:delete(Topic); false -> ok - end; + end, + mnesia:delete({mqtt_topic, Topic}); _More -> %% Remove route only mnesia:delete_object(Route)