Package org.sdnplatform.sync.client

Source Code of org.sdnplatform.sync.client.SyncClientBase

package org.sdnplatform.sync.client;

import java.io.File;
import java.io.PrintStream;

import net.floodlightcontroller.core.module.FloodlightModuleContext;
import net.floodlightcontroller.threadpool.IThreadPoolService;
import net.floodlightcontroller.threadpool.ThreadPool;

import org.kohsuke.args4j.Option;
import org.sdnplatform.sync.ISyncService;
import org.sdnplatform.sync.internal.config.AuthScheme;
import org.sdnplatform.sync.internal.remote.RemoteSyncManager;

/**
* Base class for implementing command-line tools that interact with the
* sync store
* @author readams
*/
public abstract class SyncClientBase {
    /**
     * Remote sync manager provides connection to remote store
     */
    protected RemoteSyncManager syncManager;

    /**
     * Command-line settings
     */
    protected SyncClientBaseSettings settings;

    /**
     * Stream to use for output
     */
    protected PrintStream out = System.out;

    /**
     * Stream to use for errors
     */
    protected PrintStream err = System.err;
   
    /**
     * Command-line settings for base sync client
     * @author readams
     */
    protected static class SyncClientBaseSettings
        extends AuthTool.AuthToolSettings {
        @Option(name="--hostname", aliases="-n",
                usage="Server hostname (default \"localhost\")")
        protected String hostname = "localhost";
   
        @Option(name="--port", aliases="-p",
                usage="Server port (default 6642)")
        protected int port = 6642;
       
        @Override
        protected void init(String[] args) {
            super.init(args);
           
            if (!AuthScheme.NO_AUTH.equals(authScheme)) {
                if (!(new File(keyStorePath)).canRead()) {
                    System.err.println("Cannot read from key store " +
                                       keyStorePath);
                    System.exit(1);
                }
            }
        }
    }
   
    public SyncClientBase(SyncClientBaseSettings settings) {
        this.settings = settings;
    }

    /**
     * Set up the remote sync manager and prepare for requests
     * @throws Exception
     */
    protected void connect() throws Exception {
        FloodlightModuleContext fmc = new FloodlightModuleContext();
        ThreadPool tp = new ThreadPool();
        syncManager = new RemoteSyncManager();
        fmc.addService(IThreadPoolService.class, tp);
        fmc.addService(ISyncService.class, syncManager);
        fmc.addConfigParam(syncManager, "hostname", settings.hostname);
        fmc.addConfigParam(syncManager, "port",
                           Integer.toString(settings.port));
        if (settings.authScheme != null) {
            fmc.addConfigParam(syncManager, "authScheme",
                               settings.authScheme.toString());
            fmc.addConfigParam(syncManager, "keyStorePath", settings.keyStorePath);
            fmc.addConfigParam(syncManager, "keyStorePassword",
                               settings.keyStorePassword);
        }
        tp.init(fmc);
        syncManager.init(fmc);
        tp.startUp(fmc);
        syncManager.startUp(fmc);
       
        out.println("Using remote sync service at " +
                    settings.hostname + ":" + settings.port);
    }
   
    protected void cleanup() throws InterruptedException {
        syncManager.shutdown();
    }

}
TOP

Related Classes of org.sdnplatform.sync.client.SyncClientBase

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.