Ery Lee 11 лет назад
Родитель
Сommit
41471da2e8
3 измененных файлов с 24 добавлено и 15 удалено
  1. 9 0
      CHANGELOG.md
  2. 13 13
      apps/emqtt/include/emqtt_topic.hrl
  3. 2 2
      apps/emqtt/src/emqtt_pubsub.erl

+ 9 - 0
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)
 ------------------------
 

+ 13 - 13
apps/emqtt/include/emqtt_topic.hrl

@@ -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()
 }).
 
 %%------------------------------------------------------------------------------

+ 2 - 2
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;	
 	[] ->