Mercurial > hg > Members > shoshi > distributedalgorithm
view src/main/java/suikwasha/distributedalgorithm/link/ReliableLinkBuilder.java @ 2:8e1f63faa2fd default tip
added Franklin's Algorithm
author | suikwasha |
---|---|
date | Tue, 23 Oct 2012 16:49:26 +0900 |
parents | 38a110b13db1 |
children |
line wrap: on
line source
package suikwasha.distributedalgorithm.link; import java.util.concurrent.LinkedBlockingQueue; import suikwasha.distributedalgorithm.framework.Link; import suikwasha.distributedalgorithm.framework.LinkBuilder; import suikwasha.distributedalgorithm.framework.Message; import suikwasha.distributedalgorithm.framework.Port; public class ReliableLinkBuilder implements LinkBuilder { public Link build() { return new LinkImpl(); } private static class LinkImpl implements Link { private final Port port1,port2; public LinkImpl() { LinkedBlockingQueue<Message> queue1 = new LinkedBlockingQueue<Message>(); LinkedBlockingQueue<Message> queue2 = new LinkedBlockingQueue<Message>(); port1 = new PortImpl(queue1,queue2); port2 = new PortImpl(queue2,queue1); } public Port getPort1() { return port1; } public Port getPort2() { return port2; } } private static class PortImpl implements Port { private final LinkedBlockingQueue<Message> in; private final LinkedBlockingQueue<Message> out; public PortImpl(LinkedBlockingQueue<Message> _in,LinkedBlockingQueue<Message> _out) { in = _in; out = _out; } public void send(Message _mes) { out.add(_mes); } public Message blockingReceive() throws InterruptedException { return in.take(); } public Message tryReceive() { return in.poll(); } public boolean isReady() { return !in.isEmpty(); } } }