summaryrefslogtreecommitdiff
path: root/sources/protocols/implementations/ExternalTimeSyncProtocol.java
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2008-05-17 15:55:43 +0000
committerPaul Buetow <paul@buetow.org>2008-05-17 15:55:43 +0000
commit30ac208bac5acb677b2359a3f21f028b5b10a2b3 (patch)
tree1683f593e92fddf99303726d505e5d4d77bc5c4b /sources/protocols/implementations/ExternalTimeSyncProtocol.java
parent269558d30023525012a3b0633b030fa2e9151e29 (diff)
renamed the package.
Diffstat (limited to 'sources/protocols/implementations/ExternalTimeSyncProtocol.java')
-rw-r--r--sources/protocols/implementations/ExternalTimeSyncProtocol.java63
1 files changed, 63 insertions, 0 deletions
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;
+ }
+}