anchor.diff:  broadcast(Room,Message) ->
   	gen_server:call(Room, { broadcast, Message }).
   
  -list(Room) ->
  -	gen_server:call(Room, list).
  +users(Room) ->
  +	gen_server:call(Room, users).
  +
  +bans(Room) ->
  +	gen_server:call(Room, bans).
  +
  +peers(Room) ->
  +	gen_server:call(Room, peers).
   
   close(Room) ->
   	gen_server:call(Room, close).
  
positive.code: 	end;
  
  handle_call( { leave, Id }, _From, Room = #room{ users = Users }) ->
  	{ reply, ok, Room#room{ users = lists:delete(Id,Users) }};
  
  handle_call( { ban, Id }, _From, Room = #room{ users = Users, bans = Bans }) ->
  	{ reply, ok, Room#room{ 
  		users = lists:delete(Id,Users),
  		bans = [ Id | Bans ] }};
  
  handle_call( { announce, Id }, _From, Room = #room{ users = Users }) ->
  	{ reply, ok, Room };
  
  handle_call( { message, Id, Message }, _From, Room = #room{ users = Users }) ->
  	{ reply, ok, Room };
  
  handle_call( { broadcast, Message }, _From, Room = #room{ users = Users }) ->
  	{ reply, ok, Room };
  
  handle_call( list, _From, Room = #room{ users = Users }) ->
  	{ reply, ok, Room };
  
  handle_call( close, _From, Room ) ->
  	{ reply, ok, Room };
  
  handle_call( _Message, _From, Room ) ->
  	{ reply, ok, Room }.
  
negative.code: 	{ ok, Room }.	
  
  
  broadcast(Socket, #user{ ipaddr = IPAddr, port = Port }, Message ) ->
  	gen_udp:send(Socket,IPAddr,Port,Message).
  
  relay(Socket, #peer{ ipaddr = IPAddr, port = Port }, Message ) ->
  	gen_udp:send(Socket,IPAddr,Port,Message).
  
  member(IPAddr,Port,Users) ->
  	[] /= lists:filtermap( fun(#user{ ipaddr = I, port = P }) -> 
  		(I =:= IPAddr) and (P =:= Port) end, Users).
  	
  except(IPAddr,Port,Users) ->
  	lists:filtermap( fun(#user{ ipaddr = I, port = P }) ->
  		(I /= IPAddr) or (P /= Port) end, Users ).
  