package edu.brown.protorpc;
import java.nio.channels.SelectableChannel;
import java.nio.channels.ServerSocketChannel;
import java.nio.channels.SocketChannel;
public interface EventLoop {
public interface Handler {
public void acceptCallback(SelectableChannel channel);
public void readCallback(SelectableChannel channel);
public void connectCallback(SocketChannel channel);
/** @return true if this callback should remain enabled. */
public boolean writeCallback(SelectableChannel channel);
public void timerCallback();
}
/** Registers handler to receive read callbacks when channel is ready for reading. */
void registerRead(SelectableChannel channel, Handler handler);
/** Registers handler to receive accept callbacks when channel is ready for accepting. */
void registerAccept(ServerSocketChannel channel, Handler handler);
/** Registers handler to receive write callbacks when channel is ready for writing. */
void registerWrite(SelectableChannel channel, Handler handler);
/** Registers handler to receive connect callbacks when channel is connected. */
void registerConnect(SocketChannel channel, Handler handler);
/** Registers a one time callback to be triggered after timerMilliseconds. */
void registerTimer(int timerMilliseconds, Handler handler);
/** Cancel a timer that has not yet been called. */
void cancelTimer(Handler handler);
void runInEventThread(Runnable callback);
void run();
void runOnce();
}