Example usage for org.apache.http.nio.reactor SessionOutputBuffer flush

List of usage examples for org.apache.http.nio.reactor SessionOutputBuffer flush

Introduction

In this page you can find the example usage for org.apache.http.nio.reactor SessionOutputBuffer flush.

Prototype

int flush(WritableByteChannel channel) throws IOException;

Source Link

Document

Makes an attempt to flush the content of this buffer to the given destination WritableByteChannel .

Usage

From source file:com.ok2c.lightmtp.impl.protocol.ServiceShutdownCodec.java

@Override
public void produceData(final IOSession iosession, final ServerState sessionState)
        throws IOException, SMTPProtocolException {
    Args.notNull(iosession, "IO session");
    Args.notNull(sessionState, "Session state");

    SessionOutputBuffer buf = this.iobuffers.getOutbuf();

    if (this.pendingReply != null) {
        this.writer.write(this.pendingReply, buf);
        this.pendingReply = null;
    }//from www.  ja  v a  2s  .  c om

    if (buf.hasData()) {
        buf.flush(iosession.channel());
    }
    if (!buf.hasData()) {
        this.completed = true;
        iosession.close();
    }
}

From source file:com.ok2c.lightmtp.impl.protocol.ServiceReadyCodec.java

@Override
public void produceData(final IOSession iosession, final ServerState sessionState)
        throws IOException, SMTPProtocolException {
    Args.notNull(iosession, "IO session");
    Args.notNull(sessionState, "Session state");

    SessionOutputBuffer buf = this.iobuffers.getOutbuf();

    if (this.pendingReply != null) {
        this.writer.write(this.pendingReply, buf);
        this.pendingReply = null;
    }/*from  w w w.j ava  2s .  c o  m*/

    if (buf.hasData()) {
        buf.flush(iosession.channel());
    }
    if (!buf.hasData()) {
        this.completed = true;
        iosession.setEventMask(SelectionKey.OP_READ);
    }
}

From source file:com.ok2c.lightmtp.impl.protocol.SendQuitCodec.java

@Override
public void produceData(final IOSession iosession, final ClientState sessionState)
        throws IOException, SMTPProtocolException {
    Args.notNull(iosession, "IO session");
    Args.notNull(sessionState, "Session state");

    SessionOutputBuffer buf = this.iobuffers.getOutbuf();

    switch (this.codecState) {
    case QUIT_READY:
        SMTPCommand quit = new SMTPCommand("QUIT");
        this.writer.write(quit, buf);
        this.codecState = CodecState.QUIT_RESPONSE_EXPECTED;
        break;/*from   www  .j  a va 2 s.  c  o m*/
    }

    if (buf.hasData()) {
        buf.flush(iosession.channel());
    }
    if (!buf.hasData()) {
        iosession.clearEvent(SelectionKey.OP_WRITE);
    }
}

From source file:com.ok2c.lightmtp.impl.protocol.SendRsetCodec.java

@Override
public void produceData(final IOSession iosession, final ClientState sessionState)
        throws IOException, SMTPProtocolException {
    Args.notNull(iosession, "IO session");
    Args.notNull(sessionState, "Session state");

    SessionOutputBuffer buf = this.iobuffers.getOutbuf();

    switch (this.codecState) {
    case RSET_READY:
        SMTPCommand quit = new SMTPCommand("RSET");
        this.writer.write(quit, buf);
        this.codecState = CodecState.RSET_RESPONSE_EXPECTED;
        break;/*from  w  ww .  ja  v a  2s  .  c  o m*/
    }

    if (buf.hasData()) {
        buf.flush(iosession.channel());
    }
    if (!buf.hasData()) {
        iosession.clearEvent(SelectionKey.OP_WRITE);
    }
}

From source file:com.ok2c.lightmtp.impl.protocol.SimpleSendHeloCodec.java

@Override
public void produceData(final IOSession iosession, final ClientState sessionState)
        throws IOException, SMTPProtocolException {
    Args.notNull(iosession, "IO session");
    Args.notNull(sessionState, "Session state");

    SessionOutputBuffer buf = this.iobuffers.getOutbuf();

    switch (this.codecState) {
    case HELO_READY:
        SMTPCommand helo = new SMTPCommand("HELO",
                AddressUtils.resolveLocalDomain(iosession.getLocalAddress()));

        this.writer.write(helo, buf);
        this.codecState = CodecState.HELO_RESPONSE_EXPECTED;
        break;//from  w w w  .j a v  a2  s . co m
    }

    if (buf.hasData()) {
        buf.flush(iosession.channel());
    }
    if (!buf.hasData()) {
        iosession.clearEvent(SelectionKey.OP_WRITE);
    }
}

From source file:com.ok2c.lightmtp.impl.protocol.SendLocalHeloCodec.java

@Override
public void produceData(final IOSession iosession, final ClientState sessionState)
        throws IOException, SMTPProtocolException {
    Args.notNull(iosession, "IO session");
    Args.notNull(sessionState, "Session state");

    SessionOutputBuffer buf = this.iobuffers.getOutbuf();

    switch (this.codecState) {
    case LHLO_READY:
        String helo = heloName;//from  ww w  .j  a v a  2s .c om
        if (helo == null) {
            helo = AddressUtils.resolveLocalDomain(iosession.getLocalAddress());
        }
        SMTPCommand ehlo = new SMTPCommand("LHLO", helo);

        this.writer.write(ehlo, buf);
        this.codecState = CodecState.LHLO_RESPONSE_EXPECTED;
        break;
    }

    if (buf.hasData()) {
        buf.flush(iosession.channel());
    }
    if (!buf.hasData()) {
        iosession.clearEvent(SelectionKey.OP_WRITE);
    }
}

