package org.webpieces.recording.impl; import java.io.IOException; import java.io.OutputStream; import java.nio.ByteBuffer; import java.nio.channels.Channels; import java.nio.channels.WritableByteChannel; import org.webpieces.data.api.DataWrapper; import org.webpieces.data.api.DataWrapperGenerator; import org.webpieces.recording.api.Recorder; public class RecorderImpl implements Recorder { private DataWrapperGenerator gen; private WritableByteChannel channel; private int version; public RecorderImpl(OutputStream out, DataWrapperGenerator gen, int version) { if(version != 1) throw new IllegalArgumentException("only version=1 supported right now"); channel = Channels.newChannel(out); this.gen = gen; this.version = version; } @Override public void record(ByteBuffer b) { try { if(version == 1) recordImpl(b); else throw new IllegalArgumentException("version="+version+" not supported"); } catch (IOException e) { throw new RuntimeException(e); } } public void recordImpl(ByteBuffer b) throws IOException { DataWrapper wrapper = gen.wrapByteBuffer(b); int size = wrapper.getReadableSize(); ByteBuffer sizeBuf = ByteBuffer.allocate(4); sizeBuf.putInt(size); sizeBuf.flip(); channel.write(sizeBuf); ByteBuffer shallowCopy = b.duplicate(); channel.write(shallowCopy); byte[] data = new byte[] { 0, 1, 2, 3, 4, 5, 6 }; ByteBuffer trailer = ByteBuffer.wrap(data); channel.write(trailer); } }