Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- package com.usthb.modeles;
- import java.io.IOException;
- import java.io.ObjectInputStream;
- import java.io.ObjectOutputStream;
- import java.net.ServerSocket;
- import java.net.Socket;
- import java.util.ArrayList;
- import java.util.HashMap;
- public class ServeurMiniFacebook {
- //TOUS LES ABONNES
- private static HashMap<String,Abonne> baseAbonnes= new HashMap<String,Abonne>(); //la cl? est le username de l'abonn?
- //TOUS LES GROUPES
- private static HashMap<String,Groupe> baseGroupes= new HashMap<String,Groupe>(); //la cl? est le nom du groupe
- //TOUS LES POSTS
- private static HashMap<Integer,Post> basePosts= new HashMap<Integer,Post>();//la clé est la le codePost
- //methode qui retourne l'abonné à partir d'un username
- public static Abonne getAbonne(String username) {
- return baseAbonnes.get(username);
- }
- //methode qui retourne le groupe à partir d'un groupName
- public static Groupe getGroupe(String groupName) {
- return baseGroupes.get(groupName);
- }
- //methode qui retourne le poste à partir du code post
- public static Post getPost(Integer codePost) {
- return basePosts.get(codePost);
- }
- //SOME TESTS
- public static boolean userExiste(String username) {
- return baseAbonnes.containsKey(username);
- }
- public static boolean groupeExiste(String groupName) {
- return baseGroupes.containsKey(groupName);
- }
- public static boolean postExiste(int codePost) {
- return baseGroupes.containsKey(codePost);
- }
- /***************REQUETES*****************/
- /************ABONNES***********/
- public static Abonne inscrireAbonne(Abonne abo){ //MAJ : ENVOYER PARAM ABONNE ET LE CREER ICI
- baseAbonnes.put(abo.getUsername(),abo);
- return abo;
- }
- public static void supprimerAbonne(String user) {//d?sactiver le compte
- // TROUVER SOLUTION
- // supprimerTousLesAmis(abo);
- baseAbonnes.remove(user);
- }
- public static void quitterGroupe(String user,String grp){
- if(groupeExiste(grp)) {
- getGroupe(grp).supprimerMembre(user);
- getAbonne(user).quitterGroupe(grp);
- }
- }
- public static void rejoindreGroupe(String user,String grp){
- Abonne abo=getAbonne(user);
- Groupe g=getGroupe(grp);
- if(g!=null){
- g.ajouterMembre(abo);
- abo.ajouterGroupe(g);
- }
- }
- public static void ajouter(String user,String ami,String message) {//ajouter qlqn
- Abonne abo=getAbonne(ami);
- if(abo!=null){
- abo.ajouterInvitation(new Invitation(user,message));
- }
- }
- public static void refuserInvitation(String user1,int indice){
- getAbonne(user1).refuserInvitation(indice);
- }
- public static void accepterInvitation(String user1,int indice){
- Abonne abo1=getAbonne(user1),
- abo2=getAbonne(abo1.accepterInvitation(indice));
- if(abo2==null) return;
- abo1.ajouterAmi(abo2);
- abo2.ajouterAmi(abo1);
- notifier(abo2,user1," votre invitation.","invitation");
- }
- /*
- public static void supprimerInvitation(String user,Invitation inv){
- Abonne abo=getAbonne(user);
- ArrayList invits;
- invits = inv.getRecepteur().getInvitations();
- invits.remove(inv);
- }
- */
- public static void supprimerAmi(String abo,String ami){//supprimer qlqn de sa liste d'ami
- getAbonne(abo).supprimerAmi(ami);
- getAbonne(ami).supprimerAmi(abo);
- }
- public static void supprimerTousLesAmis(String user){
- getAbonne(user).supprimerTousLesAmis();
- }
- /************GROUPES************/
- public static Groupe creerGroupe(String createur,String groupName){
- Abonne abo=getAbonne(createur);
- Groupe grp=new Groupe(abo,groupName);
- baseGroupes.put(groupName, grp);
- abo.ajouterGroupe(grp);
- return grp;
- }
- public static void supprimerGroupe(String grp) {
- baseGroupes.remove(grp);
- }
- public static void afficherGroupe(String user) {//affiche tous les groupes o? l'abonn? est membre
- getAbonne(user).afficherGroupes();
- }
- /*************POSTES*************/
- public static Post creerPost(String poster,String contenu, String visibilite){
- Post p=new Post(poster, contenu, visibilite);
- basePosts.put(p.getCodePost(), p);
- return p;
- }
- //connexion & déconnexion
- public static boolean checkPassword(String user,String password){
- return getAbonne(user).getPassword().equals(password);
- }
- public static void seConnecter(String user) {
- getAbonne(user).setOnline(true);
- }
- public static void seDeconnecter(String user) {
- getAbonne(user).setOnline(false);
- }
- public static void notifier(Abonne recepteur ,String emetteur,String information,String type){
- recepteur.ajouterNotification(new Notification(emetteur,new StringBuilder(information),type));
- }
- public static void alerterAmis(Abonne abo){
- HashMap<String,Abonne> listeAmis = abo.getListeAmis();
- for(Abonne recepteur: listeAmis.values()) {
- notifier(recepteur,abo.getUsername()," un nouveau statut.","publication");
- }
- }
- public static void alerterMembres(Groupe grp,String user){
- HashMap<String,Abonne> membres = grp.getMembres();
- for(Abonne recepteur: membres.values()) {
- notifier(recepteur,user," un nouveau statut dans "+grp.getGroupName()+".","publication");
- }
- }
- //PUBLIER SUR MUR
- public static void publier(String user,String contenu,String visibilite) {
- Abonne abo=getAbonne(user);
- Post p=creerPost(user,contenu,visibilite);
- abo.ajouterPost(p.getCodePost()); //ajouter le post au mur de celui qui l'a post?
- if(!visibilite.toLowerCase().equals("privé")) {
- alerterAmis(abo); //alerter les amis d'abo de la publication d'un certain contenu
- abo.ajouterActuAmis(p.getCodePost());
- }
- }
- //PUBLIER DANS UN GROUPE
- public static void publier(String user,String contenu, String grp,String visibilite) {//publier dans groupe
- Groupe g=getGroupe(grp);
- if(g!=null && g.membreExiste(user))
- {
- Post p =creerPost(user,contenu,visibilite);
- g.ajouterPost(p.getCodePost());
- alerterMembres(g,user); //alerter les membres du groupe
- g.ajouterActuMembres(p.getCodePost());
- }
- }
- //METHODES EPINGLER (EN CHOISIR 2)
- public static void epingler(Post p) {
- p.setEpinglee(true);
- //ça peut servir à l'afficher en premier
- }
- public static void desepingler(Post p) {
- p.setEpinglee(false);
- }
- public static ArrayList<Post> rechercher(String chercheur,String recherche) {
- Abonne abo1=getAbonne(chercheur),
- abo2=getAbonne(recherche);
- ArrayList<Integer> codes= abo2.getMur();
- ArrayList<Post> mur= new ArrayList<>();
- Post p;
- Visibilite v= Visibilite.publique;
- // POUR SAVOIR QUI RECHERCHE QUI POUR POUVOIR CONNAITRE LA VISIBILITE ACCORDEE
- if(chercheur.equals(recherche)) v= Visibilite.privé;
- else if(abo2.sontAmis(chercheur)) v= Visibilite.amis;
- else if(abo2.ontAmisCommuns(abo1)) v=Visibilite.listeamis;
- int k=0;
- for(int i:codes){
- p=getPost(i);
- if(p!=null && p.visible(v)){
- if(!p.isEpinglee())
- mur.add(k,p);
- else{
- mur.add(0,p);
- k++;
- }
- }
- }
- return mur;
- }
- public static ArrayList<Post> rechercherGroupe(String user,String recherche){
- Groupe grp = getGroupe(recherche);
- ArrayList<Integer> codes = grp.getMur();
- ArrayList<Post> mur = new ArrayList<Post>();
- Post p;
- Visibilite v;
- if(grp.membreExiste(user))
- v= Visibilite.groupe;
- else
- v= Visibilite.publique;
- int k=0;
- for(int i:codes){
- p=getPost(i);
- if(p!=null && p.visible(v)){
- if(!p.isEpinglee())
- mur.add(k,p);
- else{
- mur.add(0,p);
- k++;
- }
- }
- }
- return mur;
- }
- public static void reagir(String user,Reaction react,int codePost) {//abo => abonné ayant r?agi, poster=>abonné ayant posté le post p
- Post p = getPost(codePost);
- if(p==null) return;
- boolean reagis=p.aReagis(user);
- if(reagis && p.memeReaction(user,react))
- p.supprimerReaction(user); //supprimer la réaction de l'ensemble des réactions au post
- else{
- p.ajouterReaction(user,react);
- if(!reagis && !user.equals(p.getPoster())) //if(abo==poster) il réagi à sa propre publication (habes)
- notifier(getAbonne(p.getPoster()),user," à votre publication.","reaction");//alerter le poster seulement de la réaction d'abo à son post
- }
- }
- //REAGIR A UN COMMENTAIRE
- public static void reagir(String user,Reaction react,int codePost,int indice) {
- Post p = getPost(codePost);
- if(p==null) return;
- Commentaire c = p.getComment(indice);
- if(c==null) return;
- boolean reagis=c.aReagis(user);
- if(reagis && c.memeReaction(user,react))
- p.supprimerReaction(user); //supprimer la réaction de l'ensemble des réactions au commentaire
- else{
- c.ajouterReaction(user,react);
- if(!reagis && !user.equals(c.getUser())) //if(abo==poster) il réagi à sa propre publication (habes)
- notifier(getAbonne(p.getPoster()),user," à votre commentaire.","reaction");//alerter le poster seulement de la réaction d'abo à son post
- }
- }
- //METHODES COMMENTAIRES
- public static void commenter(String user,int codePost,String comment) { //abo => abonn? qui va commenter, poster=>abonn? qui a post? le post p
- Post p=getPost(codePost);
- if(p==null) return;
- p.ajouterCommentaire(new Commentaire(user,new StringBuilder(comment),codePost));
- //alerter le poster si ce n'est pas lui qui a commenté a publication
- if(!user.equals(p.getPoster()))
- notifier(getAbonne(p.getPoster()),user," votre publication.","commentaire");
- }
- //supprimer un commentaire
- public static void supprimerCommentaire(String user,int codePost,int indice) { //commentaire de user
- Post p = getPost(codePost);
- if(p==null) return;
- p.supprimerCommentaire(indice);
- }
- //partager dans un groupe
- public static void partager(String user,int codePost,String grp,String visibilite) {
- Post p=getPost(codePost);
- if(p==null) return;
- Groupe g = getGroupe(grp);
- if(g!=null && g.membreExiste(user)) //abo doit etre membre du groupe
- publier(user,"a partagé la publication de "
- +p.getPoster()+"\n"+p.getContenu(),grp,visibilite);
- }
- //partager un post
- public static void partager(String user,int codePost, String visibilite) {
- Post p = getPost(codePost);
- if(p==null) return;
- publier(user,"a partagé la publication de "
- +p.getPoster()+"\n"+p.getContenu(),visibilite);
- }
- public static void lireNotification(String user,int indice){
- ArrayList<Notification> notifs= getAbonne(user).getNotifications();
- notifs.get(indice).setEtat(true);
- }
- public static ArrayList<Post> filActu(String user){
- Abonne abo=getAbonne(user);
- ArrayList<Integer> codes = abo.getActu();
- ArrayList<Post> actu = new ArrayList<Post>();
- Post p;
- for(int i:codes){
- p=getPost(i);
- if(p!=null)
- actu.add(0,p);
- }
- return actu;
- }
- private static void supprimerPost(int codePost){
- Abonne abo= getAbonne(getPost(codePost).getPoster());
- abo.supprimerPost(codePost);
- abo.supprimerActuAmis(codePost);
- basePosts.remove(codePost);
- }
- public static byte etatAmis(String user,String ami){
- Abonne abo=getAbonne(user);
- Abonne abo2=getAbonne(ami);
- boolean check1=abo.invitationEnvoyee(ami),
- check2=abo2.invitationEnvoyee(user);
- if(abo2.sontAmis(user))
- return 3;
- else if(check1||check2 ){
- if(check1)
- return 1;
- else
- return 2;
- }
- else
- return 0;
- }
- ////////////////////////////LE MAIN////////////////////////////////////////////////////
- public static void main(String args[]) throws IOException, ClassNotFoundException{
- //BEGIN OF DECLARATION
- Abonne sfn= new Abonne("Zeghoud","Sofiane","20/05/1998","homme","sofman","imene","djami3a","info","isil");
- Abonne imn= new Abonne("Kerboua","Imene","30/05/1999","femme","minette","sofiane","","","huehue");
- Abonne azdn= new Abonne("Bouchtout","Azzeddine","20/04/1995","Homme","PapiAzzou","haha","etudiant","info","universitaire");
- Abonne hda = new Abonne("Hassani","Hadda","20/04/1998","femMe","Hino","sofiane<3","etudiante","info","universitaire");
- /*Abonne ada = new Abonne("Macefeuk","Adda","20/04/1996","HoMme","toeflboi69","haha","etudiant","info","universitaire");
- Abonne scra= new Abonne("Laliam","Secoura","20/04/2000","femMe","sucrette","sofiane<3","etudiante","info","universitaire");
- */
- inscrireAbonne(sfn);
- inscrireAbonne(imn);
- inscrireAbonne(hda);
- inscrireAbonne(azdn);
- ajouter("sofman","minette","cc cv");
- ajouter("PapiAzzou","minette","hello you");
- ajouter("Hino","minette","slt sccept pliz");
- ajouter("PapiAzzou","sofman","bla bla");
- publier("minette","Ceci est pour everybody !","publique");
- publier("minette","Ceci est pour les amis de mes amis","listeamis");
- publier("sofman","Hey there!","publique");
- publier("sofman","I'm watchin' a movie XD","amis");
- publier("minette","Ceci est pour mes amis","amis");
- publier("minette","blabla","amis");
- publier("minette","oh","amis");
- publier("minette","shit","amis");
- publier("minette","fuuuu","amis");
- publier("minette","This is le poste le plus loooooooooooooooooooooooooooooooooooooooooooooooong !","amis");
- publier("minette","Ceci est pour moi-même","privé");
- publier("PapiAzzou","Hey there!","publique");
- //END OF DECLARATION
- ServerSocket socket=null;
- Socket serveur=null;
- ObjectInputStream in=null;
- ObjectOutputStream out=null;
- String username,password,ami,message,visibilite,groupe;
- Abonne abo,abo2;
- Groupe grp;
- Post p;
- int indice,code;
- Integer ind;
- boolean check;
- while(true){
- try{
- socket=new ServerSocket(2018);
- serveur = socket.accept();
- out=new ObjectOutputStream(serveur.getOutputStream());
- in=new ObjectInputStream(serveur.getInputStream());
- byte choix;
- choix = in.readByte();
- switch(choix){
- case 1 : //LA CONNEXION
- username=(String)in.readObject();
- check=userExiste(username);
- out.writeBoolean(check);
- out.flush();
- if(!check) break;
- password=(String) in.readObject();
- check=checkPassword(username,password);
- out.writeBoolean(check);
- out.flush();
- if(!check) break;
- seConnecter(username);
- break;
- case 2: //L'INSCRIPTION
- username=(String) in.readObject();
- check = !userExiste(username);
- out.writeBoolean(check);
- out.flush();
- if(!check) break;
- abo= new Abonne((String)in.readObject(),
- (String)in.readObject(),
- (String)in.readObject(),
- (String)in.readObject(),
- username,
- (String)in.readObject(),
- (String)in.readObject(),
- (String)in.readObject(),
- (String)in.readObject());
- inscrireAbonne(abo);
- break;
- case 3: //LA DECONNEXION
- username=(String) in.readObject();
- seDeconnecter(username);
- break;
- case 4: //ENVOYER LA LISTE DE NOTIFICATIONS
- username=(String) in.readObject();
- out.writeObject(getAbonne(username).getNotifications());
- out.flush();
- break;
- case 5: //ENVOYER LA LISTE D'INVITATIONS
- username=(String) in.readObject();
- out.writeObject(getAbonne(username).getInvitations());
- out.flush();
- break;
- case 6: //AJOUTER
- username=(String) in.readObject();
- ami=(String) in.readObject();
- message=(String) in.readObject();
- switch(etatAmis(username,ami)){
- case 0:
- ajouter(username,ami,message);
- break;
- case 1:
- //I DON'T KNOW i want it to accept the invitation but ma3endish l'indice
- break;
- case 2:
- getAbonne(ami).annulerInvitation(username);
- break;
- case 3:
- supprimerAmi(username,ami);
- break;
- }
- break;
- case 7: //LIRE UNE NOTIFICATION
- username=(String) in.readObject();
- indice=in.read();
- lireNotification(username,indice);
- break;
- case 8: //ACCEPTER INVITATION
- username=(String) in.readObject();
- indice= in.read();
- accepterInvitation(username,indice);
- break;
- case 9: //REFUSER INVITATION
- username=(String) in.readObject();
- indice=in.read();
- refuserInvitation(username,indice);
- break;
- case 10: //ENVOYER LA LISTE DES POSTS DU FIL D'ACTUALITES
- username=(String) in.readObject();
- ArrayList<Post> posts=filActu(username);
- out.writeObject(posts);
- out.flush();
- break;
- case 11: //REAGIR A UN POST OU A UN COMMENTAIRE
- username=(String) in.readObject();
- Reaction react=(Reaction) in.readObject();
- code=in.read();
- ind=(Integer) in.readObject();
- if(ind==null)
- reagir(username, react, code);
- else
- reagir(username, react, code, ind);
- break;
- case 12: //ENVOYER AL LISTE DES POSTS DU MUR DE QUELQU'UN
- username=(String) in.readObject();
- ami=(String) in.readObject();
- ArrayList<Post> mur=rechercher(username,ami);
- out.writeObject(mur);
- out.flush();
- break;
- case 13://EPINGLER UN POST
- indice=in.read(); //indice=codePost
- p=getPost(indice);
- if(p==null) break;
- if(!p.isEpinglee())
- epingler(p);
- else
- desepingler(p);
- System.out.println(getPost(indice).isEpinglee());
- break;
- case 14://SUPPRIMER UN POST
- indice=in.read(); //indice=codePost
- supprimerPost(indice);
- break;
- case 15://MASQUER UN POST
- username= (String) in.readObject();
- indice = in.read();
- getAbonne(username).supprimerActu(indice);
- break;
- case 16: //CE QUE AFFICHE LE BOUTON AJOUTER
- username= (String) in.readObject();
- ami= (String) in.readObject();
- out.writeByte(etatAmis(username,ami));
- out.flush();
- break;
- case 17://PUBLIER SUR LE MUR
- username= (String) in.readObject();
- message=(String) in.readObject();
- visibilite=(String) in.readObject();
- publier(username, message, visibilite);
- break;
- case 18: //CREER UN GROUPE
- username= (String) in.readObject();
- groupe= (String) in.readObject();
- check=!groupeExiste(groupe);
- out.writeBoolean(check);
- if(!check) break;
- creerGroupe(username,groupe);
- break;
- case 19: //REJOINDRE OU QUITTER UN GROUPE
- username= (String) in.readObject();
- groupe= (String) in.readObject();
- grp=getGroupe(groupe);
- if(grp.membreExiste(username))
- quitterGroupe(username,groupe);
- else
- rejoindreGroupe(username,groupe);
- break;
- case 20: //VERIFIER SI UN MEMBRE EXISTE DANS UN GROUPE
- username= (String) in.readObject();
- groupe= (String) in.readObject();
- out.writeBoolean(getGroupe(groupe).membreExiste(username));
- out.flush();
- break;
- case 21: //ENVOYER LES INFOS D'UN MEMBRE
- ami= (String) in.readObject();
- abo= getAbonne(ami);
- out.writeObject(abo.getInfos());
- out.flush();
- break;
- }
- }catch(IOException e){
- System.out.println(e+" Impossible de se connecter");
- }finally{
- in.close();
- out.close();
- socket.close();
- serveur.close();
- }
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement