package org.kevoree.api.protocol; import java.lang.Override; import java.lang.String; import java.lang.StringBuilder; /** * Created by duke on 6/2/14. */ public class Protocol { public static final String REGISTER = "register"; public static final int REGISTER_TYPE = 0; public static final String PUSH = "push"; public static final int PUSH_TYPE = 1; public static final String PULL = "pull"; public static final int PULL_TYPE = 2; public static final String DIFF = "diff"; public static final String SEP = "/"; public interface Message { public int getType(); public String toRaw(); } public static class RegisterMessage implements Message { public RegisterMessage(String nodeName, String model) { this.nodeName = nodeName; this.model = model; } public String getNodeName() { return nodeName; } private String nodeName; public String getModel() { return model; } private String model; @Override public int getType() { return REGISTER_TYPE; } @Override public String toRaw() { return REGISTER + SEP + nodeName + SEP + model; } } public static class PullMessage implements Message { @Override public int getType() { return PULL_TYPE; } @Override public String toRaw() { return PULL; } } public static class PushMessage implements Message { public PushMessage(String model) { this.model = model; } public String getModel() { return model; } private String model; @Override public int getType() { return PUSH_TYPE; } @Override public String toRaw() { return PUSH + SEP + model; } } public static Message parse(String msg) { if (msg.startsWith(REGISTER)) { String payload = msg.substring(REGISTER.length() + SEP.length()); int i = 0; char ch = payload.charAt(i); StringBuilder buffer = new StringBuilder(); while (i < payload.length() && ch != "/".charAt(0)) { i++; buffer.append(ch); ch = payload.charAt(i); } if (ch != "/".charAt(0)) { buffer.append(ch); } else { i++; } String model = null; if (i < payload.length()) { model = payload.substring(i, payload.length()); } return new Protocol.RegisterMessage(buffer.toString(), model); } if (msg.startsWith(PUSH + SEP)) { String model = msg.substring(PUSH.length() + SEP.length()); return new PushMessage(model); } if (msg.startsWith(PULL)) { return new PullMessage(); } /* retro compat if (msg.startsWith("get")) { return new PullMessage(); } */ return null; } }