package cn.flightfeather.supervision.socket; import cn.flightfeather.supervision.common.utils.JsonUtil; import org.springframework.util.StringUtils; public class WebSocketMessageParser { private static final String START_STR = "##"; private static final String SPLIT_STR = "&&"; private static final String END_STR = "%%"; /** * 消息格式校验 * @param message 消息 * @return 格式是否合规 */ private static boolean verificationMessage(String message) { if (StringUtils.isEmpty(message)) { return false; } if (!message.startsWith(START_STR)) { return false; } if (!message.endsWith(END_STR)) { return false; } return true; } /** * 解析出类型和内容 * @param message socket消息中的data字段 * @return 解析结果,如果格式不正确则返回null */ public static WebSocketMessage decodeMessage(String message) { if (!verificationMessage(message)) { // 发挥一个不会被处理的消息 return new WebSocketMessage(-1, ""); } WebSocketMessage webSocketMessage = new WebSocketMessage(); String[] parts = message.substring(START_STR.length(), message.length() - END_STR.length()).split(SPLIT_STR); webSocketMessage.setType(Integer.parseInt(parts[0])); webSocketMessage.setContent(JsonUtil.INSTANCE.getGson().fromJson(parts[1], Object.class)); return webSocketMessage; } /** * 生成指定格式的消息字符串 * @return 生成的消息字符串 */ public static String encodeMessage(WebSocketMessage webSocketMessage) { return START_STR + webSocketMessage.getType() + SPLIT_STR + JsonUtil.INSTANCE.getGson().toJson(webSocketMessage.getContent(), webSocketMessage.getContent().getClass()) + END_STR; } }