Exemplo n.º 1
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;
    }
  }