浏览代码

publish willmsg when normal exit

Feng Lee 10 年之前
父节点
当前提交
7bfc673c28
共有 1 个文件被更改,包括 8 次插入1 次删除
  1. 8 1
      apps/emqttd/src/emqttd_protocol.erl

+ 8 - 1
apps/emqttd/src/emqttd_protocol.erl

@@ -302,10 +302,16 @@ shutdown(duplicate_id, _State) ->
 shutdown(_, #proto_state{clientid = undefined}) ->
     ignore;
 
-shutdown(normal, #proto_state{peername = Peername, clientid = ClientId}) ->
+shutdown(normal, #proto_state{peername = Peername, clientid = ClientId, will_msg = WillMsg}) ->
 	lager:info([{client, ClientId}], "Client ~s@~s: normal shutdown",
             [ClientId, emqttd_net:format(Peername)]),
     try_unregister(ClientId),
+    if
+        WillMsg =/= undefined ->
+            send_willmsg(ClientId, WillMsg);
+        true ->
+            ok
+    end,
     emqttd_broker:foreach_hooks(client_disconnected, [normal, ClientId]);
 
 shutdown(Error, #proto_state{peername = Peername, clientid = ClientId, will_msg = WillMsg}) ->
@@ -331,6 +337,7 @@ send_willmsg(_ClientId, undefined) ->
     ignore;
 %%TODO:should call session...
 send_willmsg(ClientId, WillMsg) -> 
+    lager:info("Client ~s send willmsg: ~p", [ClientId, WillMsg]),
     emqttd_pubsub:publish(ClientId, WillMsg).
 
 start_keepalive(0) -> ignore;