server.core
Class FileOutput

java.lang.Object
  extended by java.lang.Thread
      extended by common.StoppableThread
          extended by common.TransfertSlave
              extended by common.FileHandler
                  extended by server.core.FileOutput
All Implemented Interfaces:
Runnable

public class FileOutput
extends FileHandler

Manipule le fichier destination.

Lors de la création, le fichier n'est pas ouvert. Après l'initialisation mais avant le début du transfert, la méthode doit être appelée initOutput() pour ouvrir le fichier. Ensuite, lorsque le thread est démarré, celui-ci attend l'arrivée des données qui sont stockées dans TransfertHandler.receivedOffsets

Le fichier est écrit séquentiellement : les offsets reçus sont stockés temporairement dans un dictionnaire que le thread consulte à chaque itération.

Après avoir attendu TIME_WAITING_PACKET_CHECK, le thread vérifie si l'offset courant est présent dans le dictionnaire. Si tel est le cas, alors les données sont écrites dans le fichier et l'offset courant est incrémenté de UDPHandler.UDP_DATA_LENGTH.

Cette classe décide aussi du temps d'attente entre l'envoi de paquets du côté du serveur. En effet, cette classe tente d'optimiser le temps d'attente entre la réception de deux paquets du côté du serveur. Le temps d'attente total, le nombre de paquets reçus et perdus sont sauvegardés et donnés en argument au décideur TimeAdjustment.decide(double, double, double). Le serveur peut proposer plusieurs implémentations de TimeAdjustment avant de proposer plusieurs algorithmes menant à cet optimal.


Nested Class Summary
 
Nested classes/interfaces inherited from class java.lang.Thread
Thread.State, Thread.UncaughtExceptionHandler
 
Field Summary
private  boolean completedTransfert
          Précise si le transfert est arrivé à son terme, et s'il est nécessaire de calculer la somme de contrôle.
private  long currentOffset
          Offset courant d'écriture dans le fichier.
private  DigestOutputStream file
          Fichier destination, calcule la somme de contrôle a chaque appel de write()
private  TransfertHandler handler
          Gestionnaire de transfert parent
private  ServerScheduler scheduler
          Ordonnanceur du serveur.
private static long TIME_MAX_MISS_PACKET
          Temps d'attente maximal avant de considérer qu'il y a un problème de connexion avec client.
private static long TIME_MAX_REQUEST_PACKET
          Temps d'attente maximal avant d'effectuer une nouvelle demande d'envoi au client (de considérer le paquet perdu ou trop en retard).
private static long TIME_WAITING_PACKET_CHECK
          Temps d'attente pour la vérification de la réception d'un nouveau paquet.
 
Fields inherited from class common.FileHandler
CHECKSUM_ALGORITHM
 
Fields inherited from class common.TransfertSlave
master
 
Fields inherited from class common.StoppableThread
quitQuery
 
Fields inherited from class java.lang.Thread
MAX_PRIORITY, MIN_PRIORITY, NORM_PRIORITY
 
Constructor Summary
FileOutput(TransfertMaster master, ServerScheduler scheduler, TransfertHandler handler)
          Initialise la classe, mais n'ouvre pas le fichier.
 
Method Summary
protected  void doFree()
          Libère les ressources liées à cette classe en fermant le flux de sortie.
 void doQuit()
          Prends les dispositions pour le thread termine.
 void initOutput()
          Initialise le fichier destination en récupérant un clone du MessageDigest pour ne pas interférer avec les autres transferts.
 void run()
          Méthode principale du thread.
 
Methods inherited from class common.FileHandler
calculateCheckSum, checkSumToString, getFileCheckSum, getFileLength, getFileName, setFileCheckSum, setFileLength, setFileName
 
Methods inherited from class common.StoppableThread
free, quit
 
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, 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

TIME_WAITING_PACKET_CHECK

private static final long TIME_WAITING_PACKET_CHECK
Temps d'attente pour la vérification de la réception d'un nouveau paquet.

See Also:
Constant Field Values

TIME_MAX_REQUEST_PACKET

private static final long TIME_MAX_REQUEST_PACKET
Temps d'attente maximal avant d'effectuer une nouvelle demande d'envoi au client (de considérer le paquet perdu ou trop en retard).

See Also:
TCPConnection.requestOffset(long), Constant Field Values

TIME_MAX_MISS_PACKET

private static final long TIME_MAX_MISS_PACKET
Temps d'attente maximal avant de considérer qu'il y a un problème de connexion avec client.

See Also:
Constant Field Values

handler

private final TransfertHandler handler
Gestionnaire de transfert parent


scheduler

private final ServerScheduler scheduler
Ordonnanceur du serveur.


file

private DigestOutputStream file
Fichier destination, calcule la somme de contrôle a chaque appel de write()


currentOffset

private long currentOffset
Offset courant d'écriture dans le fichier. Si l'offset courant n'est pas disponible, une demande sera faite.


completedTransfert

private boolean completedTransfert
Précise si le transfert est arrivé à son terme, et s'il est nécessaire de calculer la somme de contrôle.

Constructor Detail

FileOutput

public FileOutput(TransfertMaster master,
                  ServerScheduler scheduler,
                  TransfertHandler handler)
Initialise la classe, mais n'ouvre pas le fichier. La méthode initOutput() devra être appelée avant le démarrage du Thread.

Parameters:
handler - gestionnaire de transfert parent.
Method Detail

initOutput

public void initOutput()
                throws TransfertFailure
Initialise le fichier destination en récupérant un clone du MessageDigest pour ne pas interférer avec les autres transferts.

Throws:
TransfertFailure - s'il est impossible de créer ou d'initialiser la somme de contrôle.

doFree

protected void doFree()
Libère les ressources liées à cette classe en fermant le flux de sortie.

Overrides:
doFree in class StoppableThread
See Also:
Thread.run(), StoppableThread.isFree, StoppableThread.free()

doQuit

public void doQuit()
Prends les dispositions pour le thread termine. Dans ce cas, le thread vérifie le champ quitQuery régulièrement, il n'a pas de dispositions spéciales à prendre.

Overrides:
doQuit in class StoppableThread
See Also:
Thread.run(), StoppableThread.quitQuery, StoppableThread.quit()

run

public void run()
Méthode principale du thread.

Specified by:
run in interface Runnable
Overrides:
run in class Thread