0.3.1 fix topic match

This commit is contained in:
Ery Lee 2015-01-19 22:08:53 +08:00
parent 537e18b376
commit 41471da2e8
3 changed files with 24 additions and 15 deletions

View File

@ -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)
------------------------

View File

@ -1,5 +1,5 @@
%%-----------------------------------------------------------------------------
%% Copyright (c) 2015, Feng Lee <feng@emqtt.io>
%% Copyright (c) 2012-2015, Feng Lee <feng@emqtt.io>
%%
%% 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()
}).
%%------------------------------------------------------------------------------

View File

@ -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;
[] ->