package com.robonobo.mina.message.handlers; import java.io.IOException; import java.io.InputStream; import org.apache.commons.logging.Log; import com.robonobo.mina.message.MessageHolder; import com.robonobo.mina.message.proto.MinaProtocol.StartSource; import com.robonobo.mina.network.BCPair; import com.robonobo.mina.network.ControlConnection; public class StartSourceHandler extends AbstractMessageHandler { @Override public void handleMessage(MessageHolder mh) { StartSource ss = (StartSource) mh.getMessage(); ControlConnection cc = mh.getFromCC(); String sid = ss.getStreamId(); BCPair bcp = cc.getBCPair(sid); if(bcp != null) { // Errot - best thing is to shut everything down, let them start again Log log = mina.getLogger(getClass()); log.error("Error: asked to start providing stream "+sid+" to "+cc.getNodeId()+", but I am already broadcasting that stream to them"); bcp.die(); return; } if(mina.getConfig().isAgoric() && !mina.getSellMgr().haveActiveAccount(cc.getNodeId())) { Log log = mina.getLogger(getClass()); log.error("Error: asked to start providing stream "+sid+" to "+cc.getNodeId()+", but they do not have an active account"); cc.close("You asked for a stream without opening an account"); return; } mina.getStreamMgr().broadcastTo(sid, cc, ss.getEp(), ss.getPageList()); } @Override public StartSource parse(String cmdName, InputStream is) throws IOException { return StartSource.newBuilder().mergeFrom(is).build(); } }