# HG changeset patch # User one # Date 1258865945 -32400 # Node ID 04bd4ae97e7c462e5d964b8fcde4939253a1c94d # Parent 805645cf5ec01d956f94c411d5f716445e627a1d RingTopology is finished. diff -r 805645cf5ec0 -r 04bd4ae97e7c src/fdl/test/topology/MetaProtocolEngine.java --- a/src/fdl/test/topology/MetaProtocolEngine.java Tue Nov 17 18:19:39 2009 +0900 +++ b/src/fdl/test/topology/MetaProtocolEngine.java Sun Nov 22 13:59:05 2009 +0900 @@ -54,6 +54,7 @@ protected void initSendServer() { sendLocalHostName(); connectSendServers(); + sendLocalHostName(); } protected void initTopologyManager() { diff -r 805645cf5ec0 -r 04bd4ae97e7c src/fdl/test/topology/TopologyManagerEngine.java --- a/src/fdl/test/topology/TopologyManagerEngine.java Tue Nov 17 18:19:39 2009 +0900 +++ b/src/fdl/test/topology/TopologyManagerEngine.java Sun Nov 22 13:59:05 2009 +0900 @@ -46,6 +46,7 @@ makeConnection(); acceptNewNode(); sendLastToken(); + checkConnection(); } // これを継承して、 Topology を形成 @@ -91,4 +92,22 @@ } } + protected void checkConnection() { + for (int i = 0; i < nodes.length; i++) { + PSXReply reply; + reply = manager.in(manageId); + do { + try { + manager.sync(1); + } catch (IOException e) { + e.printStackTrace(); + } + } while (!reply.ready()); + ByteBuffer data = reply.getData(); + String ack = new String(data.array()); + System.out.println("[DEBUG] ConnectedHost: " + ack); + } + System.out.println("[DEBUG] AllConnected"); + } + } diff -r 805645cf5ec0 -r 04bd4ae97e7c src/fdl/test/topology/ring/RingMetaProtocolEngine.java --- a/src/fdl/test/topology/ring/RingMetaProtocolEngine.java Tue Nov 17 18:19:39 2009 +0900 +++ b/src/fdl/test/topology/ring/RingMetaProtocolEngine.java Sun Nov 22 13:59:05 2009 +0900 @@ -2,6 +2,8 @@ import java.io.IOException; import java.nio.ByteBuffer; +import java.text.SimpleDateFormat; +import java.util.Date; import fdl.MetaLinda; import fdl.PSXLinda; @@ -21,10 +23,13 @@ public class RingMetaProtocolEngine extends MetaProtocolEngine { private int relayNum; private static int relayId = 10; - + private Date startTime, endTime; + private SimpleDateFormat DF = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss.SSS"); public RingMetaProtocolEngine(MetaLinda ml, String managerHostName, int relayNum) { super(ml, managerHostName); this.relayNum = relayNum; + startTime = null; + endTime = null; } @Override public void mainLoop() { @@ -37,10 +42,14 @@ private void relayTuple(int tupleId) { while (true) { ByteBuffer data = receiveToken(tupleId); + if (startTime == null) { + startTime = new Date(); + } if (relayNum == 0) { String token = new String(data.array()); if (!token.equals(lastToken)) { // TODO: 実験結果をManagerに伝えるなどの処理 + sendResult(); System.out.println("[Ring] relay finished: " + token); // 実験終了を各ノードにリレーで伝える sendToken(tupleId, ByteBuffer.wrap(lastToken.getBytes())); @@ -48,10 +57,23 @@ return; } sendToken(tupleId, data); + System.out.println("[DEBUG] Relay..."); relayNum--; } } + private void sendResult() { + this.endTime = new Date(); + Long resultTime = new Long(endTime.getTime() - startTime.getTime()); + ByteBuffer data = ByteBuffer.wrap(resultTime.toString().getBytes()); + manager.out(relayId, data); + try { + manager.sync(1); + } catch (IOException e) { + e.printStackTrace(); + } + } + private ByteBuffer receiveToken(int tupleId) { PSXReply reply = psxLocal.in(tupleId); do { diff -r 805645cf5ec0 -r 04bd4ae97e7c src/fdl/test/topology/ring/RingTopologyManagerEngine.java --- a/src/fdl/test/topology/ring/RingTopologyManagerEngine.java Tue Nov 17 18:19:39 2009 +0900 +++ b/src/fdl/test/topology/ring/RingTopologyManagerEngine.java Sun Nov 22 13:59:05 2009 +0900 @@ -1,9 +1,16 @@ package fdl.test.topology.ring; +import java.io.IOException; +import java.nio.ByteBuffer; +import java.text.SimpleDateFormat; +import java.util.Date; + import fdl.MetaLinda; +import fdl.PSXReply; import fdl.test.topology.TopologyManagerEngine; public class RingTopologyManagerEngine extends TopologyManagerEngine { + private int relayId = 10; // Constructor public RingTopologyManagerEngine(MetaLinda ml, int nodeNum) { @@ -12,12 +19,12 @@ public void mainLoop() { super.mainLoop(); - + startRelay(); + endRelay(); } protected void makeTopology() { super.makeTopology(); - startRelay(); } @Override protected void makeConnection() { @@ -28,9 +35,29 @@ } private void startRelay() { - - + String relayString = "test"; + ByteBuffer data = ByteBuffer.wrap(relayString.getBytes()); + nodes[0].linda.out(relayId, data); + try { + nodes[0].linda.sync(1); + } catch (IOException e) { + e.printStackTrace(); + } } + private void endRelay() { + PSXReply reply; + reply = manager.in(relayId); + do { + try { + manager.sync(1); + } catch (IOException e) { + e.printStackTrace(); + } + } while (!reply.ready()); + ByteBuffer data = reply.getData(); + String resultData = new String(data.array()); + System.out.println("[DEBUG] RelayTime: " + resultData); + } }