anchor.diff:  
   send_command(Pid, Command, Payload) ->
   	gen_server:cast(Pid, {command, Command, Payload}).
  +
  +% and so we can issue commands more easily.  The general idiom is:
  +% function(RoomPid, IssuingClientInfo, Command[, Arg1..., ArgN]) ->
  +% 	das res
  +
  +leave(Room, Client) ->
  +	gen_server:call(Room, {leave, Client}, ?timeout).
  +
  +join(Room, Client) ->
  +	join(Room, Client, "").
  +
  +join(Room, Client, Password) ->
  +	gen_server:call(Room, {join, Client, Password}, ?timeout).
  +
  +kick(Room, Client, Target) ->
  +	gen_server:call(Room, {kick, Client, Target}, ?timeout).
  +
  +mute(Room, Client, Target) ->
  +	gen_server:call(Room, {mute, Client, Target}, ?timeout).
  +
  +unmute(Room, Client, Target) ->
  +	gen_server:call(Room, {unmute, Client, Target}, ?timeout).
  +
  +message(Room, Client, Message) ->
  +	gen_server:call(Room, {message, Client, Message}, ?timeout).
  +
  +
   
   %% ==================================================================
   %% gen_server
  
positive.code: 
  -record(state, {
  	name :: string(),
  	chatters :: [pid()],
  	controllers :: [pid()],
  	mode = user :: 'user' | 'system' | 'plugin',
  	mode_meta
  }).
  
negative.code: -module(post_chatroom).
  -behaviour(gen_server).
  
  -define(timeout, 1000).
  
  -include_lib("precursors_server/include/log.hrl").
  -include_lib("precursors_server/include/pre_client.hrl").
  %% API
  