package com.robonobo.mina.message.handlers;
import java.io.IOException;
import java.io.InputStream;
import com.robonobo.core.api.proto.CoreApi.Node;
import com.robonobo.mina.message.MessageHolder;
import com.robonobo.mina.message.proto.MinaProtocol.ReqConn;
public class ReqConnHandler extends AbstractMessageHandler {
@Override
public void handleMessage(MessageHolder mh) {
ReqConn rc = (ReqConn) mh.getMessage();
if(rc.getToNodeId().equals(mina.getMyNodeId())) {
// Make a ControlConnection to this host
// TODO: #CC limits
Node fromNode = rc.getFromNode();
if(mina.getNetMgr().canConnectTo(fromNode))
mina.getCCM().makeCCAsRequestedTo(fromNode);
else
log.error("Received ReqConn from node "+fromNode.getId()+", but I cannot connect to them");
}
else if(mina.getConfig().isSupernode())
mina.getCCM().sendOrForwardMessageTo("ReqConn", rc, rc.getToNodeId());
else
log.error(mh.getFromCC()+" sent me reqconn: "+rc+", but I am not a supernode");
}
@Override
public ReqConn parse(String cmdName, InputStream is) throws IOException {
return ReqConn.newBuilder().mergeFrom(is).build();
}
}