/* * Galaxy * Copyright (C) 2012 Parallel Universe Software Co. * * This file is part of Galaxy. * * Galaxy is free software: you can redistribute it and/or modify * it under the terms of the GNU Lesser General Public License as * published by the Free Software Foundation, either version 3 of * the License, or (at your option) any later version. * * Galaxy is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Lesser General Public License for more details. * * You should have received a copy of the GNU Lesser General Public * License along with Galaxy. If not, see <http://www.gnu.org/licenses/>. */ package co.paralleluniverse.galaxy.cluster; import co.paralleluniverse.galaxy.cluster.DistributedTree.Listener; import com.google.common.base.Charsets; /** * * @author pron */ public class DistributedTreeTKB { private final DistributedTree tree; private final String name; public DistributedTreeTKB(DistributedTree tree, String name) { this.tree = tree; this.name = name; } public void run() throws Exception { System.out.println("===== I AM " + name + " ========"); tree.print("/", System.out); System.out.println("================================"); addListener("/nodes"); addListener("/a"); addListener("/a/b"); put("/a/b/c", false, "kjkhkjh"); put("/a/b/c1", false, null); put("/a/b/c2", false, "dfdfs"); put("/a/b1/chat", false, null); put("/a/b1/chat2", false, "lhjkll"); put("/a/b1/chat5", false, "ddddd"); tree.print("/", System.out); put("/a/b/c", false, "1111111"); tree.delete("/a/b"); tree.createEphemeralOrdered("/nodes/" + name); tree.create("/nodes/" + name + "/x", true); tree.set("/nodes/" + name + "/x", serialize("I am " + name)); tree.create("/nodes/" + name + "/1", true); tree.set("/nodes/" + name + "/1", serialize("xxx " + name)); tree.set("/nodes/" + name + "/1", serialize("bbb " + name)); tree.create("/nodes/" + name + "/2", true); tree.set("/nodes/" + name + "/2", serialize("yyy " + name)); tree.delete("/nodes/" + name + "/1"); while (true) { tree.print("/", System.out); Thread.sleep(5000); } } private void put(String node, boolean ephemeral, String data) throws Exception { tree.create(node, ephemeral); tree.set(node, data != null ? serialize(data) : null); } static byte[] serialize(String object) { return object.getBytes(Charsets.UTF_8); } static String deserialize(byte[] array) { return new String(array, Charsets.UTF_8); } private void addListener(final String node) { tree.addListener(node, new Listener() { @Override public void nodeAdded(String node) { event("ADDED", node); } @Override public void nodeUpdated(String node) { event("UPDATED", node); } @Override public void nodeDeleted(String node) { event("DELETED", node); // System.err.println("XXXX DEL " + node); // Thread.dumpStack(); } @Override public void nodeChildAdded(String node, String child) { event("ADDED", node, child); } @Override public void nodeChildUpdated(String node, String child) { event("UPDATED", node, child); } @Override public void nodeChildDeleted(String node, String child) { event("DELETED", node, child); } private void event(String event, String node) { System.out.println("LSTN " + node + ": " + event); } private void event(String event, String node, String child) { System.out.println("LSTN " + node + " - " + child + ": " + event); } }); } }