package com.guokr.hebo; import java.nio.ByteBuffer; public abstract class HeboCallback { public ByteBuffer buffer; public void flip() { if (buffer != null) { buffer.flip(); } } public void ok() { buffer = ByteBuffer.allocate(5); buffer.put(HeboUtils.PLUS); buffer.put(HeboUtils.OK); buffer.put(HeboUtils.CRLF); } public void ok(String msg) { byte[] bytes = HeboUtils.bytes(msg); buffer = ByteBuffer.allocate(bytes.length + 3); buffer.put(HeboUtils.PLUS); buffer.put(bytes); buffer.put(HeboUtils.CRLF); } public void error(String msg) { byte[] bytes = HeboUtils.bytes(msg); buffer = ByteBuffer.allocate(bytes.length + 3); buffer.put(HeboUtils.MINUS); buffer.put(bytes); buffer.put(HeboUtils.CRLF); } public void status(int code) { byte[] bytes = HeboUtils.bytes(code); buffer = ByteBuffer.allocate(bytes.length + 3); buffer.put(HeboUtils.COLON); buffer.put(bytes); buffer.put(HeboUtils.CRLF); } public void integerValue(int val) { byte[] bytes = HeboUtils.bytes(val); byte[] size = HeboUtils.size(bytes); buffer = ByteBuffer.allocate(bytes.length + size.length + 5); buffer.put(HeboUtils.DOLLAR); buffer.put(size); buffer.put(HeboUtils.CRLF); buffer.put(bytes); buffer.put(HeboUtils.CRLF); } public void integerList(int[] list) { byte[] size = HeboUtils.size(list.length); buffer = ByteBuffer.allocate(1024 * list.length + 1024); buffer.put(HeboUtils.STAR); buffer.put(size); buffer.put(HeboUtils.CRLF); for (int val : list) { byte[] bytes = HeboUtils.bytes(val); size = HeboUtils.size(bytes); buffer.put(HeboUtils.DOLLAR); buffer.put(size); buffer.put(HeboUtils.CRLF); buffer.put(bytes); buffer.put(HeboUtils.CRLF); } } public void floatValue(float val) { byte[] bytes = HeboUtils.bytes(val); byte[] size = HeboUtils.size(bytes); buffer = ByteBuffer.allocate(bytes.length + size.length + 5); buffer.put(HeboUtils.DOLLAR); buffer.put(size); buffer.put(HeboUtils.CRLF); buffer.put(bytes); buffer.put(HeboUtils.CRLF); } public void floatList(float[] list) { byte[] size = HeboUtils.size(list.length); buffer = ByteBuffer.allocate(1024 * list.length + 1024); buffer.put(HeboUtils.STAR); buffer.put(size); buffer.put(HeboUtils.CRLF); for (float val : list) { byte[] bytes = HeboUtils.bytes(val); size = HeboUtils.size(bytes); buffer.put(HeboUtils.DOLLAR); buffer.put(size); buffer.put(HeboUtils.CRLF); buffer.put(bytes); buffer.put(HeboUtils.CRLF); } } public void stringValue(String val) { if (val == null) { buffer = ByteBuffer.allocate(5); buffer.put(HeboUtils.DOLLAR); buffer.put(HeboUtils.bytes("-1")); buffer.put(HeboUtils.CRLF); } else { byte[] bytes = HeboUtils.bytes(val); byte[] size = HeboUtils.size(bytes); buffer = ByteBuffer.allocate(bytes.length + size.length + 5); buffer.put(HeboUtils.DOLLAR); buffer.put(size); buffer.put(HeboUtils.CRLF); buffer.put(bytes); buffer.put(HeboUtils.CRLF); } } public void stringList(String[] list) { byte[] size = HeboUtils.size(list.length); buffer = ByteBuffer.allocate(1024 * list.length + 1024); buffer.put(HeboUtils.STAR); buffer.put(size); buffer.put(HeboUtils.CRLF); for (String str : list) { byte[] bytes = HeboUtils.bytes(str); size = HeboUtils.size(bytes); buffer.put(HeboUtils.DOLLAR); buffer.put(size); buffer.put(HeboUtils.CRLF); buffer.put(bytes); buffer.put(HeboUtils.CRLF); } } public abstract void response(); }