Mercurial > hg > blitz_stable
view src/org/dancres/blitz/remote/transport/ClientSessionHandler.java @ 32:243c74d599bf
Update ignores
author | Dan Creswell <dan.creswell@gmail.com> |
---|---|
date | Sat, 12 Jun 2010 10:41:47 +0100 |
parents | 3dc0c5604566 |
children |
line wrap: on
line source
package org.dancres.blitz.remote.transport; import java.rmi.RemoteException; import edu.emory.mathcs.backport.java.util.concurrent.ConcurrentHashMap; import org.apache.mina.common.IoHandlerAdapter; import org.apache.mina.common.IoSession; import org.apache.mina.common.ByteBuffer; import org.apache.mina.util.SessionLog; /** */ public class ClientSessionHandler extends IoHandlerAdapter { private ConcurrentHashMap _requests = new ConcurrentHashMap(); public void messageReceived(IoSession session, Object aMessage) { Message myMessage = (Message) aMessage; int myConversationId = myMessage.getConversationId(); // System.err.println("Got response: " + myConversationId); Ticket myTicket = (Ticket) _requests.get(new Integer(myConversationId)); if (myTicket != null) myTicket.postResponse(myMessage); } public void exceptionCaught(IoSession session, Throwable cause) { SessionLog.warn(session, "Server error, disconnecting...", cause); session.close(); } Ticket getTicket(int aConversationId) { Ticket myTicket = new Ticket(aConversationId); _requests.put(new Integer(aConversationId), myTicket); return myTicket; } class Ticket { private int _conversationId; private Message _message; Ticket(int aConversationId) { _conversationId = aConversationId; } void postResponse(Message aMessage) { synchronized(this) { _message = aMessage; notify(); } } Message getResponse(long aWait) throws RemoteException { try { synchronized(this) { if (_message == null) { wait(aWait); } return _message; } } catch(InterruptedException anIE) { throw new RemoteException("interrupted", anIE); } finally { _requests.remove(new Long(_conversationId)); } } } }