import java.io.*; import java.util.*; import java.net.*; import net.jxta.discovery.*; import net.jxta.document.*; import net.jxta.endpoint.*; import net.jxta.exception.*; import net.jxta.peergroup.*; import net.jxta.pipe.*; import net.jxta.protocol.*; import net.jxta.peer.*; import net.jxta.util.*; import net.jxta.id.*; /** * Classe d'ecoute des messages dans le groupe * Creation d'un pipe d'ecoute * Methode de traitement des messages entrant */ public class Serveur extends Thread implements PipeMsgListener { private PeerGroup peerGroup = null; //groupe d'appartenance du pair private InputPipe inputPipe = null; //pipe d'entree des messages private String monFichier = ""; //nom du fichier de l'annonce private DiscoveryService discovery = null; //service de publication des annonces private MesPairs monPair = null; //pair maitre du serveur /** * Constructeur de la classe Serveur */ public Serveur(MesPairs pair,String s,PeerGroup p) { monFichier = s; peerGroup = p; monPair = pair; } /** * Chargement de l'annonce et creation du pipe d'ecoute */ public void loadPipeAdv(String fileName) throws FileNotFoundException, IOException { //chargement de l'annonce FileInputStream file = new FileInputStream(fileName); MimeMediaType asMimeType = new MimeMediaType("text/xml"); PipeAdvertisement pipeAdv = (PipeAdvertisement) AdvertisementFactory.newAdvertisement(asMimeType, file); //creation du service de publication des annonces discovery = peerGroup.getDiscoveryService(); discovery.publish(pipeAdv,60000,60000); discovery.remotePublish(pipeAdv,(long) 60000); //creation du pipe d'ecoute PipeService pipeService = peerGroup.getPipeService(); inputPipe = pipeService.createInputPipe(pipeAdv, this); } /** * Lancement du serveur */ public void run() { try { loadPipeAdv(monFichier); } catch (Exception e) { System.out.println("\nErreur dans Serveur.run() : "); e.printStackTrace();} } /** * Notification d'arrivee des differents messages sur le pipe */ public void pipeMsgEvent(PipeMsgEvent event) { //recuperation du message venant d'arriver et de son type Message message = event.getMessage(); String type = message.getMessageElement("Type").toString(); //il s'agit d'un message texte provenant de la partie "chat" if (type.equals("MESSAGE")) { monPair.afficheMessage(message.getMessageElement("Auteur").toString() + ": " + message.getMessageElement("Texte").toString()); } //c'est un message de demande de la liste de documents (appui sur bouton "chercher") if (type.equals("DEMANDE_LISTE_DOCUMENTS")) { monPair.afficheMessage("Demande de liste de doc de :" + message.getMessageElement("Auteur").toString()); monPair.repondreListe(message.getMessageElement("Auteur").toString()); } //c'est un message contenant la liste des documents d'un pair if (type.equals("ENVOI_LISTE")) { monPair.afficheMessage("Reception liste de " + message.getMessageElement("Auteur").toString()); monPair.messageListeRecu(message.getMessageElement("Auteur").toString(),message.getMessageElement("Liste").toString()); } //message de demande d'un document particulier (appui sur bouton "afficher") if (type.equals("DEMANDE_DOC")) { monPair.traiterDemandeDocument(message.getMessageElement("Auteur").toString(),message.getMessageElement("NomDocument").toString()); } //reception d'un message contenant un document suite a une demande du pair if (type.equals("ENVOI_DOC")) { monPair.receptionDocument(message.getMessageElement("Auteur").toString(),message.getMessageElement("Contenu").toString()); } } }