package org.robotninjas.barge.state; import org.robotninjas.barge.api.AppendEntries; import org.robotninjas.barge.api.RequestVote; import javax.annotation.Nonnull; /** * A listener which is notified of protocol messages received by a {@link org.robotninjas.barge.state.RaftStateContext} * instance. */ public interface RaftProtocolListener { /** * Called when {@code raft} instance is initialized. * <p> * This method is called <em>after</em> instance has been initialized. * </p> * @param raft the raft instance. */ void init(Raft raft); /** * Called after append entries has been received and processed by {@code raft} instance. * * @param raft the raft instance receiving RPC. * @param entries the appended entries. */ void appendEntries(@Nonnull Raft raft, @Nonnull AppendEntries entries); /** * Called after request vote has been received and processed by {@code raft} instance. * * @param raft the raft instance receiving RPC. * @param vote the vote request. */ void requestVote(@Nonnull Raft raft, @Nonnull RequestVote vote); /** * Called after commit request has been received and processed by {@code raft} instance. * @param raft the raft instance receiving RPC. * @param operation bytes to be committed to underlying state machine. Maybe empty. */ void commit(@Nonnull Raft raft, @Nonnull byte[] operation); }