package put.consensus; import java.io.IOException; import java.util.Scanner; import lsr.common.Configuration; import put.consensus.listeners.CommitListener; import put.consensus.listeners.ConsensusListener; import put.consensus.listeners.RecoveryListener; class ListenerImpl implements CommitListener, RecoveryListener, ConsensusListener { private final Commitable commitable; private Integer number = 0; public ListenerImpl(Commitable c) { commitable = c; } public void decide(Object obj) { System.out.println("Decided: " + obj); if (Math.random() > 0.66) { number = number + 1; commitable.commit(number); } if (Math.random() > 0.9) { number = number + 1; commitable.commit(number); } } public void onCommit(Object commitData) { System.out.println("TimeJustAfterCommit: " + commitData); } public void recoverFromCommit(Object commitData) { System.out.println("RecoveringFromCommit: " + commitData); number = (Integer) commitData; } public void recoveryFinished() { System.out.println("Recovering finished!"); } } public class UsageTestAndExample2 { public static void main(String[] args) throws IOException { if (args.length != 1) { System.err.println("Need replica number"); System.exit(1); } int localId = 0; try { localId = Integer.parseInt(args[0]); } catch (NumberFormatException e) { System.err.println("Need replica number"); System.exit(1); } SerializablePaxosConsensus consensus = new SerializablePaxosConsensus(new Configuration(), localId); ListenerImpl listener = new ListenerImpl(consensus); consensus.addConsensusListener(listener); consensus.addCommitListener(listener); consensus.addRecoveryListener(listener); consensus.start(); while (true) { System.out.println("Hello!\n" + " 1) Propose sth\n" + " 2) Record in log\n" + " 3) Retrive from log\n" + " 4) Get value count\n" + " 0) Exit\n" + " :"); Scanner sc = new Scanner(System.in); switch (Integer.parseInt(sc.nextLine())) { case 1: System.out.print("What: "); consensus.propose(sc.nextLine()); break; case 4: System.out.println("Highest requestID: " + consensus.getHighestExecuteSeqNo()); break; case 0: System.exit(0); } } } }