/* * Copyright (c) 2014 tabletoptool.com team. * All rights reserved. This program and the accompanying materials * are made available under the terms of the GNU Public License v3.0 * which accompanies this distribution, and is available at * http://www.gnu.org/licenses/gpl.html * * Contributors: * rptools.com team - initial implementation * tabletoptool.com team - further development */ package com.t3.networking.registry; import java.net.URL; import java.net.URLEncoder; import java.util.ArrayList; import java.util.Arrays; import java.util.List; import org.apache.log4j.Logger; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.nodes.Element; import com.t3.client.TabletopTool; public class T3Registry { private static final String SERVICE_URL = "http://services.tabletoptool.com/running_server_registry.php"; private static final Logger log=Logger.getLogger(T3Registry.class); public static List<RegisteredServer> findAllInstances() { ArrayList<RegisteredServer> servers=new ArrayList<RegisteredServer>(); Document doc=callRegistry("findAll"); for(Element e:doc.getElementsByTag("server")) { servers.add(new RegisteredServer( e.text(), e.attr("address"), Integer.parseInt(e.attr("port")), e.attr("version"), Integer.parseInt(e.attr("players")))); } return servers; } public static String getAddress() { return returnValue(callRegistry("returnAddress")); } private static String returnValue(Document d) { return d.getElementsByTag("return").get(0).text(); } public static boolean registerInstance(String name, int port) { return Boolean.parseBoolean( returnValue( callRegistry("register", name, Integer.toString(port), TabletopTool.getVersion(), Integer.toString(TabletopTool.getNumberOfPlayers())))); } public static void unregisterInstance(int port) { callRegistry("unregister",Integer.toString(port)); } public static boolean heartBeat(int port) { return Boolean.parseBoolean(callRegistry("heartbeat", Integer.toString(port), Integer.toString(TabletopTool.getNumberOfPlayers())).text()); } private static Document callRegistry(String action, String... params) { try { StringBuilder url=new StringBuilder(SERVICE_URL); url.append("?action=").append(action); for(int i=0;i<params.length;i++) url.append("¶m").append(i).append("=").append(URLEncoder.encode(params[i],"utf8")); return Jsoup.parse(new URL(url.toString()), 5000); } catch (Exception e) { log.error("Error while trying to call t3 registry with action "+action+" and "+Arrays.toString(params),e); return null; } } }