110 lines
2.7 KiB
Java
110 lines
2.7 KiB
Java
package session;
|
|
|
|
import java.awt.event.ActionEvent;
|
|
|
|
import java.awt.event.ActionListener;
|
|
import java.awt.event.KeyEvent;
|
|
import java.awt.event.KeyListener;
|
|
import java.io.IOException;
|
|
import java.net.Socket;
|
|
import java.time.LocalDateTime;
|
|
import java.time.format.DateTimeFormatter;
|
|
|
|
import javax.swing.JButton;
|
|
import javax.swing.JList;
|
|
|
|
import java.util.concurrent.*;
|
|
|
|
import communication.TCPClient;
|
|
import main.Observer;
|
|
import main.Utilisateur;
|
|
import messages.MauvaisTypeMessageException;
|
|
import messages.Message;
|
|
import messages.MessageTexte;
|
|
|
|
public class ControleurSession implements ActionListener, Observer, KeyListener {
|
|
|
|
private VueSession vue;
|
|
private TCPClient tcpClient;
|
|
|
|
protected ControleurSession(VueSession vue, Socket socketComm) throws IOException {
|
|
this.vue = vue;
|
|
this.tcpClient = new TCPClient(socketComm);
|
|
this.tcpClient.setObserverInputThread(this);
|
|
this.tcpClient.startInputThread();
|
|
}
|
|
|
|
// ---------- ACTION LISTENER OPERATIONS ----------//
|
|
@Override
|
|
public void actionPerformed(ActionEvent e) {
|
|
|
|
//Quand le bouton envoyer est presse
|
|
if ((JButton) e.getSource() == this.vue.getButtonEnvoyer()) {
|
|
String messageOut = this.vue.getZoneSaisie().getText();
|
|
System.out.println(messageOut);
|
|
|
|
//Si le texte field n'est pas vide
|
|
if (!messageOut.equals("")) {
|
|
|
|
//On recupere la date et on prepare les messages a afficher/envoyer
|
|
String date = this.getDateAndTime();
|
|
String messageToDisplay = date+" Moi : "+ messageOut;
|
|
messageOut = date +" "+ Utilisateur.getSelf().getPseudo() + " : " + messageOut+"\n";
|
|
|
|
try {
|
|
this.tcpClient.sendMessage(messageOut);
|
|
} catch (MauvaisTypeMessageException | IOException e1) {
|
|
// TODO Auto-generated catch block
|
|
e1.printStackTrace();
|
|
}
|
|
|
|
this.vue.appendMessage(messageToDisplay + "\n");
|
|
this.vue.resetZoneSaisie();
|
|
}
|
|
}
|
|
|
|
}
|
|
|
|
//Methode appelee quand l'inputStream de la socket de communication recoit des donnees
|
|
@Override
|
|
public void update(Object o, Object arg) {
|
|
if(arg instanceof MessageTexte) {
|
|
MessageTexte messageIn = (MessageTexte) arg;
|
|
System.out.println(messageIn.getContenu());
|
|
this.vue.appendMessage(messageIn.getContenu());
|
|
}else {
|
|
}
|
|
|
|
}
|
|
|
|
|
|
|
|
private String getDateAndTime() {
|
|
DateTimeFormatter dtf = DateTimeFormatter.ofPattern("yyyy/MM/dd HH:mm:ss");
|
|
LocalDateTime now = LocalDateTime.now();
|
|
return "<"+dtf.format(now)+">";
|
|
}
|
|
|
|
@Override
|
|
public void keyTyped(KeyEvent e) {
|
|
// TODO Auto-generated method stub
|
|
|
|
}
|
|
|
|
@Override
|
|
public void keyPressed(KeyEvent e) {
|
|
if(e.getKeyCode() == KeyEvent.VK_ENTER) {
|
|
if(!e.isShiftDown()) {
|
|
this.vue.getButtonEnvoyer().doClick();
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void keyReleased(KeyEvent e) {
|
|
// TODO Auto-generated method stub
|
|
|
|
}
|
|
|
|
}
|