package kademlia.message; import java.io.DataInputStream; import java.io.IOException; import kademlia.KadConfiguration; import kademlia.KadServer; import kademlia.KademliaNode; import kademlia.dht.KademliaDHT; /** * Handles creating messages and receivers * * @author Joshua Kissoon * @since 20140202 */ public class MessageFactory implements KademliaMessageFactory { private final KademliaNode localNode; private final KademliaDHT dht; private final KadConfiguration config; public MessageFactory(KademliaNode local, KademliaDHT dht, KadConfiguration config) { this.localNode = local; this.dht = dht; this.config = config; } @Override public Message createMessage(byte code, DataInputStream in) throws IOException { switch (code) { case AcknowledgeMessage.CODE: return new AcknowledgeMessage(in); case ConnectMessage.CODE: return new ConnectMessage(in); case ContentMessage.CODE: return new ContentMessage(in); case ContentLookupMessage.CODE: return new ContentLookupMessage(in); case NodeLookupMessage.CODE: return new NodeLookupMessage(in); case NodeReplyMessage.CODE: return new NodeReplyMessage(in); case SimpleMessage.CODE: return new SimpleMessage(in); case StoreContentMessage.CODE: return new StoreContentMessage(in); default: //System.out.println(this.localNode + " - No Message handler found for message. Code: " + code); return new SimpleMessage(in); } } @Override public Receiver createReceiver(byte code, KadServer server) { switch (code) { case ConnectMessage.CODE: return new ConnectReceiver(server, this.localNode); case ContentLookupMessage.CODE: return new ContentLookupReceiver(server, this.localNode, this.dht, this.config); case NodeLookupMessage.CODE: return new NodeLookupReceiver(server, this.localNode, this.config); case StoreContentMessage.CODE: return new StoreContentReceiver(server, this.localNode, this.dht); default: //System.out.println("No receiver found for message. Code: " + code); return new SimpleReceiver(); } } }