package jp.co.cyberagent.stf.io;
import com.google.protobuf.InvalidProtocolBufferException;
import java.util.HashMap;
import java.util.Map;
import jp.co.cyberagent.stf.proto.Wire;
import jp.co.cyberagent.stf.query.AbstractResponder;
public class MessageRouter {
private Map<Wire.MessageType, AbstractResponder> responders = new HashMap<Wire.MessageType, AbstractResponder>();
private MessageWriter writer;
public MessageRouter(MessageWriter writer) {
this.writer = writer;
}
public void register(Wire.MessageType type, AbstractResponder responder) {
responders.put(type, responder);
}
public boolean route(Wire.Envelope envelope) throws InvalidProtocolBufferException {
AbstractResponder responder = responders.get(envelope.getType());
if (responder != null) {
writer.write(responder.respond(envelope));
return true;
}
return false;
}
public void cleanup() {
for (AbstractResponder responder : responders.values()) {
responder.cleanup();
}
}
}