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;
|
}
|
}
|