Feng 10 лет назад
Родитель
Сommit
9c53d2d3ba
3 измененных файлов с 12 добавлено и 3 удалено
  1. 7 1
      src/emqttd_client.erl
  2. 4 1
      src/emqttd_protocol.erl
  3. 1 1
      src/emqttd_session.erl

+ 7 - 1
src/emqttd_client.erl

@@ -34,7 +34,7 @@
 -include("emqttd_protocol.hrl").
 
 %% API Function Exports
--export([start_link/2, info/1, kick/1, subscribe/2]).
+-export([start_link/2, session/1, info/1, kick/1, subscribe/2]).
 
 -behaviour(gen_server).
 
@@ -58,6 +58,9 @@
 start_link(SockArgs, PktOpts) ->
     {ok, proc_lib:spawn_link(?MODULE, init, [[SockArgs, PktOpts]])}.
 
+session(CPid) ->
+    gen_server:call(CPid, session).
+
 info(CPid) ->
     gen_server:call(CPid, info, infinity).
 
@@ -87,6 +90,9 @@ init([SockArgs = {Transport, Sock, _SockFun}, PacketOpts]) ->
                                     proto_state  = ProtoState}),
     gen_server:enter_loop(?MODULE, [], State, 10000).
 
+handle_call(session, _From, State = #state{proto_state = ProtoState}) ->
+    {reply, emqttd_protocol:session(ProtoState), State};
+
 handle_call(info, _From, State = #state{conn_name = ConnName,
                                         proto_state = ProtoState}) ->
     {reply, [{conn_name, ConnName} | emqttd_protocol:info(ProtoState)], State};

+ 4 - 1
src/emqttd_protocol.erl

@@ -34,7 +34,7 @@
 -include("emqttd_protocol.hrl").
 
 %% API
--export([init/3, info/1, clientid/1, client/1]).
+-export([init/3, info/1, clientid/1, client/1, session/1]).
 
 -export([received/2, send/2, redeliver/2, shutdown/2]).
 
@@ -122,6 +122,9 @@ client(#proto_state{client_id          = ClientId,
                  ws_initial_headers = WsInitialHeaders,
                  connected_at       = Time}.
 
+session(#proto_state{session = Session}) ->
+    Session.
+
 %% CONNECT – Client requests a connection to a Server
 
 %%A Client can only send the CONNECT Packet once over a Network Connection. 

+ 1 - 1
src/emqttd_session.erl

@@ -223,7 +223,7 @@ unsubscribe(SessPid, Topics) ->
 %%%=============================================================================
 
 init([CleanSess, ClientId, ClientPid]) ->
-    process_flag(trap_exit, true),
+    %process_flag(trap_exit, true),
     QEnv    = emqttd:env(mqtt, queue),
     SessEnv = emqttd:env(mqtt, session),
     Session = #session{