69 lines
2.1 KiB
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();
|
|
}
|
|
|
|
|
|
|
|
}
|