package uk.ac.vamsas.client.simpleclient; import org.apache.commons.logging.*; import uk.ac.vamsas.client.picking.IMessageHandler; import uk.ac.vamsas.client.picking.IPickManager; import uk.ac.vamsas.client.picking.Message; import uk.ac.vamsas.client.picking.SocketManager; /** * Blocking message handler * @author * */ public class SimplePickManager implements IPickManager { private Log log = LogFactory.getLog(SimplePickManager.class); SocketManager manager=null; SimplePickManager(SocketManager manager) { this.manager=manager; final SimplePickManager me=this; /** * add a handler that calls the SimplePickManager message handler */ manager.registerMessageHandler(new IMessageHandler() { public void handleMessage(Message message) { me.handleMessage(message); } }); } /** * when false, messages are queued in a FIFO until thread can restart. */ private boolean passThru=true; /** * the client apps message handler */ IMessageHandler pickHandler=null; public void registerMessageHandler(IMessageHandler handler) { pickHandler=handler; } public synchronized void sendMessage(Message message) { manager.sendMessage(message); } /** * pass message onto the Apps handler, or wait until * passThru is true before passing message on. * @param message */ protected synchronized void handleMessage(Message message) { while (!passThru) { try { Thread.sleep(5); } catch (InterruptedException e) {}; } if (passThru) pickHandler.handleMessage(message); } /** * @return true if messages are being passed to handlers */ public boolean isPassThru() { return passThru; } /** * @param true to pass messages on to handlers, false to hold messages in queue */ public void setPassThru(boolean passThru) { this.passThru = passThru; } public void shutdown() { manager.shutdown(); } }