Package net.floodlightcontroller.jython

Source Code of net.floodlightcontroller.jython.JythonServer

/**
*    Copyright 2013, Big Switch Networks, Inc.
*
*    Licensed under the Apache License, Version 2.0 (the "License"); you may
*    not use this file except in compliance with the License. You may obtain
*    a copy of the License at
*
*         http://www.apache.org/licenses/LICENSE-2.0
*
*    Unless required by applicable law or agreed to in writing, software
*    distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
*    WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
*    License for the specific language governing permissions and limitations
*    under the License.
**/

package net.floodlightcontroller.jython;

import java.net.URL;
import java.util.HashMap;
import java.util.Map;

import org.python.util.PythonInterpreter;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
* This class starts a thread that runs a jython interpreter that
* can be used for debug (or even development).
*
* @author mandeepdhami
*
*/
public class JythonServer extends Thread {
    protected static Logger log = LoggerFactory.getLogger(JythonServer.class);

    String host;
  int port;
  Map<String, Object> locals;
 
  /**
   * @param host_ Host to use for jython server
   * @param port_ Port to use for jython server
   * @param locals_ Locals to add to the interpreters top level name space
   */
  public JythonServer(String host_, int port_, Map<String, Object> locals_) {
    this.host = host_;
    this.port = port_;
    this.locals = locals_;
    if (this.locals == null) {
      this.locals = new HashMap<String, Object>();
    }
    this.locals.put("log", JythonServer.log);
    this.setName("debugserver");
  }

    /**
     * The main thread for this class invoked by Thread.run()
     *
     * @see java.lang.Thread#run()
     */
    public void run() {
        PythonInterpreter p = new PythonInterpreter();
        for (String name : this.locals.keySet()) {
            p.set(name, this.locals.get(name));
        }

        URL jarUrl = JythonServer.class.getProtectionDomain().getCodeSource().getLocation();
        String jarPath = jarUrl.getPath();
        if (jarUrl.getProtocol().equals("file")) {
            // If URL is of type file, assume that we are in dev env and set path to python dir.
            // else use the jar file as is
            jarPath = jarPath + "../../src/main/python/";
        }

        p.exec("import sys");
        p.exec("sys.path.append('" + jarPath + "')");
        p.exec("from debugserver import run_server");
        if (this.host == null) {
          p.exec("run_server(port=" + this.port + ", locals=locals())");
        } else {
          p.exec("run_server(port=" + this.port + ", host='" + this.host + "', locals=locals())");
        }
    }
}
TOP

Related Classes of net.floodlightcontroller.jython.JythonServer

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.