ignore duplicated subscriptions

This commit is contained in:
Feng 2015-09-11 14:18:30 +08:00
parent c8a121ff08
commit ea70389cf7
1 changed files with 31 additions and 27 deletions

View File

@ -282,8 +282,11 @@ prioritise_info(Msg, _Len, _State) ->
handle_call({subscribe, TopicTable0}, _From, Session = #session{client_id = ClientId, handle_call({subscribe, TopicTable0}, _From, Session = #session{client_id = ClientId,
subscriptions = Subscriptions}) -> subscriptions = Subscriptions}) ->
case TopicTable0 -- Subscriptions of
[] ->
{reply, {ok, [Qos || {_, Qos} <- TopicTable0]}, Session};
_ ->
TopicTable = emqttd_broker:foldl_hooks('client.subscribe', [ClientId], TopicTable0), TopicTable = emqttd_broker:foldl_hooks('client.subscribe', [ClientId], TopicTable0),
%% subscribe first and don't care if the subscriptions have been existed %% subscribe first and don't care if the subscriptions have been existed
{ok, GrantedQos} = emqttd_pubsub:subscribe(TopicTable), {ok, GrantedQos} = emqttd_pubsub:subscribe(TopicTable),
@ -311,7 +314,8 @@ handle_call({subscribe, TopicTable0}, _From, Session = #session{client_id = Clie
[{Topic, Qos} | Acc] [{Topic, Qos} | Acc]
end end
end, Subscriptions, TopicTable), end, Subscriptions, TopicTable),
{reply, {ok, GrantedQos}, Session#session{subscriptions = Subscriptions1}}; {reply, {ok, GrantedQos}, Session#session{subscriptions = Subscriptions1}}
end;
handle_call({unsubscribe, Topics0}, _From, Session = #session{client_id = ClientId, handle_call({unsubscribe, Topics0}, _From, Session = #session{client_id = ClientId,
subscriptions = Subscriptions}) -> subscriptions = Subscriptions}) ->