public void handleMsg(BaseMsg msg) throws Exception {
boolean trace = log.isTraceEnabled();
int msgType = msg.getMsgType();
if (trace)
log.trace("Begin handleMsg, msgType: " + msgType);
switch (msgType)
{
case m_setSpyDistributedConnection:
log.debug("Setting up the UILClientIL Connection");
ConnectionTokenMsg cmsg = (ConnectionTokenMsg) msg;
connectionToken = cmsg.getToken();
UILClientIL clientIL = (UILClientIL) connectionToken.clientIL;
clientIL.setSocketMgr(socketMgr);
socketMgr.sendReply(msg);
log.debug("The UILClientIL Connection is set up");
break;
case m_acknowledge:
AcknowledgementRequestMsg ackmsg = (AcknowledgementRequestMsg) msg;
AcknowledgementRequest ack = ackmsg.getAck();
server.acknowledge(connectionToken, ack);
// We send the reply although on newer clients it is ignored.
socketMgr.sendReply(msg);
break;
case m_addMessage:
AddMsg amsg = (AddMsg) msg;
server.addMessage(connectionToken, amsg.getMsg());
socketMgr.sendReply(msg);
break;
case m_browse:
BrowseMsg bmsg = (BrowseMsg) msg;
SpyMessage[] msgs = server.browse(connectionToken, bmsg.getDest(), bmsg.getSelector());
bmsg.setMessages(msgs);
socketMgr.sendReply(msg);
break;
case m_checkID:
CheckIDMsg idmsg = (CheckIDMsg) msg;
String ID = idmsg.getID();
server.checkID(ID);
if (connectionToken != null)
connectionToken.setClientID(ID);
socketMgr.sendReply(msg);
break;
case m_connectionClosing:
server.connectionClosing(connectionToken);
closed.set(true);
socketMgr.sendReply(msg);
socketMgr.stop();
break;
case m_createQueue:
CreateDestMsg cqmsg = (CreateDestMsg) msg;
Destination queue = server.createQueue(connectionToken, cqmsg.getName());
cqmsg.setDest(queue);
socketMgr.sendReply(msg);
break;
case m_createTopic:
CreateDestMsg ctmsg = (CreateDestMsg) msg;
Destination topic = server.createTopic(connectionToken, ctmsg.getName());
ctmsg.setDest(topic);
socketMgr.sendReply(msg);
break;
case m_deleteTemporaryDestination:
DeleteTemporaryDestMsg dtdmsg = (DeleteTemporaryDestMsg) msg;
SpyDestination tmpdest = dtdmsg.getDest();
server.deleteTemporaryDestination(connectionToken, tmpdest);
socketMgr.sendReply(msg);
break;
case m_getID:
GetIDMsg gidmsg = (GetIDMsg) msg;
String gid = server.getID();
if (connectionToken != null)
connectionToken.setClientID(gid);
gidmsg.setID(gid);
socketMgr.sendReply(msg);
break;
case m_getTemporaryQueue:
TemporaryDestMsg tqmsg = (TemporaryDestMsg) msg;
Destination tmpQueue = server.getTemporaryQueue(connectionToken);
tqmsg.setDest(tmpQueue);
socketMgr.sendReply(msg);
break;
case m_getTemporaryTopic:
TemporaryDestMsg ttmsg = (TemporaryDestMsg) msg;
Destination tmpTopic = server.getTemporaryTopic(connectionToken);
ttmsg.setDest(tmpTopic);
socketMgr.sendReply(msg);
break;
case m_receive:
ReceiveMsg rmsg = (ReceiveMsg) msg;
SpyMessage reply = server.receive(connectionToken, rmsg.getSubscriberID(), rmsg.getWait());
rmsg.setMessage(reply);
socketMgr.sendReply(msg);
break;
case m_setEnabled:
EnableConnectionMsg ecmsg = (EnableConnectionMsg) msg;
server.setEnabled(connectionToken, ecmsg.isEnabled());
socketMgr.sendReply(msg);
break;
case m_subscribe:
SubscribeMsg smsg = (SubscribeMsg) msg;
server.subscribe(connectionToken, smsg.getSubscription());
socketMgr.sendReply(msg);
break;
case m_transact:
TransactMsg tmsg = (TransactMsg) msg;
TransactionRequest trans = tmsg.getRequest();
server.transact(connectionToken, trans);
socketMgr.sendReply(msg);
break;
case m_recover:
RecoverMsg recmsg = (RecoverMsg) msg;
int flags = recmsg.getFlags();
if (server instanceof Recoverable)
{
Recoverable recoverable = (Recoverable) server;
Xid[] xids = recoverable.recover(connectionToken, flags);
recmsg.setXids(xids);
socketMgr.sendReply(msg);
break;
}
throw new IllegalStateException("Invoker does not implement recoverable " + server);
case m_unsubscribe:
UnsubscribeMsg umsg = (UnsubscribeMsg) msg;
server.unsubscribe(connectionToken, umsg.getSubscriptionID());
socketMgr.sendReply(msg);
break;
case m_destroySubscription:
DeleteSubscriptionMsg dsmsg = (DeleteSubscriptionMsg) msg;
DurableSubscriptionID dsub = dsmsg.getSubscriptionID();
server.destroySubscription(connectionToken, dsub);
socketMgr.sendReply(msg);
break;
case m_checkUser:
CheckUserMsg cumsg = (CheckUserMsg) msg;
String uid = server.checkUser(cumsg.getUsername(), cumsg.getPassword());
cumsg.setID(uid);
cumsg.clearPassword();
socketMgr.sendReply(msg);
break;
case m_ping:
PingMsg ping = (PingMsg) msg;
server.ping(connectionToken, ping.getTime());
break;
case m_pong:
break;
// Ignore, this is an old client, that still wants to send us replies
case m_receiveRequest:
break;
case m_authenticate:
CheckUserMsg cumsg2 = (CheckUserMsg) msg;
String sessionID = server.authenticate(cumsg2.getUsername(), cumsg2.getPassword());
cumsg2.setID(sessionID);
cumsg2.clearPassword();
socketMgr.sendReply(msg);
break;
default:
throw new RemoteException("Unknown msgType: "+msgType);
}
if (trace)
log.trace("End handleMsg, msgType: " + msgType);
}
The callback from the SocketManager |