Projet_COO_POO/POO/src/communication/tcp/TCPInputThread.java

77 rader
1,6 KiB
Java

package communication.tcp;
import java.io.IOException;
import java.io.ObjectInputStream;
import observers.ObserverInputMessage;
import observers.ObserverSocketState;
public class TCPInputThread extends Thread {
private ObjectInputStream input;
private boolean running;
private ObserverInputMessage obsInput;
private ObserverSocketState obsState;
/**
* Create the thread used to read the messages
*
* @param input The ObjectInputStream to read data from
*/
protected TCPInputThread(ObjectInputStream input) {
this.input = input;
this.running = true;
}
@Override
public void run() {
while (this.running) {
try {
Object o = this.input.readObject();
// Notify the observer a message was received
this.obsInput.updateInput(this, o);
} catch (IOException | ClassNotFoundException e) {
this.interrupt();
}
}
}
@Override
public void interrupt() {
// Stop the thread
this.running = false;
// Close the stream and the socket
if (this.obsState != null) {
// Send an update to the controller
this.obsState.updateSocketState(this, true);
}
// Set every attribute to null so they're collected by the GC
this.obsInput = null;
this.obsState = null;
this.input = null;
}
/**
* Set the observer to notify when a message is received
*
* @param o The observer
*/
protected void setObserverInputMessage(ObserverInputMessage o) {
this.obsInput = o;
}
/**
* Set the observer to notify when the session is cut/closed.
*
* @param o The observer
*/
protected void setObserverSocketState(ObserverSocketState o) {
this.obsState = o;
}
}