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