anchor.diff:  -spec init(params()) -> {noreply, context(), timeout()}.
   init(Params) ->
       random:seed(erlang:now()),
  -    mqtt_server:init(Params ++ [
  -                                {data, [
  -                                        {objectid, objectid:objectid()}
  -                                       ]}
  -                               ]).
  +    mqtt_server:init(Params ++ [{data, [{objectid, objectid:objectid()}]}]).
   
   persist_message(Message,Context,Session,ThreadId,Body,Data) ->
       {_, ObjectId} = proplists:lookup(objectid, Data),
  
positive.code: 
  %% mqtt_protocol context
  -record(?CONTEXT, {
             client_id :: binary(),
             auth :: module(),
             session :: pid(),
             valid_keep_alive = {1800, 3600} :: {MinSec :: integer(), MaxSec :: integer()},
             when_overloaded = drop :: drop | accept,
             overloaded=false,
             load_balancing = none,
             timeout = 10000 :: timeout(),
             timestamp :: timestamp(),
             data = [] :: [proplists:property()]
            }).
  
  
  -type context() :: #?CONTEXT{}.
  
negative.code:     end.
  
  update_status(Status,UserId,ClientId) ->
      Transaction = fun() ->
              case mnesia:wread({mqtt_presence,UserId}) of
                  [P=#mqtt_presence{clients=Clients,last_status=PrevStatus}] ->
                      NewClients = sets:add_element(ClientId,Clients),
  