de.tud.dvs1.mmpgp2p
Class MmpgP2PServiceThread

java.lang.Object
  extended by java.lang.Thread
      extended by de.tud.dvs1.mmpgp2p.MmpgP2PServiceThread
All Implemented Interfaces:
java.lang.Runnable
Direct Known Subclasses:
ClientThread, RCQueueWorkerThread, RegionControllerThread, ServerThread

public abstract class MmpgP2PServiceThread
extends java.lang.Thread

Diese Klasse abstrahiert einen MMPG Service Thread. Sie stellt Methoden zur Verfügung, die jede abstrahierte Service-Klasse implementieren muss.


Nested Class Summary
 
Nested classes/interfaces inherited from class java.lang.Thread
java.lang.Thread.State, java.lang.Thread.UncaughtExceptionHandler
 
Field Summary
static java.lang.String CR
           
protected  long logSystemStatsInterval
           
protected  long logSystemStatsLast
           
protected  long logSystemStatsStart
           
protected  java.io.FileWriter logSystemStatsWriter
           
static java.lang.String MAGIC
           
 
Fields inherited from class java.lang.Thread
MAX_PRIORITY, MIN_PRIORITY, NORM_PRIORITY
 
Constructor Summary
protected MmpgP2PServiceThread()
           
protected MmpgP2PServiceThread(java.util.Properties p)
           
 
Method Summary
protected abstract  void closedConnection(ConnectionWorkerThread t)
          Diese Funktion wird aufgerufen, nachem sich ein ConnectionWorkerThread beendet
protected  void closeServerConnectionWorker()
           
protected  void doLogSystemStats()
          Statistiken in ein Logfile schreiben
 ConnectionWorkerThread getConnectionWorker(java.lang.String server, int port)
          Eine Verbindung aufbauen und diese zurückgeben.
 boolean getDebug()
           
 java.util.Properties getProperties()
          Liefert alle Properties zurück
 java.lang.String getProperty(java.lang.String name)
           
 java.lang.String getProperty(java.lang.String name, java.lang.String def)
           
 ConnectionWorkerThread getServerConnectionWorker()
           
protected  java.lang.String getSystemLoad()
          Returns /proc/loadavg
protected  int getSystemMemory()
           
 java.lang.String getThreadName()
           
 long getTime()
          Gibt die aktuelle Zeit zurück.
protected  long getTraffic()
          Byte an Netzwerkverkehr zurückgeben.
protected abstract  ClientRequest incomingConnection(ConnectionWorkerThread t)
          Verarbeite eine eingehende Verbindung.
protected abstract  void incomingData(ConnectionWorkerThread t)
          Auf einer Verbindung kommen Daten herein.
 void initSystemStats()
           
 boolean isRunning()
          Läuft dieser Thread?
 boolean isStarting()
           
 void log_debug(java.lang.Exception e)
          Eine Exception loggen falls debugging aktiviert ist.
 void log_debug(java.lang.String text)
          Einen Text loggen falls debugging aktiviert ist.
abstract  void log(java.lang.Exception e)
           
abstract  void log(java.lang.String text)
           
protected  void logSystemStats()
          Protokolleintrag schreiben.
static java.net.Socket openConnection(java.lang.String server, int port)
          Öffne eine neue Verbindung zum Server.
 java.net.Socket openServerConnection()
          Öffne eine neue Verbindung zum.
protected  void printSystemStatsFirstLine()
           
protected  java.lang.String readFirstLine(ConnectionWorkerThread t)
           
 void resetSystemStats()
          Diese Methode setzt die Zähler der internen Protokollierung zurück.
 void setDebug(boolean d)
           
 java.lang.Object setProperty(java.lang.String name, java.lang.String val)
           
protected  void setRunning(boolean run)
          Setze den Running-Status dieses Threads
 void stopThread()
           
 boolean waitFor(long timeout)
          Auf diesen MmpgP2PServiceThread so lange warten, bis sein Status auf "running" gewechselt hat, oder bis ein Timeout erfolgt ist
 boolean waitForShutdown(long timeout)
          Auf diesen MmpgP2PServiceThread so lange warten, bis sein Status "running" auf FALSE gewechselt hat, oder bis ein Timeout erfolgt ist
 
Methods inherited from class java.lang.Thread
activeCount, checkAccess, countStackFrames, currentThread, destroy, dumpStack, enumerate, getAllStackTraces, getContextClassLoader, getDefaultUncaughtExceptionHandler, getId, getName, getPriority, getStackTrace, getState, getThreadGroup, getUncaughtExceptionHandler, holdsLock, interrupt, interrupted, isAlive, isDaemon, isInterrupted, join, join, join, resume, run, setContextClassLoader, setDaemon, setDefaultUncaughtExceptionHandler, setName, setPriority, setUncaughtExceptionHandler, sleep, sleep, start, stop, stop, suspend, toString, yield
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 

Field Detail

MAGIC

public static final java.lang.String MAGIC
See Also:
Constant Field Values

CR

public static final java.lang.String CR
See Also:
Constant Field Values

logSystemStatsInterval

protected long logSystemStatsInterval

logSystemStatsStart

protected long logSystemStatsStart

logSystemStatsLast

protected long logSystemStatsLast

logSystemStatsWriter

protected java.io.FileWriter logSystemStatsWriter
Constructor Detail

MmpgP2PServiceThread

protected MmpgP2PServiceThread()

MmpgP2PServiceThread

protected MmpgP2PServiceThread(java.util.Properties p)
Method Detail

incomingConnection

protected abstract ClientRequest incomingConnection(ConnectionWorkerThread t)
                                             throws MmpgP2PException
