package com.forest.ape.server;
import java.io.ByteArrayOutputStream;
import java.io.DataOutputStream;
import java.io.IOException;
import java.nio.ByteBuffer;
import com.forest.ape.mq.impl.SendWorkerMQ;
import com.forest.ape.nio.ServerCnxn;
import com.forest.ape.server.persistence.Request;
import com.techq.available.data.BasicPacket;
import com.techq.available.quorum.handler.Leader;
import com.techq.available.quorum.handler.Learner;
/**
* Name it Ape, sound funny!
*
* @author CHQ 2012-2-6
*/
public class ApeServer extends Server {
SendWorkerMQ mq;
Learner peer;
DataTree dt;
public ApeServer(Learner learner) throws Exception {
this.peer = learner;
if (this.peer.isLeader())
mq = SendWorkerMQ.createMQWorker();
else
mq = null;
}
/**
*
* @param cnx
* @param buf
* @throws IOException
*/
public void processPacket(ServerCnxn cnx, ByteBuffer buf)
throws IOException {
BasicPacket packet = new BasicPacket();
packet.setType(Type.DATA);
packet.setFrom(peer.getId());
packet.setData(buf.array());
peer.addPackets(packet);
}
public void shutdown() {
}
/**
* send a request packet to the leader
*
* @param request
* the request from the client
* @throws IOException
*/
void request(com.forest.ape.server.persistence.Request request) throws IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
DataOutputStream oa = new DataOutputStream(baos);
oa.writeLong(request.sessionId);
oa.writeInt(request.cxid);
oa.writeInt(request.type);
if (request.request != null) {
request.request.rewind();
int len = request.request.remaining();
byte b[] = new byte[len];
request.request.get(b);
request.request.rewind();
oa.write(b);
}
oa.close();
BasicPacket qp = new BasicPacket(Type.DATA, -1, peer.getId(), baos.toByteArray());
writePacket(qp, true);
// BasicPacket qp = new BasicPacket(Leader.REQUEST, -1, baos
// .toByteArray(), request.authInfo);
//
}
private void writePacket(BasicPacket qp, boolean b) {
peer.addPackets(qp);
}
public void append(Request r) {
}
public void commit() {
}
}