package eu.hgross.blaubot.admin; import java.nio.ByteBuffer; import java.util.Arrays; import eu.hgross.blaubot.core.BlaubotConstants; import eu.hgross.blaubot.messaging.BlaubotMessage; /** * Notifies the king, that a server connection is available on the sending device (uniqueDeviceId included) * * @author Henning Gross {@literal (mail.to@henning-gross.de)} * */ public class ServerConnectionAvailableAdminMessage extends AbstractAdminMessage { private class MessageDTO { String mediatorUniqueDeviceId; String recipientUniqueDeviceId; @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; MessageDTO that = (MessageDTO) o; if (mediatorUniqueDeviceId != null ? !mediatorUniqueDeviceId.equals(that.mediatorUniqueDeviceId) : that.mediatorUniqueDeviceId != null) return false; if (recipientUniqueDeviceId != null ? !recipientUniqueDeviceId.equals(that.recipientUniqueDeviceId) : that.recipientUniqueDeviceId != null) return false; return true; } @Override public int hashCode() { int result = mediatorUniqueDeviceId != null ? mediatorUniqueDeviceId.hashCode() : 0; result = 31 * result + (recipientUniqueDeviceId != null ? recipientUniqueDeviceId.hashCode() : 0); return result; } } private MessageDTO data; public ServerConnectionAvailableAdminMessage(String mediatorUniqueDeviceId, String recipientUniqueDeviceId) { super(CLASSIFIER_SERVER_CONNECTION_AVAILABLE); this.data = new MessageDTO(); this.data.mediatorUniqueDeviceId = mediatorUniqueDeviceId; this.data.recipientUniqueDeviceId = recipientUniqueDeviceId; } public ServerConnectionAvailableAdminMessage(BlaubotMessage rawMessage) { super(rawMessage); } @Override protected byte[] payloadToBytes() { String json = gson.toJson(this.data); return json.getBytes(BlaubotConstants.STRING_CHARSET); } @Override protected void setUpFromBytes(ByteBuffer messagePayloadAsBytes) { byte[] stringBytes = Arrays.copyOfRange(messagePayloadAsBytes.array(), messagePayloadAsBytes.position(), messagePayloadAsBytes.capacity()); String json = new String(stringBytes, BlaubotConstants.STRING_CHARSET); MessageDTO dto = gson.fromJson(json, MessageDTO.class); this.data = dto; } /** * @return the mediator's unqiue device id (the relaying device) */ public String getMediatorUniqueDeviceId() { return data.mediatorUniqueDeviceId; } /** * @return the recipient's unique device id (where the connection was made to) */ public String getRecipientUniqueDeviceId() { return data.recipientUniqueDeviceId; } @Override public String toString() { return "ServerConnectionAvailableAdminMessage [mediatorUniqueDeviceId=" + data.mediatorUniqueDeviceId + ", recipientUnqiueDeviceId=" + data.recipientUniqueDeviceId + "]"; } public static void main(String args[]) { ServerConnectionAvailableAdminMessage m = new ServerConnectionAvailableAdminMessage("blabla", "recipient"); ServerConnectionAvailableAdminMessage around = new ServerConnectionAvailableAdminMessage(m.toBlaubotMessage()); System.out.println(""+m.data.mediatorUniqueDeviceId.length() + "___" + around.data.mediatorUniqueDeviceId.length()); } @Override public boolean equals(Object o) { if (this == o) return true; if (o == null || getClass() != o.getClass()) return false; if (!super.equals(o)) return false; ServerConnectionAvailableAdminMessage that = (ServerConnectionAvailableAdminMessage) o; if (data != null ? !data.equals(that.data) : that.data != null) return false; return true; } @Override public int hashCode() { int result = super.hashCode(); result = 31 * result + (data != null ? data.hashCode() : 0); return result; } }