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

Merge pull request #2833 from emqx/update_code

Update emqx_channel.erl
tigercl 6 лет назад
Родитель
Сommit
9f7cc80c1a
1 измененных файлов с 9 добавлено и 13 удалено
  1. 9 13
      src/emqx_channel.erl

+ 9 - 13
src/emqx_channel.erl

@@ -335,25 +335,21 @@ handle_in(?PACKET(?PINGREQ), Channel) ->
 
 handle_in(?DISCONNECT_PACKET(RC, Properties), Channel = #channel{session = Session, protocol = Protocol}) ->
     OldInterval = emqx_session:info(expiry_interval, Session),
-    Interval = maps:get('Session-Expiry-Interval', case Properties of
-                                                       undefined -> #{};
-                                                       _ -> Properties
-                                                   end, OldInterval),
+    Interval = get_property('Session-Expiry-Interval', Properties, OldInterval),
     case OldInterval =:= 0 andalso Interval =/= OldInterval of
         true ->
             handle_out({disconnect, ?RC_PROTOCOL_ERROR}, Channel);
         false ->
-            NChannel = ensure_disconnected(case RC of
-                                               ?RC_SUCCESS -> 
-                                                   Channel#channel{protocol = emqx_protocol:clear_will_msg(Protocol),
-                                                                   session = emqx_session:update_expiry_interval(Interval, Session)};
-                                               _ -> Channel#channel{session = emqx_session:update_expiry_interval(Interval, Session)}
-                                           end),
+            Channel1 = case RC of
+                           ?RC_SUCCESS -> Channel#channel{protocol = emqx_protocol:clear_will_msg(Protocol)};
+                           _ -> Channel
+                       end,
+            Channel2 = ensure_disconnected(Channel1#channel{session = emqx_session:update_expiry_interval(Interval, Session)}),
             case Interval of
                 ?UINT_MAX ->
-                    {ok, ensure_timer(will_timer, NChannel)};
+                    {ok, ensure_timer(will_timer, Channel2)};
                 Int when Int > 0 ->
-                    {ok, ensure_timer([will_timer, expire_timer], NChannel)};
+                    {ok, ensure_timer([will_timer, expire_timer], Channel2)};
                 _Other ->
                     Reason = case RC of
                                  ?RC_SUCCESS -> normal;
@@ -361,7 +357,7 @@ handle_in(?DISCONNECT_PACKET(RC, Properties), Channel = #channel{session = Sessi
                                      Ver = emqx_protocol:info(proto_ver, Protocol),
                                      emqx_reason_codes:name(RC, Ver)
                              end,
-                    {stop, {shutdown, Reason}, NChannel}
+                    {stop, {shutdown, Reason}, Channel2}
             end
     end;