package io.netty.protocol.wamp.messages;
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonToken;
import com.fasterxml.jackson.databind.MappingJsonFactory;
import com.fasterxml.jackson.databind.ObjectMapper;
import java.io.IOException;
public class MessageMapper {
public static final ObjectMapper objectMapper = new ObjectMapper();
public static final JsonFactory jsonFactory = new MappingJsonFactory(objectMapper);
public static WampMessage fromJson(final String jsonStr) throws IOException {
final JsonParser jp = jsonFactory.createParser(jsonStr);
if (jp.nextToken() != JsonToken.START_ARRAY) throw new IOException("Not a JSON array");
if (jp.nextToken() != JsonToken.VALUE_NUMBER_INT) throw new IOException("Wrong message format");
MessageType messageType = MessageType.fromInteger(jp.getValueAsInt());
switch (messageType) {
case WELCOME:
return WelcomeMessage.fromParser(jp);
case PREFIX:
return PrefixMessage.fromParser(jp);
case CALL:
return CallMessage.fromParser(jp);
case CALLRESULT:
return CallResultMessage.fromParser(jp);
case CALLERROR:
return CallErrorMessage.fromParser(jp);
case SUBSCRIBE:
return SubscribeMessage.fromParser(jp);
case UNSUBSCRIBE:
return UnsubscribeMessage.fromParser(jp);
case PUBLISH:
return PublishMessage.fromParser(jp);
case EVENT:
return EventMessage.fromParser(jp);
}
return null;
}
public static boolean validate(JsonParser jp, MessageType type) throws IOException {
if (jp.nextToken() != JsonToken.START_ARRAY) return false;
if (jp.nextToken() != JsonToken.VALUE_NUMBER_INT) return false;
if (jp.getValueAsInt() != type.getCode()) return false;
return true;
}
}