Example #1
0
  public static void main(String args[]) throws Exception {
    /** On demande le port de connexion à l'utilisateur du programme */
    Scanner sc = new Scanner(System.in);
    System.out.println("Port d'écoute local : ");
    int m_port_listening = sc.nextInt();

    /** Le tout premier peer entrera un port distant = à son port local. */
    System.out.println("Port d'écoute de l'hôte distant : ");
    int m_remote_port = sc.nextInt();

    /** On demande la taille des paquets qui seront envoyés */
    System.out.println("Taille des paquets : ");
    int m_paquet_size = sc.nextInt();

    /**
     * On lance le thread qui écrira les messages délivrés dans un fichier. Ce fichier servira à la
     * vérification autonome du total ordonnancement des messages délivrés.
     */
    FileThread file_thread = new FileThread(m_port_listening);
    file_thread.start();

    /** Création de l'Engine et du Peer */
    NioEngine engine = new NioEngine(m_paquet_size);
    Peer peer = new Peer(engine, file_thread);

    /** On lance le thread qui fera tourner l'Engine */
    MainThread main_thread = new MainThread(engine, m_port_listening, m_remote_port, peer);
    main_thread.start();

    /** Il faut appuyer sur la touche entrée pour que le programme s'arrête. */
    while (true) {
      sc.nextLine();
      if (sc.hasNextLine()) {
        break;
      }
    }
    sc.close();

    /** On dit à tout le monde de s'arrêter. */
    engine.m_running = false;
    engine.pw.close();

    /**
     * On demande au file_thread de continuer l'écriture jusqu'à ce qu'il n'y ait plus de messages
     * délivrés à écrire dans le fichier.
     */
    file_thread.end(engine.m_has_accept, m_port_listening, m_remote_port);
  }
Example #2
0
    @Override
    public void run() {
      try {
        super.run(); // To change body of generated methods, choose Tools | Templates.

        /** On écoute des connexions */
        engine.listen(port_listening, peer);

        /** On se connecte avec le peer de port d'écoute remote_port. */
        InetAddress m_localhost = InetAddress.getByName("localhost");
        if (port_listening != remote_port) {
          engine.connect(m_localhost, remote_port, peer);
        }

        engine.mainloop();
      } catch (UnknownHostException ex) {
        Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        System.exit(-1);
      } catch (IOException ex) {
        Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        System.exit(-1);
      }
    }
Example #3
0
  @Override
  public void deliver(Channel channel, byte[] bytes) {

    ByteBuffer buffer = ByteBuffer.allocate(bytes.length);
    buffer.put(bytes);
    buffer.flip();
    int length = buffer.getInt();
    byte messageID = buffer.get();

    switch (messageID) {
      case 0:
        byte[] deliver_array = new byte[length - 9];
        int sender_id = buffer.getInt();
        int lamport_timestamp = buffer.getInt();
        buffer.get(deliver_array, 0, deliver_array.length);
        /*for (int i = 0; i < deliver_array.length; i++) {
        	System.out.print(deliver_array[i] + " ");
        }*/
        System.out.println("\n" + "---------------------------------------------------");
        break;

      case 3:
        sender_id = buffer.getInt();
        lamport_timestamp = buffer.getInt();

        /*Si on est à l'origine du BroadcastJoin, on envoie d'abord la liste des autres peers avant de nous même se bloquer*/
        if (engine.getId() == sender_id) {
          engine.setTimestamp(engine.getTimestamp() + 1);
          Message m =
              new MemberListMessage(engine.getTimestamp(), engine.getId(), engine.getPeersList());
          byte[] message_array = m.sendMessage();
          for (Channel other_channel : engine.getChannelList()) {
            if (((NioChannel) other_channel).isNouveauvenu()) {
              other_channel.send(message_array, 0, message_array.length);
              ((NioChannel) other_channel).setNouveauvenu(false);
            }
          }
        }
        ((NioChannel) channel).setBlocked(true);
        break;
    }
  }