Verarbeite eine eingehende Verbindung. In der Regel wird diese Methode von einem ConnectionListenerThread aufgerufen, bevor dieser einen ConnectionWorkerThread erzeugt.

Parameters:
s - Die eingehende Verbindung
Returns:
Ein ClientRequest wird erzeugt, über den die Verbindung identifiziert wird.
Throws:
MmpgP2PException

incomingData

protected abstract void incomingData(ConnectionWorkerThread t)
                              throws MmpgP2PException
Auf einer Verbindung kommen Daten herein. In der Regel rufen die ConnectionWorkerThreads diese Metode auf sobald Daten anliegen.

Parameters:
s - Die Verbindung auf der Daten anliegen
Throws:
MmpgP2PException

closedConnection

protected abstract void closedConnection(ConnectionWorkerThread t)
Diese Funktion wird aufgerufen, nachem sich ein ConnectionWorkerThread beendet


log

public abstract void log(java.lang.Exception e)

log

public abstract void log(java.lang.String text)

stopThread

public void stopThread()

getProperties

public java.util.Properties getProperties()
Liefert alle Properties zurück


getProperty

public java.lang.String getProperty(java.lang.String name)

getProperty

public java.lang.String getProperty(java.lang.String name,
                                    java.lang.String def)

setProperty

public java.lang.Object setProperty(java.lang.String name,
                                    java.lang.String val)

isRunning

public boolean isRunning()
Läuft dieser Thread?

Returns:
true, wenn der RegionController sachgemäß arbeitet. In anderen Fällen wird false zurückgeliefert, z.B. bei Out-of-Sync-Fehlern.

isStarting

public boolean isStarting()

setRunning

protected void setRunning(boolean run)
Setze den Running-Status dieses Threads

Parameters:
run - Der neue Status.

readFirstLine

protected java.lang.String readFirstLine(ConnectionWorkerThread t)
                                  throws java.io.IOException
Throws:
java.io.IOException

closeServerConnectionWorker

protected void closeServerConnectionWorker()

getServerConnectionWorker

public ConnectionWorkerThread getServerConnectionWorker()
                                                 throws java.net.UnknownHostException,
                                                        java.io.IOException,
                                                        java.lang.InterruptedException
Throws:
java.net.UnknownHostException
java.io.IOException
java.lang.InterruptedException

getConnectionWorker

public ConnectionWorkerThread getConnectionWorker(java.lang.String server,
                                                  int port)
                                           throws java.net.UnknownHostException,
                                                  java.io.IOException,
                                                  java.lang.InterruptedException
Eine Verbindung aufbauen und diese zurückgeben.

Throws:
java.net.UnknownHostException
java.io.IOException
java.lang.InterruptedException

openServerConnection

public java.net.Socket openServerConnection()
                                     throws java.io.IOException,
                                            java.lang.InterruptedException
Öffne eine neue Verbindung zum.

Throws:
java.io.IOException
java.lang.InterruptedException

openConnection

public static java.net.Socket openConnection(java.lang.String server,
                                             int port)
                                      throws java.io.IOException,
                                             java.lang.InterruptedException
Öffne eine neue Verbindung zum Server.

Throws:
java.io.IOException
java.lang.InterruptedException

waitFor

public boolean waitFor(long timeout)
Auf diesen MmpgP2PServiceThread so lange warten, bis sein Status auf "running" gewechselt hat, oder bis ein Timeout erfolgt ist

Parameters:
timeout - Die Zeit, die maximal gewartet wird (Angabe in Millisekunden).
0 bedeutet: solange warten, bis der MmpgP2PServiceThread läuft oder eine Exception auftritt.
Returns:
true, falls der MmpgP2PServiceThread gestartet ist
false, falls ein Timeout zum tragen kam.

waitForShutdown

public boolean waitForShutdown(long timeout)
Auf diesen MmpgP2PServiceThread so lange warten, bis sein Status "running" auf FALSE gewechselt hat, oder bis ein Timeout erfolgt ist

Parameters:
timeout - Die Zeit, die maximal gewartet wird (Angabe in Millisekunden).
0 bedeutet: solange warten, bis der MmpgP2PServiceThread gestoppt hat oder eine Exception auftritt.
Returns:
true, falls der MmpgP2PServiceThread beendet wurde.
false, falls ein Timeout zum tragen kam.

getTime

public long getTime()
Gibt die aktuelle Zeit zurück. FIXME: nicht System benutzen, sondern eine globale Zeit des MMPGP2P-Systems!


log_debug

public void log_debug(java.lang.Exception e)
Eine Exception loggen falls debugging aktiviert ist.


log_debug

public void log_debug(java.lang.String text)
Einen Text loggen falls debugging aktiviert ist.


getThreadName

public java.lang.String getThreadName()

getDebug

public boolean getDebug()

getSystemMemory

protected int getSystemMemory()

getTraffic

protected long getTraffic()
Byte an Netzwerkverkehr zurückgeben.


getSystemLoad

protected java.lang.String getSystemLoad()
Returns /proc/loadavg


initSystemStats

public void initSystemStats()

resetSystemStats

public void resetSystemStats()
Diese Methode setzt die Zähler der internen Protokollierung zurück. Traffic ist danach 0.


logSystemStats

protected void logSystemStats()
Protokolleintrag schreiben.


printSystemStatsFirstLine

protected void printSystemStatsFirstLine()
                                  throws java.io.IOException
Throws:
java.io.IOException

doLogSystemStats

protected void doLogSystemStats()
Statistiken in ein Logfile schreiben


setDebug

public void setDebug(boolean d)