package com.rila.chat.service;
import java.util.Iterator;
import org.springframework.stereotype.Component;
import com.rila.chat.dao.mongo.IMessagesHistoryMongo;
import com.rila.chat.server.Server;
import fr.cesi.chat.domain.Event;
import fr.cesi.chat.domain.Message;
import fr.cesi.chat.domain.User;
import fr.cesi.chat.utils.Utils;
@Component
public class MessageService implements IMessageService{
@Override
public Message manageMessage(Server server, Message msgReceived, User userServer,IMessagesHistoryMongo messagesHistoryMongo){
/*
* Quand je reçois un message avec l'evenement CONNECTION_USER j'envoie aux users connectés 'toto vient de se connecté'.
*/
if (Event.CONNECTION_USER == msgReceived.getEvent()) {
msgReceived.setMessage(msgReceived.getUserFrom().getNickname() + " s'est connecté.");
msgReceived.setUserFrom(userServer);
}
/*
* Quand je reçois un message avec l'evenement pour changer de nom d'utilisateur je parcours la liste des utilisateurs, supprime l'ancien et rajoute le nouveau
*/
if (Event.CHANGING_STATUS_USERNAME == msgReceived.getEvent()) {
Iterator<User> iterator = server.getUsers().iterator();
while (iterator.hasNext()) {
User user = iterator.next();
String username = msgReceived.getUserFrom().getNickname();
if (username.equals(user.getNickname())) {
server.getUsers().remove(user);
server.getUsers().add(new User(username, msgReceived.getUserFrom().getStatut(), msgReceived.getUserFrom().getIp()));
server.sendUsers(server.getUsers());
// msgReceived = new Message(Utils.getDateNow(), userServer, null, username + " est passé " + user.getStatut().getLibelle(), Evenement.SERVER);
}
}
}
/*
* Quand je reçois un message avec l'evenement pour changer de nom d'utilisateur je parcours la liste des utilisateurs, supprime l'ancien et rajoute le nouveau
*/
if (Event.CHANGING_USERNAME == msgReceived.getEvent()) {
Iterator<User> iterator = server.getUsers().iterator();
while (iterator.hasNext()) {
User user = iterator.next();
String[] usernames = msgReceived.getUserFrom().getNickname().split(",");
String oldUsername = usernames[0];
String username = usernames[1];
if (oldUsername.equals(user.getNickname())) {
server.getUsers().remove(user);
server.getUsers().add(new User(username, msgReceived.getUserFrom().getStatut(), msgReceived.getUserFrom().getIp()));
server.sendUsers(server.getUsers());
msgReceived = new Message(Utils.getDateNow(), userServer, null, oldUsername + " a changé en " + username, Event.SERVER);
}
}
}
// Si on reçoit l'évenement deleting username
// on parcours la liste
if (Event.DELETING_USERNAME == msgReceived.getEvent()) {
Iterator<User> iterator = server.getUsers().iterator();
while (iterator.hasNext()) {
User user = iterator.next();
if (msgReceived.getUserFrom().getNickname().equals(user.getNickname())) {
msgReceived = new Message(Utils.getDateNow(), userServer, null, user.getNickname() + " s'est déconnecté.", Event.SERVER);
iterator.remove();
server.sendUsers(server.getUsers());
break;
}
}
}
if (msgReceived.getMessage() != null && !msgReceived.getMessage().isEmpty()) {
server.sendMessages(msgReceived);
// Enregistrement en bdd du message
// Envoie du message aux clients connectés
if (msgReceived.getEvent() != Event.SERVER && msgReceived.getEvent() != Event.CONNECTION_USER) {
messagesHistoryMongo.saveMessage(msgReceived); // A chaque message reçus on le sauvegarde en base
}
}
return null;
}
}