package com.robonobo.mina.message.handlers; import java.io.IOException; import java.io.InputStream; import java.util.List; import java.util.Map; import com.google.protobuf.GeneratedMessage; import com.robonobo.core.api.proto.CoreApi.Node; import com.robonobo.mina.message.MessageHolder; import com.robonobo.mina.message.proto.MinaProtocol.GotSource; import com.robonobo.mina.message.proto.MinaProtocol.MyDetailsChanged; import com.robonobo.mina.network.ControlConnection; public class MyDetailsChangedHandler extends AbstractMessageHandler { @Override public void handleMessage(MessageHolder mh) { MyDetailsChanged mdc = (MyDetailsChanged) mh.getMessage(); Node n = mdc.getNode(); if(!mh.getFromCC().updateDetails(n)) return; if(mina.getConfig().isSupernode()) { Map<String, List<Node>> seekersToUpdate = mina.getSupernodeMgr().notifyDetailsChanged(n); for (String streamId : seekersToUpdate.keySet()) { GotSource gs = GotSource.newBuilder().setStreamId(streamId).addNode(n).build(); List<Node> seekers = seekersToUpdate.get(streamId); for (Node sn : seekers) { ControlConnection cc = mina.getCCM().getCCWithId(sn.getId()); if(cc != null) cc.sendMessage("GotSource", gs); } } } } @Override public GeneratedMessage parse(String cmdName, InputStream is) throws IOException { return MyDetailsChanged.newBuilder().mergeFrom(is).build(); } }