diff options
Diffstat (limited to 'sources/protocols/VSAbstractProtocol.java')
| -rw-r--r-- | sources/protocols/VSAbstractProtocol.java | 475 |
1 files changed, 0 insertions, 475 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(); - } -} |
