com.koushikdutta.async.stream.OutputStreamDataSink Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of androidasync Show documentation
Show all versions of androidasync Show documentation
Asynchronous socket, http(s) (client+server) and websocket library for android. Based on nio, not threads.
package com.koushikdutta.async.stream;
import java.io.IOException;
import java.io.OutputStream;
import java.nio.ByteBuffer;
import com.koushikdutta.async.AsyncServer;
import com.koushikdutta.async.ByteBufferList;
import com.koushikdutta.async.DataSink;
import com.koushikdutta.async.callback.CompletedCallback;
import com.koushikdutta.async.callback.WritableCallback;
public class OutputStreamDataSink implements DataSink {
public OutputStreamDataSink() {
}
@Override
public void end() {
close();
}
public OutputStreamDataSink(OutputStream stream) {
setOutputStream(stream);
}
OutputStream mStream;
public void setOutputStream(OutputStream stream) {
mStream = stream;
}
public OutputStream getOutputStream() {
return mStream;
}
@Override
public void write(ByteBuffer bb) {
try {
mStream.write(bb.array(), bb.arrayOffset() + bb.position(), bb.remaining());
}
catch (IOException e) {
reportClose(e);
}
bb.position(0);
bb.limit(0);
}
@Override
public void write(ByteBufferList bb) {
try {
while (bb.size() > 0) {
ByteBuffer b = bb.remove();
mStream.write(b.array(), b.arrayOffset() + b.position(), b.remaining());
}
}
catch (IOException e) {
reportClose(e);
}
bb.clear();
}
WritableCallback mWritable;
@Override
public void setWriteableCallback(WritableCallback handler) {
mWritable = handler;
}
@Override
public WritableCallback getWriteableCallback() {
return mWritable;
}
@Override
public boolean isOpen() {
return closeReported;
}
@Override
public void close() {
try {
if (mStream != null)
mStream.close();
reportClose(null);
}
catch (IOException e) {
reportClose(e);
}
}
boolean closeReported;
public void reportClose(Exception ex) {
if (closeReported)
return;
closeReported = true;
if (mClosedCallback != null)
mClosedCallback.onCompleted(ex);
}
CompletedCallback mClosedCallback;
@Override
public void setClosedCallback(CompletedCallback handler) {
mClosedCallback = handler;
}
@Override
public CompletedCallback getClosedCallback() {
return mClosedCallback;
}
@Override
public AsyncServer getServer() {
return AsyncServer.getDefault();
}
}