summaryrefslogtreecommitdiffstats
path: root/dozentenmodul/src/main/java/thrift/ThriftManager.java
diff options
context:
space:
mode:
Diffstat (limited to 'dozentenmodul/src/main/java/thrift/ThriftManager.java')
-rw-r--r--dozentenmodul/src/main/java/thrift/ThriftManager.java155
1 files changed, 155 insertions, 0 deletions
diff --git a/dozentenmodul/src/main/java/thrift/ThriftManager.java b/dozentenmodul/src/main/java/thrift/ThriftManager.java
new file mode 100644
index 00000000..716c4439
--- /dev/null
+++ b/dozentenmodul/src/main/java/thrift/ThriftManager.java
@@ -0,0 +1,155 @@
+package thrift;
+
+import org.apache.log4j.Logger;
+import org.apache.thrift.protocol.TBinaryProtocol;
+import org.apache.thrift.protocol.TProtocol;
+import org.apache.thrift.transport.TFramedTransport;
+import org.apache.thrift.transport.TSocket;
+import org.apache.thrift.transport.TTransport;
+import org.apache.thrift.transport.TTransportException;
+import org.openslx.imagemaster.thrift.iface.ImageServer;
+import org.openslx.sat.thrift.iface.Server;
+
+public class ThriftManager {
+
+ private final static Logger LOGGER = Logger.getLogger(ThriftManager.class);
+
+ /**
+ * Public variables to represent client types
+ * TODO: Public needed?
+ */
+ public static enum ClientType {
+ MASTER, SATELLITE
+ }
+ /**
+ * Private singleton instances of itself and the satellite/master clients
+ */
+ private static ThreadLocal<ThriftManager> _instance = null;
+ private static ThreadLocal<Server.Client> _satClient = new ThreadLocal<>();
+ private static ThreadLocal<ImageServer.Client> _masterClient = new ThreadLocal<>();
+
+ /**
+ * Private members for master connection information
+ */
+ private static final String MASTERSERVER_IP = "132.230.4.16";
+ private static final int MASTERSERVER_PORT = 9090;
+ private static final int MASTERSERVER_TIMEOUT = 30000;
+
+
+ /**
+ * Private members for satellite connection information
+ */
+ private static String SATELLITE_IP = null;
+ private static final int SATELLITE_PORT = 9090;
+ private static final int SATELLITE_TIMEOUT = 10000;
+
+ /**
+ * Protected constructor to avoid external instantiation
+ */
+ protected ThriftManager() {
+ if (_instance.get() == null) {
+ _instance.set(new ThriftManager());
+ }
+ if (_instance.get() == null) {
+ // something very wrong...
+ LOGGER.error("Could not initialize Thrift Manager, this should not happen. Contact a developper.");
+ // TODO handle: exit? message box?
+ }
+ }
+
+ /**
+ * Initialise the client of type 'type' with give ip, port and timeout.
+ *
+ * @param type type of the client. Valid are 'MASTER' or 'SATELLITE'
+ * @param ip ip of the server to connect to
+ * @param port port of the server to connect to
+ * @param timeout timeout of the connection in milliseconds
+ * @return true if initializing the client worked, false otherwise
+ */
+ private static boolean init(ClientType type, String ip, int port, int timeout) {
+
+ /*
+ * Master Connection
+ */
+ if (type == ClientType.MASTER) {
+ TTransport transport =
+ new TFramedTransport(new TSocket(MASTERSERVER_IP, MASTERSERVER_PORT, MASTERSERVER_TIMEOUT));
+ try {
+ transport.open();
+ } catch (TTransportException e) {
+ LOGGER.error("Could not open transport to thrift's server with IP: " + MASTERSERVER_IP);
+ return false;
+ }
+ final TProtocol protocol = new TBinaryProtocol(transport);
+ // now we are ready to create the client, according to ClientType!
+ _masterClient.set(new ImageServer.Client(protocol));
+ LOGGER.info("Masterserver '" + MASTERSERVER_IP + "' reachable. Client initialised.");
+ }
+ /*
+ * Satellite Connection
+ */
+ if (type == ClientType.SATELLITE) {
+ // first check if we have a sat ip
+ if (SATELLITE_IP == null) {
+ LOGGER.error("Satellite ip adress was not set prior to getting the sat client. Use setSatellite(<ip>).");
+ return false;
+ }
+ // ok lets do it
+ TTransport transport =
+ new TSocket(SATELLITE_IP, SATELLITE_PORT, SATELLITE_TIMEOUT);
+ try {
+ transport.open();
+ } catch (TTransportException e) {
+ LOGGER.error("Could not open transport to thrift's server with IP: " + SATELLITE_IP);
+ return false;
+ }
+ final TProtocol protocol = new TBinaryProtocol(transport);
+ // now we are ready to create the client, according to ClientType!
+ _satClient.set(new Server.Client(protocol));
+ }
+ return true;
+ }
+ /**
+ * Sets the IP of the satellite to connect to
+ * @param ip the ip of the satellite as String
+ * @return true if setting the ip worked, false otherwise
+ */
+ public static boolean setSatellite(String ip) {
+ if (ip.isEmpty()) {
+ LOGGER.error("Given IP for satellite is empty.");
+ return false;
+ }
+ SATELLITE_IP = ip;
+ return true;
+ }
+ /**
+ * Returns the singleton client of the thrift connection to the satellite
+ * @return the thrift client to the satellite server
+ */
+ public static Server.Client getSatClient() {
+ if (_satClient.get() == null) {
+ init(ClientType.SATELLITE, SATELLITE_IP, SATELLITE_PORT, SATELLITE_TIMEOUT);
+ }
+ if (_satClient.get() == null) {
+ LOGGER.error("Satelite client still null. Initialisation must have failed. Contact developper.");
+ return null;
+ }
+ return _satClient.get();
+ }
+
+ /**
+ * Returns the singleton client of the master thrift connection
+ * @return the thrift client to the master server
+ */
+ public static ImageServer.Client getMasterClient() {
+ if (_masterClient.get() == null) {
+ LOGGER.debug("Initialising master thrift client...");
+ init(ClientType.MASTER, MASTERSERVER_IP, MASTERSERVER_PORT, MASTERSERVER_TIMEOUT);
+ }
+ if (_masterClient.get() == null) {
+ LOGGER.error("Satellite client still null. Initialisation must have failed. Contact developper.");
+ return null;
+ }
+ return _masterClient.get();
+ }
+}