Mercurial > hg > Members > shoshi > distributedalgorithm
view src/main/java/suikwasha/distributedalgorithm/algorithms/naive/NaiveStandbyAlgorithm.java @ 0:38a110b13db1
added SimpleDistributedAlgorithmFramework.
added NaiveAlgorithm
added ChangRobertsAlgorithm
added PertersonAlgorithm
author | suikwasha |
---|---|
date | Fri, 19 Oct 2012 00:05:41 +0900 |
parents | |
children |
line wrap: on
line source
package suikwasha.distributedalgorithm.algorithms.naive; import java.util.Iterator; import suikwasha.distributedalgorithm.framework.Algorithm; import suikwasha.distributedalgorithm.framework.Context; import suikwasha.distributedalgorithm.framework.Message; import suikwasha.distributedalgorithm.framework.Port; import static suikwasha.distributedalgorithm.algorithms.naive.NaiveStartAlgorithm.toByteBuffer; /* * this standby algorithm for NAIVE using UnidirectedRing * Port1 : receiving only * Port2 : sending only */ public class NaiveStandbyAlgorithm implements Algorithm { private long max; private final long num; public NaiveStandbyAlgorithm(long _num) { max = -1; num = _num; } public long getValue() { return max; } public void execute(Context _c) { Iterator<Port> ports = _c.getPorts().iterator(); Port receiving = ports.next(); Port sending = ports.next(); Message receivedMessage = null; try{ receivedMessage = receiving.blockingReceive(); }catch(InterruptedException _e){ Thread.currentThread().interrupt(); _e.printStackTrace(); } long value = receivedMessage.getMessage().getLong(); max = Math.max(num,max); Message m1 = receivedMessage.newMessage(toByteBuffer(num)); Message m2 = receivedMessage.newMessage(toByteBuffer(value)); sending.send(m1); sending.send(m2); while(true){ try{ receivedMessage = receiving.blockingReceive(); }catch(InterruptedException _e){ _e.printStackTrace(); Thread.currentThread().interrupt(); return; } value = receivedMessage.getMessage().getLong(); if(max == value){ Message newMessage = receivedMessage.newMessage(toByteBuffer(max)); sending.send(newMessage); return; } max = Math.max(max,value); Message newMessage = receivedMessage.newMessage(toByteBuffer(value)); sending.send(newMessage); } } }