*/
public void handleWrite(IoSessionImpl session) {
Queue<IoFuture> writeQueue = session.getWriteQueue();
while(true) {
IoFuture ioFuture = writeQueue.peek();
if(ioFuture == null) {
session.setWriteControl(false);
return;
}
if(ioFuture.isComplete()) {
writeQueue.poll();
return;
}
if(ioFuture.getClass() == CloseFuture.class) {
if(ioFuture.equals(session.getCloseFuture())) {
//TODO:发生关闭事件
this.removeIoSessionNow(session.getCloseFuture());
writeQueue.poll();
return;
}
}
//进行写数据的处理,如果写发生异常,就返回再次取队例中的写,直到不再发生异常
try {
handleWriteFuture(session, (WriteFuture) ioFuture);
} catch (IOException e) {
//TODO:记录异常信息
e.printStackTrace();
if(ioFuture.equals(writeQueue.peek())) {
writeQueue.poll();
((WriteFuture)ioFuture).setComplete(e);
}
else {
throw new Error("发生严重错误");