package com.meidusa.amoeba.monitor.net;
import java.nio.channels.SocketChannel;
import org.apache.log4j.Logger;
import com.meidusa.amoeba.monitor.MonitorConstant;
import com.meidusa.amoeba.monitor.io.MonitorPacketInputStream;
import com.meidusa.amoeba.monitor.packet.MonitorCommandPacket;
import com.meidusa.amoeba.net.Connection;
import com.meidusa.amoeba.net.io.PacketInputStream;
import com.meidusa.amoeba.net.io.PacketOutputStream;
public class MonitorClientConnection extends Connection {
private static Logger logger = Logger.getLogger(MonitorClientConnection.class);
public MonitorClientConnection(SocketChannel channel, long createStamp) {
super(channel, createStamp);
}
@Override
protected PacketInputStream createPacketInputStream() {
return new MonitorPacketInputStream();
}
@Override
protected PacketOutputStream createPacketOutputStream() {
return null;
}
protected void doReceiveMessage(byte[] message){
MonitorCommandPacket packet = new MonitorCommandPacket();
packet.init(message, this);
switch(packet.funType){
case MonitorConstant.FUN_TYPE_PING:
packet.funType = MonitorConstant.FUN_TYPE_OK;
this.postMessage(packet.toByteBuffer(this));
break;
case MonitorConstant.FUN_TYPE_AMOEBA_SHUTDOWN:{
logger.warn("shutdown command from IP="+this.getSocketId()+" , amoeba shutting down....");
this.postMessage(packet.toByteBuffer(this));
try {
Thread.sleep(1000L);
} catch (InterruptedException e) {
}
System.exit(0);
break;
}
default:{
packet.funType = MonitorConstant.FUN_TYPE_OK;
this.postMessage(packet.toByteBuffer(this));
break;
}
}
}
protected void messageProcess() {
}
}