Think of the Registry as a telephone operator. It is responsible for noting who's logged in and passing messages to each user.
import java.lang.*;
import java.util.*;
public class TalkerRegistry extends java.lang.Object
{
private static Vector vTalkers;
public static synchronized boolean register(Handler handler)
{
if (vTalkers == null)
{
vTalkers = new Vector();
}
boolean bReturn = handler.register(vTalkers);
return bReturn;
}
public static synchronized void unregister(Handler handler)
{
if (vTalkers == null)
{
vTalkers = new Vector();
}
handler.unregister(vTalkers);
}
public static synchronized boolean isRegistered(Handler handler)
{
if (vTalkers == null)
{
vTalkers = new Vector();
}
if (vTalkers.indexOf(handler) != -1)
{
return true;
}
else
{
return false;
}
}
public static void postMessage(Handler handler, String strMessage)
{
if (vTalkers == null)
{
vTalkers = new Vector();
}
Object obj;
Telnet tObj, tHandler;
for (Enumeration enHandlers = vTalkers.elements(); enHandlers.hasMoreElements(); )
{
obj = enHandlers.nextElement();
if (handler instanceof Telnet)
{
tHandler = (Telnet)handler;
if (obj instanceof Telnet)
{
tObj = (Telnet)obj;
tObj.postMessage(new Message(new String("["+tHandler+"] "+strMessage+"\n")));
}
}
// no other cases defined
}
}
}
Note that the Talker Registry also requires that the Handler
class define a boolean register(Vector) and void
unregister(Vector) method. The two lines to add to the Handler class
are below:
public abstract boolean register(Vector vRegistry);
public abstract void unregister(Vector vRegistry);