Просмотр исходного кода

Merge pull request #868 from emqtt/emq20

Merge PR #864 from grutabow
Feng Lee 9 лет назад
Родитель
Сommit
153ed22da5
1 измененных файлов с 12 добавлено и 5 удалено
  1. 12 5
      src/emqttd_protocol.erl

+ 12 - 5
src/emqttd_protocol.erl

@@ -130,9 +130,12 @@ handle({subscribe, RawTopicTable}, ProtoState = #proto_state{client_id = ClientI
 handle({unsubscribe, RawTopics}, ProtoState = #proto_state{client_id = ClientId,
 handle({unsubscribe, RawTopics}, ProtoState = #proto_state{client_id = ClientId,
                                                            username  = Username,
                                                            username  = Username,
                                                            session   = Session}) ->
                                                            session   = Session}) ->
-    {ok, TopicTable} = emqttd:run_hooks('client.unsubscribe',
-                                        [ClientId, Username], parse_topics(RawTopics)),
-    emqttd_session:unsubscribe(Session, TopicTable),
+    case emqttd:run_hooks('client.unsubscribe', [ClientId, Username], parse_topics(RawTopics)) of
+        {ok, TopicTable} ->
+            emqttd_session:unsubscribe(Session, TopicTable);
+        {stop, _} ->
+            ok
+    end,
     {ok, ProtoState}.
     {ok, ProtoState}.
 
 
 process(Packet = ?CONNECT_PACKET(Var), State0) ->
 process(Packet = ?CONNECT_PACKET(Var), State0) ->
@@ -243,8 +246,12 @@ process(?UNSUBSCRIBE_PACKET(PacketId, []), State) ->
 
 
 process(?UNSUBSCRIBE_PACKET(PacketId, RawTopics), State = #proto_state{
 process(?UNSUBSCRIBE_PACKET(PacketId, RawTopics), State = #proto_state{
         client_id = ClientId, username = Username, session = Session}) ->
         client_id = ClientId, username = Username, session = Session}) ->
-    {ok, TopicTable} = emqttd:run_hooks('client.unsubscribe', [ClientId, Username], parse_topics(RawTopics)),
-    emqttd_session:unsubscribe(Session, TopicTable),
+    case emqttd:run_hooks('client.unsubscribe', [ClientId, Username], parse_topics(RawTopics)) of
+        {ok, TopicTable} ->
+            emqttd_session:unsubscribe(Session, TopicTable);
+        {stop, _} ->
+            ok
+    end,
     send(?UNSUBACK_PACKET(PacketId), State);
     send(?UNSUBACK_PACKET(PacketId), State);
 
 
 process(?PACKET(?PINGREQ), State) ->
 process(?PACKET(?PINGREQ), State) ->