From 30ac208bac5acb677b2359a3f21f028b5b10a2b3 Mon Sep 17 00:00:00 2001 From: Paul Buetow Date: Sat, 17 May 2008 15:55:43 +0000 Subject: renamed the package. --- sources/protocols/BerkelyTimeProtocol.java | 126 -------------------- sources/protocols/BroadcastSturmProtocol.java | 47 -------- sources/protocols/DummyProtocol.java | 45 -------- sources/protocols/ExternalTimeSyncProtocol.java | 62 ---------- sources/protocols/InternalTimeSyncProtocol.java | 69 ----------- sources/protocols/PingPongProtocol.java | 56 --------- sources/protocols/VSRegisteredProtocols.java | 12 +- .../implementations/BerkelyTimeProtocol.java | 127 +++++++++++++++++++++ .../implementations/BroadcastSturmProtocol.java | 48 ++++++++ .../protocols/implementations/DummyProtocol.java | 46 ++++++++ .../implementations/ExternalTimeSyncProtocol.java | 63 ++++++++++ .../implementations/InternalTimeSyncProtocol.java | 70 ++++++++++++ .../implementations/PingPongProtocol.java | 57 +++++++++ 13 files changed, 417 insertions(+), 411 deletions(-) delete mode 100644 sources/protocols/BerkelyTimeProtocol.java delete mode 100644 sources/protocols/BroadcastSturmProtocol.java delete mode 100644 sources/protocols/DummyProtocol.java delete mode 100644 sources/protocols/ExternalTimeSyncProtocol.java delete mode 100644 sources/protocols/InternalTimeSyncProtocol.java delete mode 100644 sources/protocols/PingPongProtocol.java create mode 100644 sources/protocols/implementations/BerkelyTimeProtocol.java create mode 100644 sources/protocols/implementations/BroadcastSturmProtocol.java create mode 100644 sources/protocols/implementations/DummyProtocol.java create mode 100644 sources/protocols/implementations/ExternalTimeSyncProtocol.java create mode 100644 sources/protocols/implementations/InternalTimeSyncProtocol.java create mode 100644 sources/protocols/implementations/PingPongProtocol.java (limited to 'sources/protocols') diff --git a/sources/protocols/BerkelyTimeProtocol.java b/sources/protocols/BerkelyTimeProtocol.java deleted file mode 100644 index 2e1166e..0000000 --- a/sources/protocols/BerkelyTimeProtocol.java +++ /dev/null @@ -1,126 +0,0 @@ -package protocols; - -import prefs.VSPrefs; -import core.VSMessage; - -import java.util.HashMap; - -public class BerkelyTimeProtocol extends VSProtocol { - /* Berkely Server variables */ - - /* Integer: Process ID, Long: Local time of the process */ - private HashMap processTimes = new HashMap(); - /* Integer: Process ID, Long: Time of receiving the response from the process */ - private HashMap recvTimes = new HashMap(); - /* Integer: Process ID, Long: Calculated process times (using the RTT) */ - private HashMap realTimesRTT = new HashMap(); - /* Time the request/response has started */ - private long requestTime; - - /* Berkely Client vairables */ - - protected void onInit() { - setProtocolClassname(getClass().toString()); - - /* Those prefs are editable through the VSProtocol VSEditor GUI. t_min and t_max in milliseconds */ - setInteger("numProcesses", getNumProcesses()-1); - } - - protected void onClientReset() { - processTimes.clear(); - recvTimes.clear(); - realTimesRTT.clear(); - } - - protected void onClientStart() { - requestTime = process.getTime(); - VSMessage message = new VSMessage(getProtocolClassname()); - message.setBoolean("isRequest", true); - sendMessage(message); - } - - protected void onClientRecv(VSMessage recvMessage) { - /* Ignore all protocol messages which are not a response message, e.g. itself */ - if (!recvMessage.getBoolean("isResponse")) - return; - - Integer processID = new Integer(recvMessage.getInteger("processID")); - Long time = new Long(recvMessage.getLong("time")); - - processTimes.put(processID, time); - recvTimes.put(processID, new Long(process.getTime())); - - /* All processes have comitted the response */ - if (processTimes.size() == getInteger("numProcesses")) { - long avgTime = calculateAverageTime(); - /* Set the local's process time to the new avg reference time */ - process.setTime(avgTime); - /* Tell all other processes what to do in order to justify their times */ - sendJustifyRequests(avgTime); - /* Start "clean" next time */ - onClientReset(); - } - } - - /** - * Calculate the new average time - */ - private long calculateAverageTime() { - long sum = 0; - for (Integer processID : processTimes.keySet()) { - Long localTime = processTimes.get(processID); - Long recvTime = recvTimes.get(processID); - long rtt = recvTime.longValue() - requestTime; - long realProcessTime = localTime + (long) (rtt / 2); - realTimesRTT.put(processID, new Long(realProcessTime)); - sum += realProcessTime; - } - /* Include the time of the local process */ - sum += process.getTime(); - return (long) sum / (1 + getInteger("numProcesses")); - } - - /** - * Sends to all clients a value to justify their local clocks - */ - private void sendJustifyRequests(long avgTime) { - for (Integer processID : processTimes.keySet()) { - long realProcessTime = realTimesRTT.get(processID).longValue(); - long diff = avgTime - realProcessTime; - VSMessage message = new VSMessage(getProtocolClassname()); - message.setBoolean("isJustify", true); - message.setLong("timeDiff", diff); - message.setInteger("receiverProcessID", processID); - sendMessage(message); - } - } - - protected void onServerReset() { - } - - protected void onServerRecv(VSMessage recvMessage) { - if (recvMessage.getBoolean("isRequest")) { - VSMessage message = new VSMessage(getProtocolClassname()); - message.setInteger("processID", process.getProcessID()); - message.setLong("time", process.getTime()); - message.setBoolean("isResponse", true); - sendMessage(message); - - } else if (recvMessage.getBoolean("isJustify")) { - /* Check if it's "my" justify message */ - if (recvMessage.getInteger("receiverProcessID") != process.getProcessID()) - return; - - long timeDiff = recvMessage.getLong("timeDiff"); - long recvTime = process.getTime(); - long newTime = process.getTime() + timeDiff; - logg("Neue Zeit: " + newTime); - - process.setTime(newTime); - } - } - - public String toString() { - return super.toString(); - } -} diff --git a/sources/protocols/BroadcastSturmProtocol.java b/sources/protocols/BroadcastSturmProtocol.java deleted file mode 100644 index 6ce95e8..0000000 --- a/sources/protocols/BroadcastSturmProtocol.java +++ /dev/null @@ -1,47 +0,0 @@ -package protocols; - -import java.util.ArrayList; - -import prefs.VSPrefs; -import core.VSMessage; - -public class BroadcastSturmProtocol extends VSProtocol { - private ArrayList sentMessages; - private static int broadcastCount; - - protected void onInit() { - setProtocolClassname(getClass().toString()); - sentMessages = new ArrayList(); - } - - protected void onClientReset() { - } - - protected void onClientStart() { - VSMessage message = new VSMessage(getProtocolClassname()); - message.setInteger("Broadcast", broadcastCount++); - sentMessages.add(message); - sendMessage(message); - } - - protected void onClientRecv(VSMessage recvMessage) { - } - - protected void onServerReset() { - sentMessages.clear(); - } - - protected void onServerRecv(VSMessage recvMessage) { - if (!sentMessages.contains(recvMessage)) { - VSMessage message = new VSMessage(getProtocolClassname()); - message.setInteger("Broadcast", recvMessage.getInteger("Broadcast")); - - sentMessages.add(message); - sendMessage(message); - } - } - - public String toString() { - return super.toString(); - } -} diff --git a/sources/protocols/DummyProtocol.java b/sources/protocols/DummyProtocol.java deleted file mode 100644 index 9a531e1..0000000 --- a/sources/protocols/DummyProtocol.java +++ /dev/null @@ -1,45 +0,0 @@ -package protocols; - -import core.VSMessage; - -public class DummyProtocol extends VSProtocol { - protected void onInit() { - setProtocolClassname(getClass().toString()); - } - - protected void onClientReset() { - logg("onClientReset()"); - } - - protected void onClientStart() { - logg("onClientStart()"); - - VSMessage message = new VSMessage(getProtocolClassname()); - message.setString("Greeting", "Hello World!"); - message.setInteger("A number", 1); - message.setBoolean("A boolean", true); - message.setFloat("A float", 1.2f); - sendMessage(message); - } - - protected void onClientRecv(VSMessage recvMessage) { - logg("onClientRecv("+recvMessage+")"); - - String s = recvMessage.getString("Greeting"); - int n = recvMessage.getInteger("A number"); - boolean b = recvMessage.getBoolean("A boolean"); - float f = recvMessage.getFloat("A float"); - } - - protected void onServerReset() { - logg("onClientReset()"); - } - - protected void onServerRecv(VSMessage recvMessage) { - logg("onServerRecv("+recvMessage+")"); - } - - public String toString() { - return super.toString() + "; Dummy Test"; - } -} diff --git a/sources/protocols/ExternalTimeSyncProtocol.java b/sources/protocols/ExternalTimeSyncProtocol.java deleted file mode 100644 index b6ee73f..0000000 --- a/sources/protocols/ExternalTimeSyncProtocol.java +++ /dev/null @@ -1,62 +0,0 @@ -package protocols; - -import prefs.VSPrefs; -import core.VSMessage; - -public class ExternalTimeSyncProtocol extends VSProtocol { - private long requestTime; - private boolean waitingForResponse; - - protected void onInit() { - setProtocolClassname(getClass().toString()); - } - - protected void onClientReset() { - } - - protected void onClientStart() { - requestTime = process.getTime(); - waitingForResponse = true; - - /* Multicast message to all processes */ - VSMessage message = new VSMessage(getProtocolClassname()); - message.setBoolean("isClientRequest", true); - sendMessage(message); - } - - protected void onClientRecv(VSMessage recvMessage) { - if (!recvMessage.getBoolean("isServerResponse")) - return; - - if (waitingForResponse) - waitingForResponse = false; - else - return; - - long recvTime = process.getTime(); - long roundTripTime = recvTime - requestTime; - long serverTime = recvMessage.getLong("time"); - long newTime = serverTime + (long) (roundTripTime / 2); - - logg("Server Zeit: " + serverTime + "; RTT: " + roundTripTime + "; Alte Zeit: " + recvTime + "; Neue Zeit: " + newTime + "; Offset: " + (newTime - recvTime)); - process.setTime(newTime); - } - - protected void onServerReset() { - } - - protected void onServerRecv(VSMessage recvMessage) { - if (!recvMessage.getBoolean("isClientRequest")) - return; - - /* Multicast message to all processes */ - VSMessage message = new VSMessage(getProtocolClassname()); - message.setLong("time", process.getTime()); - message.setBoolean("isServerResponse", true); - sendMessage(message); - } - - public String toString() { - return super.toString(); //+ "; " + prefs.getString("lang.requesttime") + ": " + requestTime; - } -} diff --git a/sources/protocols/InternalTimeSyncProtocol.java b/sources/protocols/InternalTimeSyncProtocol.java deleted file mode 100644 index 961cf65..0000000 --- a/sources/protocols/InternalTimeSyncProtocol.java +++ /dev/null @@ -1,69 +0,0 @@ -package protocols; - -import prefs.VSPrefs; -import core.VSMessage; - -public class InternalTimeSyncProtocol extends VSProtocol { - private boolean waitingForResponse; - - protected void onInit() { - setProtocolClassname(getClass().toString()); - - /* Those prefs are editable through the VSProtocol VSEditor GUI. t_min and t_max in milliseconds */ - setLong("t_min", 1000); - setLong("t_max", 5000); - } - - protected void onClientReset() { - } - - protected void onClientStart() { - waitingForResponse = true; - - /* Multicast message to all processes */ - VSMessage message = new VSMessage(getProtocolClassname()); - message.setBoolean("isClientRequest", true); - sendMessage(message); - } - - protected void onClientRecv(VSMessage recvMessage) { - /* Ignore all protocol messages which are not a response message, e.g. itself */ - if (!recvMessage.getBoolean("isServerResponse")) - return; - - if (waitingForResponse) - waitingForResponse = false; - else - return; - - long tMax = getLong("t_max"); - long tMin = getLong("t_min"); - long serverTime = recvMessage.getLong("time"); - long newTime = serverTime + (long) ((tMax + tMin) / 2 ); - - logg("Server Zeit: " + serverTime + "; (t_min,t_max): (" + tMin + "," + tMax - + "); Alte Zeit: " + process.getTime() + "; Neue Zeit: " + newTime - + "; Offset: " + (process.getTime() - newTime)); - - process.setTime(newTime); - } - - protected void onServerReset() { - } - - protected void onServerRecv(VSMessage recvMessage) { - /* Ignore all protocol messages which are not a request message, e.g. itself */ - if (!recvMessage.getBoolean("isClientRequest")) - return; - - /* Multicast message to all processes */ - VSMessage message = new VSMessage(getProtocolClassname()); - message.setLong("time", process.getTime()); - message.setBoolean("isServerResponse", true); - sendMessage(message); - } - - public String toString() { - return super.toString(); - } -} diff --git a/sources/protocols/PingPongProtocol.java b/sources/protocols/PingPongProtocol.java deleted file mode 100644 index ee54a3c..0000000 --- a/sources/protocols/PingPongProtocol.java +++ /dev/null @@ -1,56 +0,0 @@ -package protocols; - -import prefs.VSPrefs; -import core.VSMessage; - -public class PingPongProtocol extends VSProtocol { - private int clientCounter; - private int serverCounter; - - protected void onInit() { - setProtocolClassname(getClass().toString()); - } - - protected void onClientReset() { - clientCounter = 0; - } - - protected void onClientStart() { - VSMessage message = new VSMessage(getProtocolClassname()); - message.setBoolean("fromClient", true); - message.setInteger("counter", ++clientCounter); - sendMessage(message); - } - - protected void onClientRecv(VSMessage recvMessage) { - if (!recvMessage.getBoolean("fromServer")) - return; - - logg("message: " + recvMessage.getInteger("counter")); - - VSMessage message = new VSMessage(getProtocolClassname()); - message.setBoolean("fromClient", true); - message.setInteger("counter", ++clientCounter); - sendMessage(message); - } - - protected void onServerReset() { - serverCounter = 0; - } - - protected void onServerRecv(VSMessage recvMessage) { - if (!recvMessage.getBoolean("fromClient")) - return; - - logg("message: " + recvMessage.getInteger("counter")); - - VSMessage message = new VSMessage(getProtocolClassname()); - message.setBoolean("fromServer", true); - message.setInteger("counter", ++serverCounter); - sendMessage(message); - } - - public String toString() { - return super.toString(); - } -} diff --git a/sources/protocols/VSRegisteredProtocols.java b/sources/protocols/VSRegisteredProtocols.java index c152a59..d3bcc20 100644 --- a/sources/protocols/VSRegisteredProtocols.java +++ b/sources/protocols/VSRegisteredProtocols.java @@ -16,12 +16,12 @@ public final class VSRegisteredProtocols { protocolNames = new HashMap(); protocolClassnames = new HashMap(); - registerProtocol("protocols.DummyProtocol"); - registerProtocol("protocols.PingPongProtocol"); - registerProtocol("protocols.ExternalTimeSyncProtocol"); - registerProtocol("protocols.InternalTimeSyncProtocol"); - registerProtocol("protocols.BroadcastSturmProtocol"); - registerProtocol("protocols.BerkelyTimeProtocol"); + registerProtocol("protocols.implementations.DummyProtocol"); + registerProtocol("protocols.implementations.PingPongProtocol"); + registerProtocol("protocols.implementations.ExternalTimeSyncProtocol"); + registerProtocol("protocols.implementations.InternalTimeSyncProtocol"); + registerProtocol("protocols.implementations.BroadcastSturmProtocol"); + registerProtocol("protocols.implementations.BerkelyTimeProtocol"); } public static Vector getProtocolNames() { diff --git a/sources/protocols/implementations/BerkelyTimeProtocol.java b/sources/protocols/implementations/BerkelyTimeProtocol.java new file mode 100644 index 0000000..0063de1 --- /dev/null +++ b/sources/protocols/implementations/BerkelyTimeProtocol.java @@ -0,0 +1,127 @@ +package protocols.implementations; + +import protocols.VSProtocol; +import prefs.VSPrefs; +import core.VSMessage; + +import java.util.HashMap; + +public class BerkelyTimeProtocol extends VSProtocol { + /* Berkely Server variables */ + + /* Integer: Process ID, Long: Local time of the process */ + private HashMap processTimes = new HashMap(); + /* Integer: Process ID, Long: Time of receiving the response from the process */ + private HashMap recvTimes = new HashMap(); + /* Integer: Process ID, Long: Calculated process times (using the RTT) */ + private HashMap realTimesRTT = new HashMap(); + /* Time the request/response has started */ + private long requestTime; + + /* Berkely Client vairables */ + + protected void onInit() { + setProtocolClassname(getClass().toString()); + + /* Those prefs are editable through the VSProtocol VSEditor GUI. t_min and t_max in milliseconds */ + setInteger("numProcesses", getNumProcesses()-1); + } + + protected void onClientReset() { + processTimes.clear(); + recvTimes.clear(); + realTimesRTT.clear(); + } + + protected void onClientStart() { + requestTime = process.getTime(); + VSMessage message = new VSMessage(getProtocolClassname()); + message.setBoolean("isRequest", true); + sendMessage(message); + } + + protected void onClientRecv(VSMessage recvMessage) { + /* Ignore all protocol messages which are not a response message, e.g. itself */ + if (!recvMessage.getBoolean("isResponse")) + return; + + Integer processID = new Integer(recvMessage.getInteger("processID")); + Long time = new Long(recvMessage.getLong("time")); + + processTimes.put(processID, time); + recvTimes.put(processID, new Long(process.getTime())); + + /* All processes have comitted the response */ + if (processTimes.size() == getInteger("numProcesses")) { + long avgTime = calculateAverageTime(); + /* Set the local's process time to the new avg reference time */ + process.setTime(avgTime); + /* Tell all other processes what to do in order to justify their times */ + sendJustifyRequests(avgTime); + /* Start "clean" next time */ + onClientReset(); + } + } + + /** + * Calculate the new average time + */ + private long calculateAverageTime() { + long sum = 0; + for (Integer processID : processTimes.keySet()) { + Long localTime = processTimes.get(processID); + Long recvTime = recvTimes.get(processID); + long rtt = recvTime.longValue() - requestTime; + long realProcessTime = localTime + (long) (rtt / 2); + realTimesRTT.put(processID, new Long(realProcessTime)); + sum += realProcessTime; + } + /* Include the time of the local process */ + sum += process.getTime(); + return (long) sum / (1 + getInteger("numProcesses")); + } + + /** + * Sends to all clients a value to justify their local clocks + */ + private void sendJustifyRequests(long avgTime) { + for (Integer processID : processTimes.keySet()) { + long realProcessTime = realTimesRTT.get(processID).longValue(); + long diff = avgTime - realProcessTime; + VSMessage message = new VSMessage(getProtocolClassname()); + message.setBoolean("isJustify", true); + message.setLong("timeDiff", diff); + message.setInteger("receiverProcessID", processID); + sendMessage(message); + } + } + + protected void onServerReset() { + } + + protected void onServerRecv(VSMessage recvMessage) { + if (recvMessage.getBoolean("isRequest")) { + VSMessage message = new VSMessage(getProtocolClassname()); + message.setInteger("processID", process.getProcessID()); + message.setLong("time", process.getTime()); + message.setBoolean("isResponse", true); + sendMessage(message); + + } else if (recvMessage.getBoolean("isJustify")) { + /* Check if it's "my" justify message */ + if (recvMessage.getInteger("receiverProcessID") != process.getProcessID()) + return; + + long timeDiff = recvMessage.getLong("timeDiff"); + long recvTime = process.getTime(); + long newTime = process.getTime() + timeDiff; + logg("Neue Zeit: " + newTime); + + process.setTime(newTime); + } + } + + public String toString() { + return super.toString(); + } +} diff --git a/sources/protocols/implementations/BroadcastSturmProtocol.java b/sources/protocols/implementations/BroadcastSturmProtocol.java new file mode 100644 index 0000000..c68b548 --- /dev/null +++ b/sources/protocols/implementations/BroadcastSturmProtocol.java @@ -0,0 +1,48 @@ +package protocols.implementations; + +import java.util.ArrayList; + +import core.VSMessage; +import prefs.VSPrefs; +import protocols.VSProtocol; + +public class BroadcastSturmProtocol extends VSProtocol { + private ArrayList sentMessages; + private static int broadcastCount; + + protected void onInit() { + setProtocolClassname(getClass().toString()); + sentMessages = new ArrayList(); + } + + protected void onClientReset() { + } + + protected void onClientStart() { + VSMessage message = new VSMessage(getProtocolClassname()); + message.setInteger("Broadcast", broadcastCount++); + sentMessages.add(message); + sendMessage(message); + } + + protected void onClientRecv(VSMessage recvMessage) { + } + + protected void onServerReset() { + sentMessages.clear(); + } + + protected void onServerRecv(VSMessage recvMessage) { + if (!sentMessages.contains(recvMessage)) { + VSMessage message = new VSMessage(getProtocolClassname()); + message.setInteger("Broadcast", recvMessage.getInteger("Broadcast")); + + sentMessages.add(message); + sendMessage(message); + } + } + + public String toString() { + return super.toString(); + } +} diff --git a/sources/protocols/implementations/DummyProtocol.java b/sources/protocols/implementations/DummyProtocol.java new file mode 100644 index 0000000..e79f62d --- /dev/null +++ b/sources/protocols/implementations/DummyProtocol.java @@ -0,0 +1,46 @@ +package protocols.implementations; + +import protocols.VSProtocol; +import core.VSMessage; + +public class DummyProtocol extends VSProtocol { + protected void onInit() { + setProtocolClassname(getClass().toString()); + } + + protected void onClientReset() { + logg("onClientReset()"); + } + + protected void onClientStart() { + logg("onClientStart()"); + + VSMessage message = new VSMessage(getProtocolClassname()); + message.setString("Greeting", "Hello World!"); + message.setInteger("A number", 1); + message.setBoolean("A boolean", true); + message.setFloat("A float", 1.2f); + sendMessage(message); + } + + protected void onClientRecv(VSMessage recvMessage) { + logg("onClientRecv("+recvMessage+")"); + + String s = recvMessage.getString("Greeting"); + int n = recvMessage.getInteger("A number"); + boolean b = recvMessage.getBoolean("A boolean"); + float f = recvMessage.getFloat("A float"); + } + + protected void onServerReset() { + logg("onClientReset()"); + } + + protected void onServerRecv(VSMessage recvMessage) { + logg("onServerRecv("+recvMessage+")"); + } + + public String toString() { + return super.toString() + "; Dummy Test"; + } +} diff --git a/sources/protocols/implementations/ExternalTimeSyncProtocol.java b/sources/protocols/implementations/ExternalTimeSyncProtocol.java new file mode 100644 index 0000000..3f40eca --- /dev/null +++ b/sources/protocols/implementations/ExternalTimeSyncProtocol.java @@ -0,0 +1,63 @@ +package protocols.implementations; + +import core.VSMessage; +import prefs.VSPrefs; +import protocols.VSProtocol; + +public class ExternalTimeSyncProtocol extends VSProtocol { + private long requestTime; + private boolean waitingForResponse; + + protected void onInit() { + setProtocolClassname(getClass().toString()); + } + + protected void onClientReset() { + } + + protected void onClientStart() { + requestTime = process.getTime(); + waitingForResponse = true; + + /* Multicast message to all processes */ + VSMessage message = new VSMessage(getProtocolClassname()); + message.setBoolean("isClientRequest", true); + sendMessage(message); + } + + protected void onClientRecv(VSMessage recvMessage) { + if (!recvMessage.getBoolean("isServerResponse")) + return; + + if (waitingForResponse) + waitingForResponse = false; + else + return; + + long recvTime = process.getTime(); + long roundTripTime = recvTime - requestTime; + long serverTime = recvMessage.getLong("time"); + long newTime = serverTime + (long) (roundTripTime / 2); + + logg("Server Zeit: " + serverTime + "; RTT: " + roundTripTime + "; Alte Zeit: " + recvTime + "; Neue Zeit: " + newTime + "; Offset: " + (newTime - recvTime)); + process.setTime(newTime); + } + + protected void onServerReset() { + } + + protected void onServerRecv(VSMessage recvMessage) { + if (!recvMessage.getBoolean("isClientRequest")) + return; + + /* Multicast message to all processes */ + VSMessage message = new VSMessage(getProtocolClassname()); + message.setLong("time", process.getTime()); + message.setBoolean("isServerResponse", true); + sendMessage(message); + } + + public String toString() { + return super.toString(); //+ "; " + prefs.getString("lang.requesttime") + ": " + requestTime; + } +} diff --git a/sources/protocols/implementations/InternalTimeSyncProtocol.java b/sources/protocols/implementations/InternalTimeSyncProtocol.java new file mode 100644 index 0000000..ccef2d3 --- /dev/null +++ b/sources/protocols/implementations/InternalTimeSyncProtocol.java @@ -0,0 +1,70 @@ +package protocols.implementations; + +import core.VSMessage; +import prefs.VSPrefs; +import protocols.VSProtocol; + +public class InternalTimeSyncProtocol extends VSProtocol { + private boolean waitingForResponse; + + protected void onInit() { + setProtocolClassname(getClass().toString()); + + /* Those prefs are editable through the VSProtocol VSEditor GUI. t_min and t_max in milliseconds */ + setLong("t_min", 1000); + setLong("t_max", 5000); + } + + protected void onClientReset() { + } + + protected void onClientStart() { + waitingForResponse = true; + + /* Multicast message to all processes */ + VSMessage message = new VSMessage(getProtocolClassname()); + message.setBoolean("isClientRequest", true); + sendMessage(message); + } + + protected void onClientRecv(VSMessage recvMessage) { + /* Ignore all protocol messages which are not a response message, e.g. itself */ + if (!recvMessage.getBoolean("isServerResponse")) + return; + + if (waitingForResponse) + waitingForResponse = false; + else + return; + + long tMax = getLong("t_max"); + long tMin = getLong("t_min"); + long serverTime = recvMessage.getLong("time"); + long newTime = serverTime + (long) ((tMax + tMin) / 2 ); + + logg("Server Zeit: " + serverTime + "; (t_min,t_max): (" + tMin + "," + tMax + + "); Alte Zeit: " + process.getTime() + "; Neue Zeit: " + newTime + + "; Offset: " + (process.getTime() - newTime)); + + process.setTime(newTime); + } + + protected void onServerReset() { + } + + protected void onServerRecv(VSMessage recvMessage) { + /* Ignore all protocol messages which are not a request message, e.g. itself */ + if (!recvMessage.getBoolean("isClientRequest")) + return; + + /* Multicast message to all processes */ + VSMessage message = new VSMessage(getProtocolClassname()); + message.setLong("time", process.getTime()); + message.setBoolean("isServerResponse", true); + sendMessage(message); + } + + public String toString() { + return super.toString(); + } +} diff --git a/sources/protocols/implementations/PingPongProtocol.java b/sources/protocols/implementations/PingPongProtocol.java new file mode 100644 index 0000000..aa2ce16 --- /dev/null +++ b/sources/protocols/implementations/PingPongProtocol.java @@ -0,0 +1,57 @@ +package protocols.implementations; + +import core.VSMessage; +import prefs.VSPrefs; +import protocols.VSProtocol; + +public class PingPongProtocol extends VSProtocol { + private int clientCounter; + private int serverCounter; + + protected void onInit() { + setProtocolClassname(getClass().toString()); + } + + protected void onClientReset() { + clientCounter = 0; + } + + protected void onClientStart() { + VSMessage message = new VSMessage(getProtocolClassname()); + message.setBoolean("fromClient", true); + message.setInteger("counter", ++clientCounter); + sendMessage(message); + } + + protected void onClientRecv(VSMessage recvMessage) { + if (!recvMessage.getBoolean("fromServer")) + return; + + logg("message: " + recvMessage.getInteger("counter")); + + VSMessage message = new VSMessage(getProtocolClassname()); + message.setBoolean("fromClient", true); + message.setInteger("counter", ++clientCounter); + sendMessage(message); + } + + protected void onServerReset() { + serverCounter = 0; + } + + protected void onServerRecv(VSMessage recvMessage) { + if (!recvMessage.getBoolean("fromClient")) + return; + + logg("message: " + recvMessage.getInteger("counter")); + + VSMessage message = new VSMessage(getProtocolClassname()); + message.setBoolean("fromServer", true); + message.setInteger("counter", ++serverCounter); + sendMessage(message); + } + + public String toString() { + return super.toString(); + } +} -- cgit v1.2.3