package put.consensus;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectOutputStream;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.LinkedBlockingQueue;
import lsr.paxos.client.Client;
public class ConsensusDelegateProposerImpl implements ConsensusDelegateProposer {
private Client client;
private BlockingQueue<byte[]> objectsToPropose = new LinkedBlockingQueue<byte[]>();
protected byte[] byteArrayFromObject(Object object) {
try {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
new ObjectOutputStream(bos).writeObject(object);
return bos.toByteArray();
} catch (Exception e) {
throw new RuntimeException(e);
}
}
public ConsensusDelegateProposerImpl() throws IOException {
client = new Client();
client.connect();
// Starting thread for new proposals
Thread thread = new Thread() {
public void run() {
try {
while (true) {
client.execute(objectsToPropose.take());
}
} catch (Exception e) {
throw new RuntimeException(e);
}
}
};
thread.start();
}
public void dispose() {
}
public void propose(Object obj) {
objectsToPropose.add(byteArrayFromObject(obj));
}
}