/*
** This file is part of Filius, a network construction and simulation software.
**
** Originally created at the University of Siegen, Institute "Didactics of
** Informatics and E-Learning" by a students' project group:
** members (2006-2007):
** André Asschoff, Johannes Bade, Carsten Dittich, Thomas Gerding,
** Nadja Haßler, Ernst Johannes Klebert, Michell Weyer
** supervisors:
** Stefan Freischlad (maintainer until 2009), Peer Stechert
** Project is maintained since 2010 by Christian Eibl <filius@c.fameibl.de>
** and Stefan Freischlad
** Filius 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) version 3.
**
** Filius 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 Filius. If not, see <http://www.gnu.org/licenses/>.
*/
package filius.software;
import filius.software.system.SystemSoftware;
/** Diese Klasse ist Oberklasse der Protokolle auf den verschiedenen
* Schichten. Es werden Protokolle fuer vier Schichten implementiert:
* <ol>
* <li> Netzzugang </li>
* <li> Vermittlung </li>
* <li> Transport </li>
* <li> Anwendung </li>
* </ol>
* Die Anwendungsschicht wird durch die verschiedenen Anwendungen
* implementiert. <br />
* Peterson und Davie beschreiben zwei moegliche Grundarten der
* Implementierung des Protokollstapels mit Prozessen / Threads. Den
* ersten Ansatz nennen sie Prozess-pro-Protokoll. D. h., fuer jede
* Schicht wird ein Prozess gestartet, der Daten von der hoeheren und
* von der niedrigeren Schicht entgegen nimmt und weitergibt. Der zweite
* Ansatz ist Prozess-pro-Nachricht. D. h. für jede Nachricht existiert
* ein Prozess, der die Verarbeitung auf allen Schichten veranlasst. <br />
* Hier werden fuer die Weiterleitung der Daten zur naechst
* hoeheren Schicht jeweils ein Thread implementiert. Der Versand
* der Daten von der obersten zur untersten Schicht erfolgt durch den
* Thread der Anwendung. Damit ist das eine Verbindung der zwei
* beschriebenen Ansaetze.
*
* @author stefan
*/
public abstract class Protokoll {
/** Die Systemsoftware, die auf der Hardware-Komponente laeuft */
private SystemSoftware systemSoftware;
/** Konstruktor fuer Protokolle. Hier wird lediglich die
* Systemsoftware initialisiert.
* @param systemSoftware die Systemsoftware der Hardware-Komponente,
* auf der das Protokoll laeuft. */
public Protokoll(SystemSoftware systemSoftware) {
this.systemSoftware = systemSoftware;
}
/** Methode fuer den Zugriff auf die Systemsoftware */
public SystemSoftware holeSystemSoftware() {
return systemSoftware;
}
/** Methode zum Starten der Protokoll-Threads. Diese Methode wird beim
* Wechsel vom Entwurfs- zum Aktionsmodus durch die Systemsoftware
* aufgerufen. Hier werden die notwendigen Threads gestartet.
*/
public abstract void starten();
/** Methode zum Beenden der Protokoll-Threads. Diese Methode wird
* beim Wechsel vom Entwurfs- zum Aktionsmodus durch die Systemsoftware
* aufgerufen. Hier werden alle vorhandenen Threads dieser Schicht
* beendet.
*/
public abstract void beenden();
}