use of tezc.core.cluster.state.command.RegisterCommand in project tezcRaft by tezc.
the class Cluster method handleIncomingConnEvent.
/**
* Handle incoming connection callback
* @param conn incoming connection
* @param req connectRequest message
*/
public void handleIncomingConnEvent(Connection conn, ConnectReq req) {
if (req.isClient()) {
if (role != Role.LEADER) {
conn.sendCancelEvent();
return;
}
PeerNode node = clients.get(req.getName());
if (node != null) {
node.inherit(conn);
conn.sendAcceptConnEvent(node);
node.sendConnectResp(clusterRecord, node.getId(), node.getSequence(), true);
} else {
node = new PeerNode(worker, this, conn, null, new NodeRecord(req.getName(), ""), PeerNode.Type.CLIENT);
conn.sendAcceptConnEvent(node);
clients.put(req.getName(), node);
RegisterCommand cmd = new RegisterCommand(req.getName());
cmd.encode();
createEntry(new CommandRequest(own, new ClientReq(false, 0, sequence++, false, cmd.getRaw())));
flush();
}
} else {
for (PeerNode node : nodes) {
if (req.getName().equals(node.getRemote().name)) {
node.inherit(conn);
conn.sendAcceptConnEvent(node);
node.sendConnectResp(clusterRecord, node.getId(), node.getSequence(), true);
if (!activeNodes.contains(node)) {
activeNodes.add(node);
}
return;
}
}
conn.sendCancelEvent();
}
}
Aggregations