try {
if ( event!=null && (event instanceof CometEventImpl))
((CometEventImpl)event).setWorkerThread();
- if (status == SocketStatus.OPEN) {
+ if (status == SocketStatus.OPEN_CALLBACK) {
+ if (response.isClosed()) {
+ // The event has been closed asynchronously, so call end instead of
+ // read to cleanup the pipeline
+ request.getEvent().setEventType(CometEvent.EventType.END);
+ request.getEvent().setEventSubType(null);
+ } else {
+ request.getEvent().setEventType(CometEvent.EventType.CALLBACK);
+ request.getEvent().setEventSubType(null);
+ }
+ } else if (status == SocketStatus.OPEN_WRITE) {
+ if (response.isClosed()) {
+ // The event has been closed asynchronously, so call end instead of
+ // read to cleanup the pipeline
+ request.getEvent().setEventType(CometEvent.EventType.END);
+ request.getEvent().setEventSubType(null);
+ } else {
+ request.getEvent().setEventType(CometEvent.EventType.WRITE);
+ request.getEvent().setEventSubType(null);
+ }
+ } else if (status == SocketStatus.OPEN_READ) {
if (response.isClosed()) {
// The event has been closed asynchronously, so call end instead of
// read to cleanup the pipeline
if (!response.isClosed() && !response.isError()) {
if (request.getAvailable()) {
// Invoke a read event right away if there are available bytes
- if (event(req, res, SocketStatus.OPEN)) {
+ if (event(req, res, SocketStatus.OPEN_READ)) {
comet = true;
res.action(ActionCode.ACTION_COMET_BEGIN, null);
}
// Check for failed sockets and hand this socket off to a worker
if (((desc[n*2] & Poll.APR_POLLHUP) == Poll.APR_POLLHUP)
|| ((desc[n*2] & Poll.APR_POLLERR) == Poll.APR_POLLERR)
- || (comet && (!processSocket(desc[n*2+1], SocketStatus.OPEN)))
+ || (comet && (!processSocket(desc[n*2+1], SocketStatus.OPEN_READ)))
|| (!comet && (!processSocket(desc[n*2+1])))) {
// Close socket and clear pool
if (comet) {
//check if thread is available
if ( isWorkerAvailable() ) {
unreg(sk, attachment, sk.readyOps());
- if (!processSocket(channel, SocketStatus.OPEN))
+ if (!processSocket(channel, SocketStatus.OPEN_READ))
processSocket(channel, SocketStatus.DISCONNECT);
} else {
result = false;