From source file:com.ok2c.lightmtp.impl.protocol.ReceiveDataCodec.java

@Override
public void produceData(final IOSession iosession, final ServerState sessionState)
        throws IOException, SMTPProtocolException {
    Args.notNull(iosession, "IO session");
    Args.notNull(sessionState, "Session state");

    SessionOutputBuffer buf = this.iobuffers.getOutbuf();

    synchronized (sessionState) {
        if (this.pendingDelivery != null) {
            if (this.pendingDelivery.isDone()) {
                deliveryCompleted(sessionState);
                cleanUp();//w  w w.  j  av a2  s  .com
            }
            while (!this.pendingReplies.isEmpty()) {
                this.writer.write(this.pendingReplies.removeFirst(), buf);
            }
        }

        if (buf.hasData()) {
            buf.flush(iosession.channel());
        }
        if (!buf.hasData()) {
            if (sessionState.getDataType() != null) {
                this.completed = true;
                sessionState.reset();
            }
            iosession.clearEvent(SelectionKey.OP_WRITE);
        }
    }
}

From source file:com.ok2c.lightmtp.impl.protocol.ExtendedSendHeloCodec.java

@Override
public void produceData(final IOSession iosession, final ClientState sessionState)
        throws IOException, SMTPProtocolException {
    Args.notNull(iosession, "IO session");
    Args.notNull(sessionState, "Session state");

    SessionOutputBuffer buf = this.iobuffers.getOutbuf();

    String myHelo = heloName;// w  w  w  .  jav  a  2 s.  c om
    if (myHelo == null) {
        myHelo = AddressUtils.resolveLocalDomain(iosession.getLocalAddress());
    }
    switch (this.codecState) {
    case EHLO_READY:
        SMTPCommand ehlo = new SMTPCommand("EHLO", myHelo);
        this.writer.write(ehlo, buf);
        this.codecState = CodecState.EHLO_RESPONSE_EXPECTED;
        break;
    case HELO_READY:
        SMTPCommand helo = new SMTPCommand("HELO", myHelo);
        this.writer.write(helo, buf);
        this.codecState = CodecState.HELO_RESPONSE_EXPECTED;
        break;
    }

    if (buf.hasData()) {
        buf.flush(iosession.channel());
    }
    if (!buf.hasData()) {
        iosession.clearEvent(SelectionKey.OP_WRITE);
    }
}

From source file:com.ok2c.lightmtp.impl.protocol.PipeliningSendEnvelopCodec.java

@Override
public void produceData(final IOSession iosession, final ClientState sessionState)
        throws IOException, SMTPProtocolException {
    Args.notNull(iosession, "IO session");
    Args.notNull(sessionState, "Session state");
    if (sessionState.getRequest() == null) {
        if (sessionState.isTerminated()) {
            this.codecState = CodecState.COMPLETED;
        }/* www . ja v  a 2 s. com*/
        return;
    }

    SessionOutputBuffer buf = this.iobuffers.getOutbuf();
    DeliveryRequest request = sessionState.getRequest();

    switch (this.codecState) {
    case MAIL_REQUEST_READY:
        SMTPCommand mailFrom = new SMTPCommand("MAIL", "FROM:<" + request.getSender() + ">");
        this.writer.write(mailFrom, buf);

        this.recipients.addAll(request.getRecipients());

        for (String recipient : request.getRecipients()) {
            SMTPCommand rcptTo = new SMTPCommand("RCPT", "TO:<" + recipient + ">");
            this.writer.write(rcptTo, buf);
        }
        SMTPCommand data = new SMTPCommand("DATA");
        this.writer.write(data, buf);
        this.codecState = CodecState.MAIL_RESPONSE_EXPECTED;
        break;
    }

    if (buf.hasData()) {
        buf.flush(iosession.channel());
    }
    if (!buf.hasData()) {
        iosession.clearEvent(SelectionKey.OP_WRITE);
    }
}

From source file:com.ok2c.lightmtp.impl.protocol.PipeliningReceiveEnvelopCodec.java

@Override
public void produceData(final IOSession iosession, final ServerState sessionState)
        throws IOException, SMTPProtocolException {
    Args.notNull(iosession, "IO session");
    Args.notNull(sessionState, "Session state");

    SessionOutputBuffer buf = this.iobuffers.getOutbuf();

    synchronized (sessionState) {

        if (this.actionFuture != null) {
            SMTPReply reply = getReply(this.actionFuture);
            this.actionFuture = null;
            this.writer.write(reply, buf);
        }//from  w  w w .  ja v  a 2s  .  co m

        if (this.actionFuture == null) {
            while (!this.pendingActions.isEmpty()) {
                Action<ServerState> action = this.pendingActions.remove();
                Future<SMTPReply> future = action.execute(sessionState,
                        new OutputTrigger<SMTPReply>(sessionState, iosession));
                if (future.isDone()) {
                    SMTPReply reply = getReply(future);
                    this.writer.write(reply, buf);
                } else {
                    this.actionFuture = future;
                    break;
                }
            }
        }

        if (buf.hasData()) {
            buf.flush(iosession.channel());
        }
        if (!buf.hasData()) {
            if (sessionState.getDataType() != null) {
                this.completed = true;
            }
            if (sessionState.isTerminated()) {
                iosession.close();
            } else {
                iosession.clearEvent(SelectionKey.OP_WRITE);
            }
        }
    }
}