| 13 | import java.util.logging.Logger; |
| 14 | |
| 15 | final public class IOParser implements Parser { |
| 16 | |
| 17 | private static final Logger logger = Logger.getLogger(IOParser.class.getName()); |
| 18 | |
| 19 | private IOParser() {} |
| 20 | |
| 21 | final public static class Encoder implements Parser.Encoder { |
| 22 | |
| 23 | public Encoder() {} |
| 24 | |
| 25 | @Override |
| 26 | public void encode(Packet obj, Callback callback) { |
| 27 | if ((obj.type == EVENT || obj.type == ACK) && HasBinary.hasBinary(obj.data)) { |
| 28 | obj.type = obj.type == EVENT ? BINARY_EVENT : BINARY_ACK; |
| 29 | } |
| 30 | |
| 31 | if (logger.isLoggable(Level.FINE)) { |
| 32 | logger.fine(String.format("encoding packet %s", obj)); |
| 33 | } |
| 34 | |
| 35 | if (BINARY_EVENT == obj.type || BINARY_ACK == obj.type) { |
| 36 | encodeAsBinary(obj, callback); |
| 37 | } else { |
| 38 | String encoding = encodeAsString(obj); |
| 39 | callback.call(new String[] {encoding}); |
| 40 | } |
| 41 | } |
| 42 | |
| 43 | private String encodeAsString(Packet obj) { |
| 44 | StringBuilder str = new StringBuilder("" + obj.type); |
| 45 | |
| 46 | if (BINARY_EVENT == obj.type || BINARY_ACK == obj.type) { |
| 47 | str.append(obj.attachments); |
| 48 | str.append("-"); |
| 49 | } |
| 50 | |
| 51 | if (obj.nsp != null && obj.nsp.length() != 0 && !"/".equals(obj.nsp)) { |
| 52 | str.append(obj.nsp); |
| 53 | str.append(","); |
| 54 | } |
| 55 | |
| 56 | if (obj.id >= 0) { |
| 57 | str.append(obj.id); |
| 58 | } |
| 59 | |
| 60 | if (obj.data != null) { |
| 61 | str.append(obj.data); |
| 62 | } |
| 63 | |
| 64 | if (logger.isLoggable(Level.FINE)) { |
| 65 | logger.fine(String.format("encoded %s as %s", obj, str)); |
| 66 | } |
| 67 | return str.toString(); |
| 68 | } |
| 69 | |
| 70 | private void encodeAsBinary(Packet obj, Callback callback) { |
| 71 | Binary.DeconstructedPacket deconstruction = Binary.deconstructPacket(obj); |
| 72 | String pack = encodeAsString(deconstruction.packet); |
nothing calls this directly
no outgoing calls
no test coverage detected