DS-Lab / src / main / java / dslab / monitoring / MonitoringSerializer.java
MonitoringSerializer.java
Raw
package dslab.monitoring;

import dslab.rmi.serialize.ParseException;
import dslab.rmi.serialize.Serializer;

import java.net.InetSocketAddress;
import java.util.StringTokenizer;

import static java.lang.Integer.parseInt;

/**
 * Serializer for messages to the monitoring server. See also {@link Serializer}
 */
public class MonitoringSerializer extends Serializer {

    public MonitoringReport deserialize(String rawMessage) throws ParseException {

        tokenizer = new StringTokenizer(rawMessage);
        MonitoringReport result;
        try {
            result = report(arg("serverAddressAndPort"), arg("mailAddress"));
        } catch (ParseException e) {
            throw new ParseException("Failed to parse message '" + rawMessage + "'");
        }

        return result;
    }

    private MonitoringReport report(String serverAddressAndPort, String mailAddress) throws ParseException {

        try {
            var parsedMailAddress = parseAddress(mailAddress);

            var split = serverAddressAndPort.split(":");
            InetSocketAddress inetSocketAddress = new InetSocketAddress(split[0], parseInt(split[1]));

            return new MonitoringReport(inetSocketAddress, parsedMailAddress);

        } catch (Exception e) {
            throw new ParseException("Could not parse report", e);
        }
    }
}