package org.dsa.iot.broker.node; import org.dsa.iot.broker.server.client.Client; import java.util.Random; /** * @author Samuel Grenier */ public class Downstream extends BrokerNode<DSLinkNode> { private static final Random RANDOM = new Random(); private static final String ALPHABET; public Downstream(BrokerNode parent, String name) { super(parent, name, "node"); } public String init(String name, String dsId) { synchronized (this) { DSLinkNode node = getChild(name); if (node != null && node.dsId().equals(dsId)) { if (node.client() != null) { return null; } return name; } if (node != null && hasChild(name)) { StringBuilder tmp = new StringBuilder(name); tmp.append("-"); tmp.append(randomChar()); while (hasChild(tmp.toString())) { tmp.append(randomChar()); } name = tmp.toString(); } node = new DSLinkNode(this, name); node.accessible(false); addChild(node); } return name; } @Override public void connected(Client client) { super.connected(client); DSLinkNode node = getChild(client.handshake().name()); node.connected(client); } @Override public void propagateConnected(Client client) { } private static char randomChar() { return ALPHABET.charAt(RANDOM.nextInt(ALPHABET.length())); } static { String tmp = ""; tmp += "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; tmp += "abcdefghijklmnopqrstuvwxyz"; tmp += "0123456789"; ALPHABET = tmp; } }