From 41471da2e80c4f76aa988f24d97a79092a9af31b Mon Sep 17 00:00:00 2001 From: Ery Lee Date: Mon, 19 Jan 2015 22:08:53 +0800 Subject: [PATCH] 0.3.1 fix topic match --- CHANGELOG.md | 9 +++++++++ apps/emqtt/include/emqtt_topic.hrl | 26 +++++++++++++------------- apps/emqtt/src/emqtt_pubsub.erl | 4 ++-- 3 files changed, 24 insertions(+), 15 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 54cf67e1c..e7671ab7d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,4 @@ + eMQTT ChangeLog ================== @@ -6,6 +7,14 @@ v0.3.1-beta (2015-01-24) Feature: HTTP POST API to support 'qos', 'retain' parameters +Feature: $SYS system topics support + +Change: Rewrite emqtt_topic.erl, use '', '#', '+' to replace <<"">>, <<"#">>, <<"+">> + +Change: fix emqtt_pubsub.erl to match '#', '+' + +Tests: emqtt_topic_tests.erl add more test cases + v0.3.0-alpha (2015-01-18) ------------------------ diff --git a/apps/emqtt/include/emqtt_topic.hrl b/apps/emqtt/include/emqtt_topic.hrl index 4cb9e4dda..5bd171d37 100644 --- a/apps/emqtt/include/emqtt_topic.hrl +++ b/apps/emqtt/include/emqtt_topic.hrl @@ -1,5 +1,5 @@ %%----------------------------------------------------------------------------- -%% Copyright (c) 2015, Feng Lee +%% Copyright (c) 2012-2015, Feng Lee %% %% Permission is hereby granted, free of charge, to any person obtaining a copy %% of this software and associated documentation files (the "Software"), to deal @@ -24,32 +24,32 @@ %% Core PubSub Topic %%------------------------------------------------------------------------------ -record(topic, { - name :: binary(), - node :: node() + name :: binary(), + node :: node() }). -type topic() :: #topic{}. -record(topic_subscriber, { - topic :: binary(), - qos = 0 :: non_neg_integer(), - subpid :: pid() + topic :: binary(), + qos = 0 :: non_neg_integer(), + subpid :: pid() }). -record(topic_trie_node, { - node_id :: binary(), - edge_count = 0 :: non_neg_integer(), - topic :: binary() + node_id :: binary() | atom(), + edge_count = 0 :: non_neg_integer(), + topic :: binary() }). -record(topic_trie_edge, { - node_id :: binary(), - word :: binary() | char() + node_id :: binary() | atom(), + word :: binary() | atom() }). -record(topic_trie, { - edge :: #topic_trie_edge{}, - node_id :: binary() + edge :: #topic_trie_edge{}, + node_id :: binary() | atom() }). %%------------------------------------------------------------------------------ diff --git a/apps/emqtt/src/emqtt_pubsub.erl b/apps/emqtt/src/emqtt_pubsub.erl index c05e344f1..5736f7a83 100644 --- a/apps/emqtt/src/emqtt_pubsub.erl +++ b/apps/emqtt/src/emqtt_pubsub.erl @@ -300,10 +300,10 @@ trie_match(NodeId, [W|Words], ResAcc) -> [#topic_trie{node_id=ChildId}] -> trie_match(ChildId, Words, Acc); [] -> Acc end - end, 'trie_match_#'(NodeId, ResAcc), [W, <<"+">>]). + end, 'trie_match_#'(NodeId, ResAcc), [W, '+']). 'trie_match_#'(NodeId, ResAcc) -> - case mnesia:read(topic_trie, #topic_trie_edge{node_id=NodeId, word = <<"#">>}) of + case mnesia:read(topic_trie, #topic_trie_edge{node_id=NodeId, word = '#'}) of [#topic_trie{node_id=ChildId}] -> mnesia:read(topic_trie_node, ChildId) ++ ResAcc; [] ->