فهرست منبع

match retained topics

Ery Lee 11 سال پیش
والد
کامیت
fdfdf494f5
1فایلهای تغییر یافته به همراه10 افزوده شده و 2 حذف شده
  1. 10 2
      apps/emqtt/src/emqtt_server.erl

+ 10 - 2
apps/emqtt/src/emqtt_server.erl

@@ -121,8 +121,16 @@ code_change(_OldVsn, State, _Extra) ->
 %% Internal Function Definitions
 %% ------------------------------------------------------------------
 match(Topics) ->
-    %%TODO: dirty_all_keys....
-    Topics.
+    RetainedTopics = mnesia:dirty_all_keys(?RETAINED_TAB),
+    lists:flatten([match(Topic, RetainedTopics) || Topic <- Topics]).
+
+match(Topic, RetainedTopics) ->
+    case emqtt_topic:type(Topic) of
+        direct -> %% FIXME
+            [Topic];
+        wildcard ->
+            [ T || T <- RetainedTopics, emqtt_topic:match(T, Topic) ]
+    end.
 
 retained_msg(#mqtt_retained{topic = Topic, qos = Qos, payload = Payload}) ->
     #mqtt_message { qos = Qos, retain = true, topic = Topic, payload = Payload }.