Projet_POO/Projet_POO/src/main/java/clavardage/SessionClavardageDistante.java

69 lines
2.1 KiB
Java

package clavardage;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.io.IOException;
import java.util.ArrayList;
import java.util.concurrent.ConcurrentLinkedQueue;
import data.Message;
public class SessionClavardageDistante extends SessionClavardage{
private Message lastMessage = null;
private ConcurrentLinkedQueue <Message> messageQueue = new ConcurrentLinkedQueue <Message> ();
protected PropertyChangeSupport support;
public SessionClavardageDistante(String idSource, String idDestination) {
super(idSource, idDestination);
this.support = new PropertyChangeSupport(this);
}
public void addPropertyChangeListener(PropertyChangeListener pcl) {
support.addPropertyChangeListener(pcl);
}
public void removePropertyChangeListener(PropertyChangeListener pcl) {
support.removePropertyChangeListener(pcl);
}
//TODO qui n'a rien a faire ici, faire en sorte que la mise en bdd qui a lieu lors de l'envoie se fasse sur un autre thread
public void send(String message) throws IOException {
EnvoiMessageDistance.envoiMessage("message", this.getIdSource(), this.getIdDestination(), message);
}
public void sendObject(Message message) throws IOException {
EnvoiMessageDistance.envoiMessage(message.getType(), message.getSender(), message.getRecipient(), message.getBody());
}
public void stop() {
try {
EnvoiMessageDistance.envoiMessage("command", this.getIdSource(), this.getIdDestination(), "stopSession");
} catch (IOException e) {
e.printStackTrace();
}
}
public synchronized void addMessage(Message msg) {
this.messageQueue.add(msg);
this.support.firePropertyChange("lastMessage", this.lastMessage, msg);
this.lastMessage = msg;
}
public synchronized ArrayList <Message> getNewMessages() {
ArrayList <Message> msgList = new ArrayList <Message> ();
while (!this.messageQueue.isEmpty()) {
msgList.add(messageQueue.poll());
}
return msgList;
}
public String toString() {
return "Session à distance entre " + this.getIdSource() + " et " + this.getIdDestination() + System.lineSeparator();
}
}