anchor.diff:                               client_pid   = ClientPid,
                                packet_opts  = PktOpts,
                                parser       = emqttd_parser:new(PktOpts)}).
  +
  +subscribe(CPid, TopicTable) ->
  +    gen_server:cast(CPid, {subscribe, TopicTable}).
   
   %%------------------------------------------------------------------------------
   %% @private
  
positive.code: 
  handle_info({redeliver, {?PUBREL, PacketId}}, State = #client_state{proto_state = ProtoState}) ->
      {ok, ProtoState1} = emqttd_protocol:redeliver({?PUBREL, PacketId}, ProtoState),
      {noreply, State#client_state{proto_state = ProtoState1}};
  
  handle_info({subscribe, TopicTable}, State = #client_state{proto_state = ProtoState}) ->
      {ok, ProtoState1} = emqttd_protocol:handle({subscribe, TopicTable}, ProtoState),
      {noreply, State#client_state{proto_state = ProtoState1}};
  
  handle_info({stop, duplicate_id, _NewPid}, State = #client_state{proto_state = ProtoState}) ->
  
negative.code: -include("emqttd_protocol.hrl").
  
  %% API Exports
  -export([start_link/1, ws_loop/3, subscribe/2]).
  
  -behaviour(gen_server).
  
  