% chat_dispatcher.erl % Copyright 2005 Michael Leonhard % All Rights Reserved. % http://tamale.net/ -module(chat_dispatcher). -export([dispatcher_start/0, connected/0, disconnected/0, dispatch/1]). connected() -> chat_dispatcher ! {connected, self()}. disconnected() -> catch chat_dispatcher ! {disconnected, self() }. dispatch(String) -> chat_dispatcher ! {message, String}. dispatcher_start() -> io:fwrite("dispatcher ~w: starting~n", [self()]), register(chat_dispatcher, self()), dispatcher_loop([]), io:fwrite("dispatcher ~w: stopping~n", [self()]), exit. dispatcher_loop(LiasonPIDs) -> receive stop -> exit; {connected, PID} -> io:fwrite("dispatcher: adding ~w~n", [PID]), LiasonPIDs2 = [PID | LiasonPIDs], dispatcher_loop(LiasonPIDs2); {disconnected, PID} -> io:fwrite("dispatcher: deleting ~w~n", [PID]), LiasonPIDs2 = LiasonPIDs -- [PID], dispatcher_loop(LiasonPIDs2); {message, String} -> io:fwrite("Message \"~s\"~n", [String]), lists:foreach( fun(PID) -> chat_liason:send_message(String,PID) end, LiasonPIDs), dispatcher_loop(LiasonPIDs) end.