package org.act.tstream.message.netty;
import org.jboss.netty.buffer.ChannelBuffer;
import org.jboss.netty.buffer.ChannelBufferOutputStream;
import org.jboss.netty.buffer.ChannelBuffers;
import org.jboss.netty.channel.Channel;
enum ControlMessage {
EOB_MESSAGE((short) -201), OK_RESPONSE((short) -200);
private short code;
private long timeStamp;
// private constructor
private ControlMessage(short code) {
this.code = code;
}
/**
* Return a control message per an encoded status code
*
* @param encoded
* @return
*/
static ControlMessage mkMessage(short encoded) {
for (ControlMessage cm : ControlMessage.values()) {
if (encoded == cm.code)
return cm;
}
return null;
}
int encodeLength() {
return 10; // short + long
}
/**
* encode the current Control Message into a channel buffer
*
* @throws Exception
*/
ChannelBuffer buffer() throws Exception {
ChannelBufferOutputStream bout = new ChannelBufferOutputStream(
ChannelBuffers.directBuffer(encodeLength()));
write(bout);
bout.close();
return bout.buffer();
}
void write(ChannelBufferOutputStream bout) throws Exception {
bout.writeShort(code);
bout.writeLong(System.currentTimeMillis());
}
long getTimeStamp() {
return timeStamp;
}
void setTimeStamp(long timeStamp) {
this.timeStamp = timeStamp;
}
}