summaryrefslogtreecommitdiff
path: root/sources/protocols
diff options
context:
space:
mode:
authorPaul Buetow (centauri) <puppet@mx.buetow.org>2015-05-23 21:59:43 +0100
committerPaul Buetow (centauri) <puppet@mx.buetow.org>2015-05-23 21:59:43 +0100
commit9fc2fc3ccdedf1b7e48f8dfb618ca6cb6a2a662e (patch)
tree0fa92fe4e75cb53ffbf7eb56b5455eb9457bb06c /sources/protocols
parentf7873669a43421331e14b8921ebdaa8af4393bd5 (diff)
parent32749241efc1f5f70056d74a90237388f57ea350 (diff)
Merge remote-tracking branch 'remotes/github/packages' into packagespackages
Diffstat (limited to 'sources/protocols')
-rw-r--r--sources/protocols/VSAbstractProtocol.java475
-rw-r--r--sources/protocols/implementations/README10
-rw-r--r--sources/protocols/implementations/VSBasicMulticastProtocol.java112
-rw-r--r--sources/protocols/implementations/VSBerkelyTimeProtocol.java229
-rw-r--r--sources/protocols/implementations/VSBroadcastProtocol.java129
-rw-r--r--sources/protocols/implementations/VSDummyProtocol.java124
-rw-r--r--sources/protocols/implementations/VSExternalTimeSyncProtocol.java145
-rw-r--r--sources/protocols/implementations/VSInternalTimeSyncProtocol.java149
-rw-r--r--sources/protocols/implementations/VSOnePhaseCommitProtocol.java174
-rw-r--r--sources/protocols/implementations/VSPingPongProtocol.java136
-rw-r--r--sources/protocols/implementations/VSReliableMulticastProtocol.java168
-rw-r--r--sources/protocols/implementations/VSTwoPhaseCommitProtocol.java224
12 files changed, 0 insertions, 2075 deletions
diff --git a/sources/protocols/VSAbstractProtocol.java b/sources/protocols/VSAbstractProtocol.java
deleted file mode 100644
index 43c8958..0000000
--- a/sources/protocols/VSAbstractProtocol.java
+++ /dev/null
@@ -1,475 +0,0 @@
-/*
- * VS-Simulator (http://vs-sim.buetow.org)
- * Copyright (c) 2008 - 2009 by Dipl.-Inform. (FH) Paul C. Buetow
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * All icons of the icons/ folder are under a Creative Commons
- * Attribution-Noncommercial-Share Alike License a CC-by-nc-sa.
- *
- * The icon's homepage is http://code.google.com/p/ultimate-gnome/
- */
-
-package protocols;
-
-import java.io.*;
-import java.util.ArrayList;
-
-import core.*;
-import events.*;
-import events.internal.*;
-import serialize.*;
-import simulator.VSSimulatorVisualization;
-
-/**
- * The class VSAbstractProtocol, this class defined the basic framework of a
- * protocol.
- *
- * @author Paul C. Buetow
- */
-abstract public class VSAbstractProtocol extends VSAbstractEvent {
- /** The serial version uid */
- private static final long serialVersionUID = 1L;
-
- /** The protocol has an onServerStart method */
- protected static final boolean HAS_ON_SERVER_START = true;
-
- /** The protocol has an onClientStart method */
- protected static final boolean HAS_ON_CLIENT_START = false;
-
- /** True, if onServerStart is used, false if onClientStart is used */
- private boolean hasOnServerStart;
-
- /** The protocol object is a server. */
- private boolean isServer;
-
- /** The protocol object is a client. */
- private boolean isClient;
-
- /** The protocol object server is initialized. */
- private boolean isServerInitialized;
-
- /** The protocol object client is initialized. */
- private boolean isClientInitialized;
-
- /** The current protocol object's context is a server. */
- private boolean currentContextIsServer;
-
- /** The protocol's server schedules */
- private ArrayList<VSTask> serverSchedules = new ArrayList<VSTask>();
-
- /** The protocol's client schedules */
- private ArrayList<VSTask> clientSchedules = new ArrayList<VSTask>();
-
- /**
- * A simple constructor.
- *
- * @param hasOnServerStart true, if the protocol uses an onServerStart
- * method. false, if the protocol uses an onClientStart method instead.
- */
- public VSAbstractProtocol(boolean hasOnServerStart) {
- this.hasOnServerStart = hasOnServerStart;
- }
-
- /**
- * Sends a message.
- *
- * @param message the message to send
- */
- public void sendMessage(VSMessage message) {
- if (process == null)
- return;
-
- process.increaseLamportTime();
- process.increaseVectorTime();
-
- VSMessageStub stub = new VSMessageStub(message);
- VSInternalProcess internalProcess = (VSInternalProcess) process;
-
- if (currentContextIsServer)
- stub.init(internalProcess, getClassname(),
- VSMessage.IS_SERVER_MESSAGE);
- else
- stub.init(internalProcess, getClassname(),
- VSMessage.IS_CLIENT_MESSAGE);
-
- internalProcess.sendMessage(message);
- }
-
- /**
- * Checks if it's the incorrect protocol
- *
- * @param message the message to check against
- *
- * @return true, if is incorrect protocol
- */
- private final boolean isIncorrectProtocol(VSMessage message) {
- return !message.getProtocolClassname().equals(getClassname());
- }
-
- /* (non-Javadoc)
- * @see events.VSAbstractEvent#onStart()
- */
- public final void onStart() {
- if (hasOnServerStart) {
- if (isServer) {
- currentContextIsServer(true);
- if (!isServerInitialized)
- onInit();
- onServerStart();
- }
- } else {
- if (isClient) {
- currentContextIsServer(false);
- if (!isClientInitialized)
- onInit();
- onClientStart();
- }
- }
- }
-
- /* (non-Javadoc)
- * @see events.VSAbstractEvent#onInit()
- */
- public final void onInit() {
- if (isClient) {
- currentContextIsServer(false);
- onClientInit();
- isClientInitialized = true;
- }
-
- if (isServer) {
- currentContextIsServer(true);
- onServerInit();
- isServerInitialized = true;
- }
- }
-
- /**
- * Runs a client schedule
- */
- public final void onClientScheduleStart() {
- if (isClient) {
- currentContextIsServer(false);
- onClientSchedule();
- }
- }
-
- /**
- * Runs a server schedule
- */
- public final void onServerScheduleStart() {
- if (isServer) {
- currentContextIsServer(true);
- onServerSchedule();
- }
- }
-
- /**
- * On message recv.
- *
- * @param message the message
- */
- public final void onMessageRecvStart(VSMessage message) {
- if (isIncorrectProtocol(message))
- return;
-
- if (isServer) {
- currentContextIsServer(true);
- if (!isServerInitialized)
- onInit();
- onServerRecv(message);
- }
-
- if (isClient) {
- currentContextIsServer(false);
- if (!isClientInitialized)
- onInit();
- onClientRecv(message);
- }
- }
-
- /**
- * Check's if its a relevant message.
- *
- * @param message the message to check
- *
- * @return true, if it's a relevant meessage. false if the protocol
- * is wrong or if the server recv a server message/the client recv a
- * client message. Clients should only recv server messages and servers
- * should only recv client messages.
- */
- public final boolean isRelevantMessage(VSMessage message) {
- if (isIncorrectProtocol(message))
- return false;
-
- if (message.isServerMessage()) {
- if (!isClient)
- return false;
- } else {
- if (!isServer)
- return false;
- }
-
- return true;
- }
-
- /**
- * Sets if the current context is server.
- *
- * @param currentContextIsServer the context.
- */
- public final void currentContextIsServer(boolean currentContextIsServer) {
- this.currentContextIsServer = currentContextIsServer;
- }
-
- /**
- * Checks how the protocol will start
- *
- * @return true, if this protocol uses onServerStart instead of
- * onClientStart
- */
- public final boolean hasOnServerStart() {
- return hasOnServerStart;
- }
-
- /**
- * Sets if is server.
- *
- * @param isServer the is server
- */
- public final void isServer(boolean isServer) {
- this.isServer = isServer;
- }
-
- /**
- * Checks if is server.
- *
- * @return true, if the protocol has activated the server part
- */
- public final boolean isServer() {
- return isServer;
- }
-
- /**
- * Sets if is client.
- *
- * @param isClient the is client
- */
- public final void isClient(boolean isClient) {
- this.isClient = isClient;
- }
-
- /**
- * Checks if is client.
- *
- * @return true, if the protocol has activated the client part
- */
- public final boolean isClient() {
- return isClient;
- }
-
- /**
- * Resets the protocol.
- */
- public void reset() {
- currentContextIsServer(true);
- isServer = false;
- onServerReset();
- serverSchedules.clear();
-
- currentContextIsServer(false);
- isClient = false;
- onClientReset();
- clientSchedules.clear();
- }
-
- /**
- * Reschedules the protocol for a new time and runs onClientSchedule or
- * onServerSchedule
- *
- * @param time The process' local time to run the schedule at.
- */
- public final void scheduleAt(long time) {
- VSInternalProcess internalProcess = (VSInternalProcess) process;
- VSAbstractEvent scheduleEvent =
- new VSProtocolScheduleEvent(this, currentContextIsServer);
- VSTask scheduleTask =
- new VSTask(time, internalProcess, scheduleEvent, VSTask.LOCAL);
-
- if (currentContextIsServer)
- serverSchedules.add(scheduleTask);
- else
- clientSchedules.add(scheduleTask);
-
- VSSimulatorVisualization canvas = internalProcess.getSimulatorCanvas();
- canvas.getTaskManager().addTask(scheduleTask);
- }
-
- /**
- * Removes all schedules of the protocol (server or client)
- */
- public final void removeSchedules() {
- VSInternalProcess internalProcess = (VSInternalProcess) process;
-
- if (currentContextIsServer) {
- internalProcess.getSimulatorCanvas().
- getTaskManager().removeAllTasks(serverSchedules);
- serverSchedules.clear();
-
- } else {
- internalProcess.getSimulatorCanvas().
- getTaskManager().removeAllTasks(clientSchedules);
- clientSchedules.clear();
- }
- }
-
- /**
- * On client init.
- */
- abstract public void onClientInit();
-
- /**
- * On client start.
- */
- public void onClientStart() { };
-
- /**
- * On client reset.
- */
- abstract public void onClientReset();
-
- /**
- * On client schedule.
- */
- abstract public void onClientSchedule();
-
- /**
- * On client recv.
- *
- * @param message the message
- */
- abstract public void onClientRecv(VSMessage message);
-
- /**
- * On server init.
- */
- abstract public void onServerInit();
-
- /**
- * On server start.
- */
- public void onServerStart() { };
-
- /**
- * On server reset.
- */
- abstract public void onServerReset();
-
- /**
- * On server recv.
- *
- * @param message the message
- */
- abstract public void onServerRecv(VSMessage message);
-
- /**
- * On server schedule.
- */
- abstract public void onServerSchedule();
-
- /**
- * Gets the num processes.
- *
- * @return the num processes
- */
- public final int getNumProcesses() {
- if (process == null)
- return 0;
-
- VSInternalProcess internalProcess = (VSInternalProcess) process;
- return internalProcess.getSimulatorCanvas().getNumProcesses();
- }
-
- /* (non-Javadoc)
- * @see events.VSAbstractEvent#createShortname()()
- */
- protected String createShortname(String savedShortname) {
- return savedShortname;
- }
-
- /* (non-Javadoc)
- * @see prefs.VSPrefs#toString()
- */
- public String toString() {
- if (process == null)
- return "";
-
- StringBuffer buffer = new StringBuffer();
-
- buffer.append(prefs.getString("lang.en.protocol"));
- buffer.append(": ");
- buffer.append(getShortname());
- buffer.append(" ");
-
- if (currentContextIsServer)
- buffer.append(prefs.getString("lang.en.server"));
- else
- buffer.append(prefs.getString("lang.en.client"));
-
- return buffer.toString();
- }
-
- /* (non-Javadoc)
- * @see serialize.VSSerializable#serialize(serialize.VSSerialize,
- * java.io.ObjectOutputStream)
- */
- public synchronized void serialize(VSSerialize serialize,
- ObjectOutputStream objectOutputStream)
- throws IOException {
- super.serialize(serialize, objectOutputStream);
-
- /** For later backwards compatibility, to add more stuff */
- objectOutputStream.writeObject(new Boolean(false));
-
- objectOutputStream.writeObject(new Boolean(hasOnServerStart));
-
- /** For later backwards compatibility, to add more stuff */
- objectOutputStream.writeObject(new Boolean(false));
- }
-
- /* (non-Javadoc)
- * @see serialize.VSSerializable#deserialize(serialize.VSSerialize,
- * java.io.ObjectInputStream)
- */
- @SuppressWarnings("unchecked")
- public synchronized void deserialize(VSSerialize serialize,
- ObjectInputStream objectInputStream)
- throws IOException, ClassNotFoundException {
- super.deserialize(serialize, objectInputStream);
-
- if (VSSerialize.DEBUG)
- System.out.println("Deserializing: VSAbstractProtocol");
-
- /** For later backwards compatibility, to add more stuff */
- objectInputStream.readObject();
-
- this.hasOnServerStart = ((Boolean)
- objectInputStream.readObject()).booleanValue();
-
- /** For later backwards compatibility, to add more stuff */
- objectInputStream.readObject();
- }
-}
diff --git a/sources/protocols/implementations/README b/sources/protocols/implementations/README
deleted file mode 100644
index fd8effa..0000000
--- a/sources/protocols/implementations/README
+++ /dev/null
@@ -1,10 +0,0 @@
-How to add a new protocol:
-
-1. Copy the file VSDummyProtocol.java into VSYourOwnNiceProtocol.java
-
-2. Edit VSYourOwnNiceProtocol.java and replace the classname!
-
-3. Edit the initialize method of events.RegisteredEvents.java and add the classname
-of your protocol. E.g.: "protocols.implementations.VSYourOwnNiceProtocol"
-
-
diff --git a/sources/protocols/implementations/VSBasicMulticastProtocol.java b/sources/protocols/implementations/VSBasicMulticastProtocol.java
deleted file mode 100644
index 76b13b5..0000000
--- a/sources/protocols/implementations/VSBasicMulticastProtocol.java
+++ /dev/null
@@ -1,112 +0,0 @@
-/*
- * Copyright (c) 2008 Paul C. Buetow, vs@dev.buetow.org
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * All icons of the icons/ folder are under a Creative Commons
- * Attribution-Noncommercial-Share Alike License a CC-by-nc-sa.
- *
- * The icon's homepage is http://code.google.com/p/ultimate-gnome/
- */
-
-package protocols.implementations;
-
-import protocols.VSAbstractProtocol;
-import core.VSMessage;
-
-/**
- * The class VSBasicMulticastProtocol, an implementation of the basic multicast
- * protocol.
- *
- * @author Paul C. Buetow
- */
-public class VSBasicMulticastProtocol extends VSAbstractProtocol {
- /** The serial version uid */
- private static final long serialVersionUID = 1L;
-
- /**
- * Instantiates a new VSBasicMulticast object.
- */
- public VSBasicMulticastProtocol() {
- super(VSAbstractProtocol.HAS_ON_CLIENT_START);
- setClassname(getClass().toString());
- }
-
- /* (non-Javadoc)
- * @see events.VSAbstractProtocol#onClientInit()
- */
- public void onClientInit() {
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onClientReset()
- */
- public void onClientReset() {
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onClientStart()
- */
- public void onClientStart() {
- VSMessage message = new VSMessage();
- message.setBoolean("isMulticast", true);
- sendMessage(message);
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onClientRecv(core.VSMessage)
- */
- public void onClientRecv(VSMessage recvMessage) {
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onClientSchedule()
- */
- public void onClientSchedule() {
- }
-
- /* (non-Javadoc)
- * @see events.VSAbstractProtocol#onServerInit()
- */
- public void onServerInit() {
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onServerReset()
- */
- public void onServerReset() {
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onServerRecv(core.VSMessage)
- */
- public void onServerRecv(VSMessage recvMessage) {
- if (recvMessage.getBoolean("isMulticast"))
- log("Multicast erhalten");
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onServerSchedule()
- */
- public void onServerSchedule() {
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#toString()
- */
- public String toString() {
- return super.toString();
- }
-}
diff --git a/sources/protocols/implementations/VSBerkelyTimeProtocol.java b/sources/protocols/implementations/VSBerkelyTimeProtocol.java
deleted file mode 100644
index 1b69b72..0000000
--- a/sources/protocols/implementations/VSBerkelyTimeProtocol.java
+++ /dev/null
@@ -1,229 +0,0 @@
-/*
- * Copyright (c) 2008 Paul C. Buetow, vs@dev.buetow.org
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * All icons of the icons/ folder are under a Creative Commons
- * Attribution-Noncommercial-Share Alike License a CC-by-nc-sa.
- *
- * The icon's homepage is http://code.google.com/p/ultimate-gnome/
- */
-
-package protocols.implementations;
-
-import protocols.VSAbstractProtocol;
-import core.VSMessage;
-
-import java.util.ArrayList;
-import java.util.HashMap;
-import java.util.Vector;
-
-/**
- * The class VSBerkelyTimeProtocol, an implementation of the berkely time
- * protocol.
- *
- * @author Paul C. Buetow
- */
-public class VSBerkelyTimeProtocol extends VSAbstractProtocol {
- private static final long serialVersionUID = 1L;
-
- /**
- * Instantiates a new berkely time protocol.
- */
- public VSBerkelyTimeProtocol() {
- super(VSAbstractProtocol.HAS_ON_SERVER_START);
- setClassname(getClass().toString());
- }
-
- /** Integer: Process ID, Long: Local time of the process */
- private HashMap<Integer,Long> processTimes = new HashMap<Integer,Long>();
-
- /** Integer: Process ID, Long: Time of receiving the response from the
- * process
- */
- private HashMap<Integer,Long> recvTimes = new HashMap<Integer,Long>();
-
- /** Integer: Process ID, Long: Calculated process times (using the RTT) */
- private HashMap<Integer,Long> realTimesRTT = new HashMap<Integer,Long>();
-
- /** Contains all process IDs of processes which want to justify their
- * time
- */
- private ArrayList<Integer> peers = new ArrayList<Integer>();
-
- /** Time the request/response has started */
- private long requestTime;
-
- /* (non-Javadoc)
- * @see events.VSAbstractProtocol#onServerInit()
- */
- public void onServerInit() {
- Vector<Integer> vec = new Vector<Integer>();
- vec.add(1);
- vec.add(3);
- initVector("pids", vec, "PIDs beteiliger Prozesse");
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onServerReset()
- */
- public void onServerReset() {
- //System.out.println("FOOBAR");
- processTimes.clear();
- recvTimes.clear();
- realTimesRTT.clear();
- peers.clear();
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onServerStart()
- */
- public void onServerStart() {
- //System.out.println("FOO");
- peers.addAll(getVector("pids"));
- requestTime = process.getTime();
- VSMessage message = new VSMessage();
- message.setBoolean("isRequest", true);
- sendMessage(message);
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onServerRecv(core.VSMessage)
- */
- public void onServerRecv(VSMessage recvMessage) {
- /* Ignore all protocol messages which are not a response message,
- e.g. itself */
- if (!recvMessage.getBoolean("isResponse"))
- return;
-
- Integer processID = recvMessage.getIntegerObj("processID");
-
- if (peers.contains(processID))
- peers.remove(processID);
- else
- return; /* Process has been handled already or is not listed */
-
- Long time = new Long(recvMessage.getLong("time"));
-
- processTimes.put(processID, time);
- recvTimes.put(processID, new Long(process.getTime()));
-
- /* All peers have told their times */
- if (peers.size() == 0) {
- 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 */
- onServerReset();
- }
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onServerSchedule()
- */
- public void onServerSchedule() {
- }
-
- /**
- * Calculate the new average time.
- *
- * @return the long
- */
- 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 / (getVector("pids").size() + 1);
- }
-
- /**
- * Sends to all clients a value to justify their local clocks.
- *
- * @param avgTime the avg time
- */
- private void sendJustifyRequests(long avgTime) {
- for (Integer processID : processTimes.keySet()) {
- long realProcessTime = realTimesRTT.get(processID).longValue();
- long diff = avgTime - realProcessTime;
- VSMessage message = new VSMessage();
- message.setBoolean("isJustify", true);
- message.setLong("timeDiff", diff);
- message.setInteger("receiverProcessID", processID);
- sendMessage(message);
- }
- }
-
- /* (non-Javadoc)
- * @see events.VSAbstractProtocol#onClientInit()
- */
- public void onClientInit() {
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onClientReset()
- */
- public void onClientReset() {
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onClientRecv(core.VSMessage)
- */
- public void onClientRecv(VSMessage recvMessage) {
- if (recvMessage.getBoolean("isRequest")) {
- VSMessage message = new VSMessage();
- 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;
- log("Neue Zeit: " + newTime);
-
- process.setTime(newTime);
- }
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onClientSchedule()
- */
- public void onClientSchedule() {
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#toString()
- */
- public String toString() {
- return super.toString();
- }
-}
diff --git a/sources/protocols/implementations/VSBroadcastProtocol.java b/sources/protocols/implementations/VSBroadcastProtocol.java
deleted file mode 100644
index 0ae8fae..0000000
--- a/sources/protocols/implementations/VSBroadcastProtocol.java
+++ /dev/null
@@ -1,129 +0,0 @@
-/*
- * Copyright (c) 2008 Paul C. Buetow, vs@dev.buetow.org
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * All icons of the icons/ folder are under a Creative Commons
- * Attribution-Noncommercial-Share Alike License a CC-by-nc-sa.
- *
- * The icon's homepage is http://code.google.com/p/ultimate-gnome/
- */
-
-package protocols.implementations;
-
-import java.util.ArrayList;
-
-import core.VSMessage;
-import protocols.VSAbstractProtocol;
-
-/**
- * The class VSBroadcastProtocol, an implementation of the broadcast
- * sturm protocol.
- *
- * @author Paul C. Buetow
- */
-public class VSBroadcastProtocol extends VSAbstractProtocol {
- /** The serial version uid */
- private static final long serialVersionUID = 1L;
-
- /** The sent messages. */
- private ArrayList<Integer> sentMessages;
-
- /** The broadcast count. */
- private static int broadcastCount;
-
- /**
- * Instantiates a new broadcast sturm protocol.
- */
- public VSBroadcastProtocol() {
- super(VSAbstractProtocol.HAS_ON_CLIENT_START);
- setClassname(getClass().toString());
- sentMessages = new ArrayList<Integer>();
- }
-
- /* (non-Javadoc)
- * @see events.VSAbstractProtocol#onClientInit()
- */
- public void onClientInit() {
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onClientReset()
- */
- public void onClientReset() {
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onClientStart()
- */
- public void onClientStart() {
- VSMessage message = new VSMessage();
- message.setInteger("Broadcast", broadcastCount++);
- sentMessages.add(message.getIntegerObj("Broadcast"));
- sendMessage(message);
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onClientRecv(core.VSMessage)
- */
- public void onClientRecv(VSMessage recvMessage) {
- onServerRecv(recvMessage);
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onClientSchedule()
- */
- public void onClientSchedule() {
- }
-
- /* (non-Javadoc)
- * @see events.VSAbstractProtocol#onServerInit()
- */
- public void onServerInit() {
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onServerReset()
- */
- public void onServerReset() {
- sentMessages.clear();
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onServerSchedule()
- */
- public void onServerSchedule() {
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onServerRecv(core.VSMessage)
- */
- public void onServerRecv(VSMessage recvMessage) {
- if (!sentMessages.contains(recvMessage.getIntegerObj("Broadcast"))) {
- VSMessage message = new VSMessage();
- message.setInteger("Broadcast",
- recvMessage.getInteger("Broadcast"));
- sentMessages.add(message.getIntegerObj("Broadcast"));
- sendMessage(message);
- }
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#toString()
- */
- public String toString() {
- return super.toString();
- }
-}
diff --git a/sources/protocols/implementations/VSDummyProtocol.java b/sources/protocols/implementations/VSDummyProtocol.java
deleted file mode 100644
index b06e256..0000000
--- a/sources/protocols/implementations/VSDummyProtocol.java
+++ /dev/null
@@ -1,124 +0,0 @@
-/*
- * Copyright (c) 2008 Paul C. Buetow, vs@dev.buetow.org
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * All icons of the icons/ folder are under a Creative Commons
- * Attribution-Noncommercial-Share Alike License a CC-by-nc-sa.
- *
- * The icon's homepage is http://code.google.com/p/ultimate-gnome/
- */
-
-package protocols.implementations;
-
-import protocols.VSAbstractProtocol;
-import core.VSMessage;
-
-/**
- * The class VSDummyProtocol, can be used as a template in order to create
- * own protocols.
- *
- * @author Paul C. Buetow
- */
-public class VSDummyProtocol extends VSAbstractProtocol {
- /** The serial version uid */
- private static final long serialVersionUID = 1L;
-
- /**
- * Instantiates a new dummy protocol object.
- */
- public VSDummyProtocol() {
- super(VSAbstractProtocol.HAS_ON_CLIENT_START);
- setClassname(getClass().toString());
- }
-
- /* (non-Javadoc)
- * @see events.VSAbstractProtocol#onClientInit()
- */
- public void onClientInit() {
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onClientReset()
- */
- public void onClientReset() {
- log("onClientReset()");
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onClientStart()
- */
- public void onClientStart() {
- log("onClientStart()");
-
- VSMessage message = new VSMessage();
- message.setString("Greeting", "Hello World!");
- message.setInteger("A number", 1);
- message.setBoolean("A boolean", true);
- message.setFloat("A float", 1.2f);
- sendMessage(message);
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onClientRecv(core.VSMessage)
- */
- public void onClientRecv(VSMessage recvMessage) {
- log("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");
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onClientSchedule()
- */
- public void onClientSchedule() {
- }
-
- /* (non-Javadoc)
- * @see events.VSAbstractProtocol#onServerInit()
- */
- public void onServerInit() {
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onServerReset()
- */
- public void onServerReset() {
- log("onClientReset()");
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onServerRecv(core.VSMessage)
- */
- public void onServerRecv(VSMessage recvMessage) {
- log("onServerRecv("+recvMessage+")");
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onServerSchedule()
- */
- public void onServerSchedule() {
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#toString()
- */
- public String toString() {
- return super.toString() + "; Dummy Test";
- }
-}
diff --git a/sources/protocols/implementations/VSExternalTimeSyncProtocol.java b/sources/protocols/implementations/VSExternalTimeSyncProtocol.java
deleted file mode 100644
index 3bb5eb9..0000000
--- a/sources/protocols/implementations/VSExternalTimeSyncProtocol.java
+++ /dev/null
@@ -1,145 +0,0 @@
-/*
- * Copyright (c) 2008 Paul C. Buetow, vs@dev.buetow.org
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * All icons of the icons/ folder are under a Creative Commons
- * Attribution-Noncommercial-Share Alike License a CC-by-nc-sa.
- *
- * The icon's homepage is http://code.google.com/p/ultimate-gnome/
- */
-
-package protocols.implementations;
-
-import core.VSMessage;
-import protocols.VSAbstractProtocol;
-
-/**
- * The class VSExternalTimeSyncProtocol, an implementation of the external
- * time synchronisation protocol.
- *
- * @author Paul C. Buetow
- */
-public class VSExternalTimeSyncProtocol extends VSAbstractProtocol {
- /** The serial version uid */
- private static final long serialVersionUID = 1L;
-
- /** The request time. */
- private long requestTime;
-
- /** The server is waiting for response, if true. */
- private boolean waitingForResponse;
-
- /**
- * Instantiates a new external time sync protocol object.
- */
- public VSExternalTimeSyncProtocol() {
- super(VSAbstractProtocol.HAS_ON_CLIENT_START);
- setClassname(getClass().toString());
- }
-
- /* (non-Javadoc)
- * @see events.VSAbstractProtocol#onClientInit()
- */
- public void onClientInit() {
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onClientReset()
- */
- public void onClientReset() {
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onClientStart()
- */
- public void onClientStart() {
- requestTime = process.getTime();
- waitingForResponse = true;
-
- /* Multicast message to all processes */
- VSMessage message = new VSMessage();
- message.setBoolean("isClientRequest", true);
- sendMessage(message);
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onClientRecv(core.VSMessage)
- */
- public 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);
-
- log("Server Zeit: " + serverTime + "; RTT: " + roundTripTime +
- "; Alte Zeit: " + recvTime + "; Neue Zeit: " + newTime +
- "; Offset: " + (newTime - recvTime));
- process.setTime(newTime);
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onClientSchedule()
- */
- public void onClientSchedule() {
- }
-
- /* (non-Javadoc)
- * @see events.VSAbstractProtocol#onServerInit()
- */
- public void onServerInit() {
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onServerReset()
- */
- public void onServerReset() {
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onServerRecv(core.VSMessage)
- */
- public void onServerRecv(VSMessage recvMessage) {
- if (!recvMessage.getBoolean("isClientRequest"))
- return;
-
- /* Multicast message to all processes */
- VSMessage message = new VSMessage();
- message.setLong("time", process.getTime());
- message.setBoolean("isServerResponse", true);
- sendMessage(message);
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onServerSchedule()
- */
- public void onServerSchedule() {
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#toString()
- */
- public String toString() {
- return super.toString();
- }
-}
diff --git a/sources/protocols/implementations/VSInternalTimeSyncProtocol.java b/sources/protocols/implementations/VSInternalTimeSyncProtocol.java
deleted file mode 100644
index c52b0ed..0000000
--- a/sources/protocols/implementations/VSInternalTimeSyncProtocol.java
+++ /dev/null
@@ -1,149 +0,0 @@
-/*
- * Copyright (c) 2008 Paul C. Buetow, vs@dev.buetow.org
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * All icons of the icons/ folder are under a Creative Commons
- * Attribution-Noncommercial-Share Alike License a CC-by-nc-sa.
- *
- * The icon's homepage is http://code.google.com/p/ultimate-gnome/
- */
-
-package protocols.implementations;
-
-import core.VSMessage;
-import protocols.VSAbstractProtocol;
-
-/**
- * The class VSInternalTimeSyncProtocol, an implementation of the internal
- * time synchronisation protocol.
- *
- * @author Paul C. Buetow
- */
-public class VSInternalTimeSyncProtocol extends VSAbstractProtocol {
- /** The serial version uid */
- private static final long serialVersionUID = 1L;
-
- /** The waiting for response. */
- private boolean waitingForResponse;
-
- /**
- * Instantiates a new internal time sync protocol.
- */
- public VSInternalTimeSyncProtocol() {
- super(VSAbstractProtocol.HAS_ON_CLIENT_START);
- setClassname(getClass().toString());
- }
-
- /* (non-Javadoc)
- * @see events.VSAbstractProtocol#onClientInit()
- */
- public void onClientInit() {
- initLong("t_min", 2000, "Max. Übetragungszeit", "ms");
- initLong("t_max", 500, "Min. Übertragungszeit", "ms");
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onClientReset()
- */
- public void onClientReset() {
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onClientStart()
- */
- public void onClientStart() {
- waitingForResponse = true;
-
- /* Multicast message to all processes */
- VSMessage message = new VSMessage();
- message.setBoolean("isClientRequest", true);
- sendMessage(message);
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onClientRecv(core.VSMessage)
- */
- public 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 );
-
- log("Server Zeit: " + serverTime + "; (t_min,t_max): (" + tMin +
- "," + tMax + "); Alte Zeit: " + process.getTime() +
- "; Neue Zeit: " + newTime + "; Offset: " +
- (process.getTime() - newTime));
-
- process.setTime(newTime);
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onClientSchedule()
- */
- public void onClientSchedule() {
- }
-
- /* (non-Javadoc)
- * @see events.VSAbstractProtocol#onServerInit()
- */
- public void onServerInit() {
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onServerReset()
- */
- public void onServerReset() {
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onServerRecv(core.VSMessage)
- */
- public 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();
- message.setLong("time", process.getTime());
- message.setBoolean("isServerResponse", true);
- sendMessage(message);
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onServerSchedule()
- */
- public void onServerSchedule() {
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#toString()
- */
- public String toString() {
- return super.toString();
- }
-}
diff --git a/sources/protocols/implementations/VSOnePhaseCommitProtocol.java b/sources/protocols/implementations/VSOnePhaseCommitProtocol.java
deleted file mode 100644
index feb4dd5..0000000
--- a/sources/protocols/implementations/VSOnePhaseCommitProtocol.java
+++ /dev/null
@@ -1,174 +0,0 @@
-/*
- * Copyright (c) 2008 Paul C. Buetow, vs@dev.buetow.org
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * All icons of the icons/ folder are under a Creative Commons
- * Attribution-Noncommercial-Share Alike License a CC-by-nc-sa.
- *
- * The icon's homepage is http://code.google.com/p/ultimate-gnome/
- */
-
-package protocols.implementations;
-
-import java.util.ArrayList;
-import java.util.Vector;
-
-import protocols.VSAbstractProtocol;
-import core.VSMessage;
-
-/**
- * The class VSOnePhaseCommitProtocol, an implementation of the one phase
- * commit protocol.
- *
- * @author Paul C. Buetow
- */
-public class VSOnePhaseCommitProtocol extends VSAbstractProtocol {
- /** The serial version uid */
- private static final long serialVersionUID = 1L;
-
- /* Server variables */
- private boolean ackSent;
-
- /**
- * Instantiates a one phase commit protocol.
- */
- public VSOnePhaseCommitProtocol() {
- super(VSAbstractProtocol.HAS_ON_SERVER_START);
- setClassname(getClass().toString());
- }
-
- /* (non-Javadoc)
- * @see events.VSAbstractProtocol#onServerInit()
- */
- public void onServerInit() {
- /* Can be changed via GUI variables editor of each process */
- Vector<Integer> vec = new Vector<Integer>();
- vec.add(1);
- vec.add(3);
-
- initVector("pids", vec, "PIDs beteiligter Prozesse");
- initLong("timeout", 2500, "Zeit bis erneute Anfrage", "ms");
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onServerReset()
- */
- public void onServerReset() {
- if (pids != null) {
- pids.clear();
- pids.addAll(getVector("pids"));
- }
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onServerStart()
- */
- public void onServerStart() {
- if (pids == null) {
- pids = new ArrayList<Integer>();
- pids.addAll(getVector("pids"));
- }
-
- if (pids.size() != 0) {
- long timeout = getLong("timeout") + process.getTime();
- /* Will run onServerSchedule() at the specified local time */
- scheduleAt(timeout);
-
- VSMessage message = new VSMessage();
- message.setBoolean("wantAck", true);
- sendMessage(message);
- }
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onServerRecv(core.VSMessage)
- */
- public void onServerRecv(VSMessage recvMessage) {
- if (pids.size() == 0)
- return;
-
- if (recvMessage.getBoolean("isAck")) {
- Integer pid = recvMessage.getIntegerObj("pid");
- if (pids.contains(pid))
- pids.remove(pid);
- else
- return;
-
- log("ACK von Prozess " + pid + " erhalten!");
-
- if (pids.size() == 0) {
- log("ACKs von allen beteiligten Prozessen erhalten! " +
- "Festgeschrieben!");
-
- /* Remove the active schedule which has been created in the
- onServerStart method */
- removeSchedules();
- }
- }
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onServerSchedule()
- */
- public void onServerSchedule() {
- onServerStart();
- }
-
-
- /* Client variables, coordinator */
- private ArrayList<Integer> pids;
-
- /* (non-Javadoc)
- * @see events.VSAbstractProtocol#onClientInit()
- */
- public void onClientInit() {
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onClientReset()
- */
- public void onClientReset() {
- ackSent = false;
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onClientRecv(core.VSMessage)
- */
- public void onClientRecv(VSMessage recvMessage) {
- if (ackSent)
- return;
-
- VSMessage message = new VSMessage();
- message.setBoolean("isAck", true);
- message.setInteger("pid", process.getProcessID());
- sendMessage(message);
- ackSent = true;
- log("Festgeschrieben");
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onClientSchedule()
- */
- public void onClientSchedule() {
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#toString()
- */
- public String toString() {
- return super.toString();
- }
-}
diff --git a/sources/protocols/implementations/VSPingPongProtocol.java b/sources/protocols/implementations/VSPingPongProtocol.java
deleted file mode 100644
index c9d763b..0000000
--- a/sources/protocols/implementations/VSPingPongProtocol.java
+++ /dev/null
@@ -1,136 +0,0 @@
-/*
- * Copyright (c) 2008 Paul C. Buetow, vs@dev.buetow.org
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * All icons of the icons/ folder are under a Creative Commons
- * Attribution-Noncommercial-Share Alike License a CC-by-nc-sa.
- *
- * The icon's homepage is http://code.google.com/p/ultimate-gnome/
- */
-
-package protocols.implementations;
-
-import core.VSMessage;
-import protocols.VSAbstractProtocol;
-
-/**
- * The class VSPingPongProtocol, an implementation of the ping pong protocol.
- *
- * @author Paul C. Buetow
- */
-public class VSPingPongProtocol extends VSAbstractProtocol {
- /** The serial version uid */
- private static final long serialVersionUID = 1L;
-
- /** The client counter. */
- private int clientCounter;
-
- /** The server counter. */
- private int serverCounter;
-
- /**
- * Instantiates a new ping pong protocol.
- */
- public VSPingPongProtocol() {
- super(VSAbstractProtocol.HAS_ON_CLIENT_START);
- setClassname(getClass().toString());
- }
-
- /* (non-Javadoc)
- * @see events.VSAbstractProtocol#onClientInit()
- */
- public void onClientInit() {
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onClientReset()
- */
- public void onClientReset() {
- clientCounter = 0;
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onClientStart()
- */
- public void onClientStart() {
- VSMessage message = new VSMessage();
- message.setBoolean("fromClient", true);
- message.setInteger("counter", ++clientCounter);
- super.sendMessage(message);
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onClientRecv(core.VSMessage)
- */
- public void onClientRecv(VSMessage recvMessage) {
- if (!recvMessage.getBoolean("fromServer"))
- return;
-
- super.log("message: " + recvMessage.getInteger("counter"));
-
- VSMessage message = new VSMessage();
- message.setBoolean("fromClient", true);
- message.setInteger("counter", ++clientCounter);
- super.sendMessage(message);
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onClientSchedule()
- */
- public void onClientSchedule() {
- }
-
- /* (non-Javadoc)
- * @see events.VSAbstractProtocol#onServerInit()
- */
- public void onServerInit() {
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onServerReset()
- */
- public void onServerReset() {
- serverCounter = 0;
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onServerRecv(core.VSMessage)
- */
- public void onServerRecv(VSMessage recvMessage) {
- if (!recvMessage.getBoolean("fromClient"))
- return;
-
- super.log("message: " + recvMessage.getInteger("counter"));
-
- VSMessage message = new VSMessage();
- message.setBoolean("fromServer", true);
- message.setInteger("counter", ++serverCounter);
- super.sendMessage(message);
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onServerSchedule()
- */
- public void onServerSchedule() {
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#toString()
- */
- public String toString() {
- return super.toString() + "; Neue Nachricht da hinter";
- }
-}
diff --git a/sources/protocols/implementations/VSReliableMulticastProtocol.java b/sources/protocols/implementations/VSReliableMulticastProtocol.java
deleted file mode 100644
index 57b943c..0000000
--- a/sources/protocols/implementations/VSReliableMulticastProtocol.java
+++ /dev/null
@@ -1,168 +0,0 @@
-/*
- * Copyright (c) 2008 Paul C. Buetow, vs@dev.buetow.org
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * All icons of the icons/ folder are under a Creative Commons
- * Attribution-Noncommercial-Share Alike License a CC-by-nc-sa.
- *
- * The icon's homepage is http://code.google.com/p/ultimate-gnome/
- */
-
-package protocols.implementations;
-
-import java.util.ArrayList;
-import java.util.Vector;
-
-import protocols.VSAbstractProtocol;
-import core.VSMessage;
-
-/**
- * The class VSReliableMulticastProtocol, an implementation of the reliable
- * multicast protocol.
- *
- * @author Paul C. Buetow
- */
-public class VSReliableMulticastProtocol extends VSAbstractProtocol {
- /** The serial version uid */
- private static final long serialVersionUID = 2L;
-
- /**
- * Instantiates a two phase commit protocol object.
- */
- public VSReliableMulticastProtocol() {
- super(VSAbstractProtocol.HAS_ON_CLIENT_START);
- setClassname(getClass().toString());
- }
-
- /** PIDs of all processes which still have to send an ACK */
- private ArrayList<Integer> pids;
-
- /* (non-Javadoc)
- * @see events.VSAbstractProtocol#onClientInit()
- */
- public void onClientInit() {
- Vector<Integer> vec = new Vector<Integer>();
- vec.add(1);
- vec.add(3);
-
- super.initVector("pids", vec, "PIDs beteiligter Prozesse");
- super.initLong("timeout", 2500, "Zeit bis erneute Anfrage", "ms");
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onClientReset()
- */
- public void onClientReset() {
- if (pids != null) {
- pids.clear();
- pids.addAll(getVector("pids"));
- }
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onClientStart()
- */
- public void onClientStart() {
- if (pids == null) {
- pids = new ArrayList<Integer>();
- pids.addAll(getVector("pids"));
- }
-
- if (pids.size() != 0) {
- long timeout = getLong("timeout") + process.getTime();
- /* Will run onClientSchedule() at the specified local time */
- scheduleAt(timeout);
-
- VSMessage message = new VSMessage();
- message.setBoolean("isMulticast", true);
- sendMessage(message);
- }
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onClientRecv(core.VSMessage)
- */
- public void onClientRecv(VSMessage recvMessage) {
- if (pids.size() != 0 && recvMessage.getBoolean("isAck")) {
- Integer pid = recvMessage.getIntegerObj("pid");
-
- if (pids.contains(pid))
- pids.remove(pid);
- else
- return;
-
- log("ACK von Prozess " + pid + " erhalten!");
-
- if (pids.size() == 0) {
- log("ACKs von allen beteiligten Prozessen " +
- "erhalten!");
-
- /* Remove the active schedule which has been created in the
- onClientStart method */
- removeSchedules();
- }
- }
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onClientSchedule()
- */
- public void onClientSchedule() {
- onClientStart();
- }
-
- /** True if ACK has been sent already */
- private boolean ackSent;
-
- /* (non-Javadoc)
- * @see events.VSAbstractProtocol#onServerInit()
- */
- public void onServerInit() {
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onServerReset()
- */
- public void onServerReset() {
- ackSent = false;
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onServerRecv(core.VSMessage)
- */
- public void onServerRecv(VSMessage recvMessage) {
- if (recvMessage.getBoolean("isMulticast")) {
- VSMessage message = new VSMessage();
- message.setBoolean("isAck", true);
- message.setInteger("pid", process.getProcessID());
- sendMessage(message);
-
- if (ackSent) {
- log("ACK erneut versendet");
-
- } else {
- log("ACK versendet");
- ackSent = true;
- }
- }
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onServerSchedule()
- */
- public void onServerSchedule() {
- }
-}
diff --git a/sources/protocols/implementations/VSTwoPhaseCommitProtocol.java b/sources/protocols/implementations/VSTwoPhaseCommitProtocol.java
deleted file mode 100644
index 2a0a4f2..0000000
--- a/sources/protocols/implementations/VSTwoPhaseCommitProtocol.java
+++ /dev/null
@@ -1,224 +0,0 @@
-/*
- * Copyright (c) 2008 Paul C. Buetow, vs@dev.buetow.org
- *
- * This program is free software; you can redistribute it and/or
- * modify it under the terms of the GNU General Public License
- * as published by the Free Software Foundation; either version 2
- * of the License, or (at your option) any later version.
- *
- * This program is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with this program; if not, write to the Free Software
- * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
- *
- * All icons of the icons/ folder are under a Creative Commons
- * Attribution-Noncommercial-Share Alike License a CC-by-nc-sa.
- *
- * The icon's homepage is http://code.google.com/p/ultimate-gnome/
- */
-
-package protocols.implementations;
-
-import java.util.ArrayList;
-import java.util.Vector;
-
-import protocols.VSAbstractProtocol;
-import core.VSMessage;
-
-/**
- * The class VSTwoPhaseCommitProtocol, an implementation of the two phase
- * commit protocol.
- *
- * @author Paul C. Buetow
- */
-public class VSTwoPhaseCommitProtocol extends VSAbstractProtocol {
- /** The serial version uid */
- private static final long serialVersionUID = 1L;
-
- /**
- * Instantiates a two phase commit protocol object.
- */
- public VSTwoPhaseCommitProtocol() {
- super(VSAbstractProtocol.HAS_ON_SERVER_START);
- setClassname(getClass().toString());
- }
-
- /** PIDs of all processes which still have to vote */
- private ArrayList<Integer> votePids;
-
- /** PIDs of all processes which have to acknowledge that they recv the
- * global vote result
- */
- private ArrayList<Integer> ackPids;
-
- /** The gloal vote result */
- private boolean voteResult;
-
- /* (non-Javadoc)
- * @see events.VSAbstractProtocol#onServerInit()
- */
- public void onServerInit() {
- Vector<Integer> vec = new Vector<Integer>();
- vec.add(2);
- vec.add(3);
-
- initVector("pids", vec, "PIDs beteiligter Prozesse");
- initLong("timeout", 2500, "Zeit bis erneute Anfrage", "ms");
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onServerReset()
- */
- public void onServerReset() {
- if (votePids != null) {
- voteResult = true;
- votePids.clear();
- votePids.addAll(getVector("pids"));
- ackPids.clear();
- ackPids.addAll(getVector("pids"));
- }
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onServerStart()
- */
- public void onServerStart() {
- if (votePids == null) {
- voteResult = true;
- votePids = new ArrayList<Integer>();
- votePids.addAll(getVector("pids"));
- ackPids = new ArrayList<Integer>();
- ackPids.addAll(getVector("pids"));
- }
-
- if (votePids.size() != 0) {
- long timeout = getLong("timeout") + process.getTime();
- /* Will run onServerSchedule() at the specified local time */
- scheduleAt(timeout);
-
- VSMessage message = new VSMessage();
- message.setBoolean("wantVote", true);
- sendMessage(message);
-
- } else if (ackPids.size() != 0) {
- long timeout = getLong("timeout") + process.getTime();
- /* Will run onServerSchedule() at the specified local time */
- scheduleAt(timeout);
-
- VSMessage message = new VSMessage();
- message.setBoolean("isVoteResult", true);
- message.setBoolean("voteResult", voteResult);
- sendMessage(message);
- }
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onServerRecv(core.VSMessage)
- */
- public void onServerRecv(VSMessage recvMessage) {
- if (votePids.size() != 0 && recvMessage.getBoolean("isVote")) {
- Integer pid = recvMessage.getIntegerObj("pid");
- if (votePids.contains(pid))
- votePids.remove(pid);
- else
- return;
-
- boolean vote = recvMessage.getBoolean("vote");
- log("Abstimmung von Prozess " + pid +
- " erhalten! Ergebnis: " + vote);
-
- if (!vote)
- voteResult = false;
-
- if (votePids.size() == 0) {
- log("Abstimmungen von allen beteiligten Prozessen " +
- "erhalten! Globales Ergebnis: " + voteResult);
-
- /* Remove the active schedule which has been created in the
- onServerStart method */
- removeSchedules();
- /* Create a new schedule and send the vote result */
- onServerStart();
- }
-
- } else if (ackPids.size() != 0 && recvMessage.getBoolean("isAck")) {
- Integer pid = recvMessage.getIntegerObj("pid");
- if (ackPids.contains(pid))
- ackPids.remove(pid);
- else
- return;
-
- if (ackPids.size() == 0) {
- /* Remove the active schedule which has been created in the
- onServerStart method */
- removeSchedules();
- log("Alle Teilnehmer haben die Abstimmung erhalten");
- }
- }
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onServerSchedule()
- */
- public void onServerSchedule() {
- onServerStart();
- }
-
- /* Server variables */
- private boolean voteSent;
- private boolean myVote;
-
- /* (non-Javadoc)
- * @see events.VSAbstractProtocol#onClientInit()
- */
- public void onClientInit() {
- initInteger("ackProb", 50, "Festschreibw'keit", 0, 100, "%");
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onClientReset()
- */
- public void onClientReset() {
- voteSent = false;
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onClientRecv(core.VSMessage)
- */
- public void onClientRecv(VSMessage recvMessage) {
- if (recvMessage.getBoolean("wantVote")) {
- if (!voteSent) {
- voteSent = true;
- myVote = process.getRandomPercentage() <= getInteger("ackProb");
- }
-
- VSMessage message = new VSMessage();
- message.setBoolean("isVote", true);
- message.setBoolean("vote", myVote);
- message.setInteger("pid", process.getProcessID());
- sendMessage(message);
-
- log("Abstimmung " + myVote + " versendet");
-
- } else if (recvMessage.getBoolean("isVoteResult")) {
- boolean voteResult = recvMessage.getBoolean("voteResult");
- log("Globales Abstimmungsergebnis erhalten. Ergebnis: " +
- voteResult);
-
- VSMessage message = new VSMessage();
- message.setBoolean("isAck", true);
- message.setInteger("pid", process.getProcessID());
- sendMessage(message);
- }
- }
-
- /* (non-Javadoc)
- * @see protocols.VSAbstractProtocol#onClientSchedule()
- */
- public void onClientSchedule() {
- }
-}