package io.netty.protocol.wamp.messages;
import com.fasterxml.jackson.core.JsonGenerator;
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.core.JsonToken;
import java.io.IOException;
import java.io.StringWriter;
public class WelcomeMessage extends WampMessage {
public static final int PROTOCOL_VERSION = 1;
public String sessionId;
public int protocolVersion = PROTOCOL_VERSION;
public String serverIdent;
public WelcomeMessage() {
super(MessageType.WELCOME);
}
public WelcomeMessage(String sessionId, String serverIdent) {
super(MessageType.WELCOME);
this.sessionId = sessionId;
this.serverIdent = serverIdent;
}
@Override
public String toJson() {
String jsonStr = null;
try (
StringWriter sw = new StringWriter();
JsonGenerator jg = MessageMapper.jsonFactory.createGenerator(sw)
) {
jg.writeStartArray();
jg.writeNumber(getMessageCode());
jg.writeString(sessionId);
jg.writeNumber(protocolVersion);
jg.writeString(serverIdent);
jg.writeEndArray();
jg.close();
jsonStr = sw.toString();
} catch (IOException e) {
e.printStackTrace();
}
return jsonStr;
}
public static WelcomeMessage fromJson(final String jsonStr) throws IOException {
try (JsonParser jp = MessageMapper.jsonFactory.createParser(jsonStr)) {
boolean valid = MessageMapper.validate(jp, MessageType.WELCOME);
if (valid) return fromParser(jp);
else throw new IOException("Wrong format");
}
}
public static WelcomeMessage fromParser(final JsonParser jp) throws IOException {
WelcomeMessage wm = new WelcomeMessage();
if (jp.nextToken() != JsonToken.VALUE_STRING) throw new IOException();
wm.sessionId = jp.getValueAsString();
if (jp.nextToken() != JsonToken.VALUE_NUMBER_INT) throw new IOException();
wm.protocolVersion = jp.getValueAsInt();
if (jp.nextToken() != JsonToken.VALUE_STRING) throw new IOException();
wm.serverIdent = jp.getValueAsString();
return wm;
}
@Override
public boolean equals(Object obj) {
if (obj == null) return false;
if (obj == this) return true;
if (!(obj instanceof WelcomeMessage)) return false;
WelcomeMessage msg = (WelcomeMessage) obj;
return msg.getMessageCode() == this.getMessageCode() &&
msg.sessionId.equals(this.sessionId) &&
msg.protocolVersion == this.protocolVersion &&
msg.serverIdent.equals(this.serverIdent);
}
}