package com.cardshifter.server.clients;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import com.cardshifter.api.CardshifterSerializationException;
import com.cardshifter.api.messages.Message;
import com.cardshifter.api.serial.CommunicationTransformer;
import com.cardshifter.api.serial.MessageHandler;
import com.fasterxml.jackson.core.JsonFactory;
import com.fasterxml.jackson.databind.MappingIterator;
import com.fasterxml.jackson.databind.ObjectMapper;
public class JsonSerialization implements CommunicationTransformer {
private final ObjectMapper mapper;
public JsonSerialization(ObjectMapper mapper) {
this.mapper = mapper;
}
@Override
public void send(Message message, OutputStream out) throws CardshifterSerializationException {
try {
mapper.writeValue(out, message);
} catch (IOException e) {
throw new CardshifterSerializationException(e);
}
}
@Override
public void read(InputStream in, MessageHandler onReceived) throws CardshifterSerializationException {
try {
MappingIterator<Message> values;
values = mapper.readValues(new JsonFactory().createParser(in), Message.class);
while (values.hasNextValue()) {
Message message = values.next();
if (!onReceived.messageReceived(message)) {
return;
}
}
} catch (IOException ex) {
throw new CardshifterSerializationException(ex);
}
}
}