|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||
java.lang.Objectjava.lang.Thread
common.StoppableThread
common.TransfertSlave
common.FileHandler
server.core.FileOutput
public class FileOutput
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 |
|---|
private static final long TIME_WAITING_PACKET_CHECK
private static final long TIME_MAX_REQUEST_PACKET
TCPConnection.requestOffset(long),
Constant Field Valuesprivate static final long TIME_MAX_MISS_PACKET
private final TransfertHandler handler
private final ServerScheduler scheduler
private DigestOutputStream file
private long currentOffset
private boolean completedTransfert
| Constructor Detail |
|---|
public FileOutput(TransfertMaster master,
ServerScheduler scheduler,
TransfertHandler handler)
initOutput() devra être appelée avant le démarrage du Thread.
handler - gestionnaire de transfert parent.| Method Detail |
|---|
public void initOutput()
throws TransfertFailure
TransfertFailure - s'il est impossible de créer ou d'initialiser la somme de
contrôle.protected void doFree()
doFree in class StoppableThreadThread.run(),
StoppableThread.isFree,
StoppableThread.free()public void doQuit()
doQuit in class StoppableThreadThread.run(),
StoppableThread.quitQuery,
StoppableThread.quit()public void run()
run in interface Runnablerun in class Thread
|
||||||||||
| PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
| SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD | |||||||||