diff options
| author | Paul Buetow <paul@buetow.org> | 2008-05-26 19:12:29 +0000 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2008-05-26 19:12:29 +0000 |
| commit | a2cd723c26d9999b752ca5474f7a24de952b5fdb (patch) | |
| tree | 611282b1e2e9e059180078324f1efcc93406fa9c /sources/protocols/VSAbstractProtocol.java | |
| parent | 05d5e9fd51052e8f63a49a7e9529e7e710ca0e0a (diff) | |
All abstract classes now have an Abstract in it's name
Diffstat (limited to 'sources/protocols/VSAbstractProtocol.java')
| -rw-r--r-- | sources/protocols/VSAbstractProtocol.java | 178 |
1 files changed, 178 insertions, 0 deletions
diff --git a/sources/protocols/VSAbstractProtocol.java b/sources/protocols/VSAbstractProtocol.java new file mode 100644 index 0000000..b726a2e --- /dev/null +++ b/sources/protocols/VSAbstractProtocol.java @@ -0,0 +1,178 @@ +/* + * VS is (c) 2008 by Paul C. Buetow + * vs@dev.buetow.org + */ +package protocols; + +import events.*; +import core.*; + +/** + * The Class VSAbstractProtocol. + */ +abstract public class VSAbstractProtocol extends VSAbstractEvent { + private static final long serialVersionUID = 1L; + + /** The protocol object is a server. */ + private boolean isServer; + + /** The protocol object is a client. */ + private boolean isClient; + + /** The current protocol object's context is a server. */ + private boolean currentContextIsServer; + + /** + * Send a message. + * + * @param message the message to send + */ + protected void sendMessage(VSMessage message) { + if (process == null) + return; + + process.increaseLamportTime(); + process.increaseVectorTime(); + message.init(process, getClassname()); + process.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 (isClient) { + onClientStart(); + currentContextIsServer = false; + } + } + + /** + * On message recv. + * + * @param message the message + */ + public final void onMessageRecv(VSMessage message) { + if (isIncorrectProtocol(message)) + return; + + if (isServer) { + currentContextIsServer = true; + onServerRecv(message); + } + + if (isClient) { + currentContextIsServer = false; + onClientRecv(message); + } + } + + /** + * Checks if is server. + * + * @param isServer the is server + */ + public final void isServer(boolean isServer) { + this.isServer = isServer; + } + + /** + * Checks if is client. + * + * @param isClient the is client + */ + public final void isClient(boolean isClient) { + this.isClient = isClient; + } + + /** + * Reset. + */ + public void reset() { + if (isServer) { + currentContextIsServer = true; + isServer = false; + onServerReset(); + } + + if (isClient) { + currentContextIsServer = false; + isClient = false; + onClientReset(); + } + } + + /** + * On client start. + */ + abstract protected void onClientStart(); + + /** + * On client reset. + */ + abstract protected void onClientReset(); + + /** + * On client recv. + * + * @param message the message + */ + abstract protected void onClientRecv(VSMessage message); + + /** + * On server reset. + */ + abstract protected void onServerReset(); + + /** + * On server recv. + * + * @param message the message + */ + abstract protected void onServerRecv(VSMessage message); + + /** + * Gets the num processes. + * + * @return the num processes + */ + protected int getNumProcesses() { + if (process == null) + return 0; + + return process.getSimulationCanvas().getNumProcesses(); + } + + /* (non-Javadoc) + * @see prefs.VSPrefs#toString() + */ + public String toString() { + if (process == null) + return ""; + + StringBuffer buffer = new StringBuffer(); + + buffer.append(prefs.getString("lang.protocol")); + buffer.append(": "); + buffer.append(getShortname()); + buffer.append(" "); + + if (currentContextIsServer) + buffer.append(prefs.getString("lang.server")); + else + buffer.append(prefs.getString("lang.client")); + + return buffer.toString(); + } +} |
