protected void doProcess(final IdleRequest message, final ImapSession session, final String tag, final ImapCommand command, final Responder responder) {
try {
final MailboxManager mailboxManager = getMailboxManager();
final MailboxSession mailboxSession = ImapSessionUtils.getMailboxSession(session);
final SelectedMailbox sm = session.getSelected();
final MailboxListener idleListener;
if (sm != null) {
idleListener = new IdleMailboxListener(session, responder);
mailboxManager.addListener(sm.getPath(), idleListener , mailboxSession);
} else {
idleListener = null;
}
final AtomicBoolean idleActive = new AtomicBoolean(true);
session.pushLineHandler(new ImapLineHandler() {
/**
* @see
* org.apache.james.imap.api.process.ImapLineHandler
* #onLine(org.apache.james.imap.api.process.ImapSession, byte[])
*/
public void onLine(ImapSession session, byte[] data) {
String line;
if (data.length > 2) {
line = new String(data, 0, data.length - 2);
} else {
line = "";
}
if (idleListener != null) {
try {
mailboxManager.removeListener(sm.getPath(), idleListener, mailboxSession);
} catch (MailboxException e) {
if (session.getLog().isInfoEnabled()) {
session.getLog().info("Unable to remove idle listener from mailbox", e);
}
}