Ejemplo n.º 1
0
def init(mode='sim', pygame=False, discovery=False, cfgfile='', scnfile=''):
    """ Initialize bluesky modules.

        Arguments:
        - mode: can be 'sim', 'sim-detached', 'server-gui', 'server-headless',
          or 'client'
        - pygame: indicate if BlueSky is started with BlueSky_pygame.py
        - discovery: Enable network discovery
    """
    # Initialize global settings first, possibly loading a custom config file
    settings.init(cfgfile)

    # Is this a server running headless?
    headless = (mode[-8:] == 'headless')

    # Keep track of the gui type.
    global gui_type
    gui_type = 'pygame' if pygame else \
               'none' if headless or mode[:3] == 'sim' else 'qtgl'

    # Load navdatabase in all versions of BlueSky
    # Only the headless server doesn't need this
    if not headless:
        from bluesky.navdatabase import Navdatabase
        global navdb
        navdb = Navdatabase()

    # If mode is server-gui or server-headless start the networking server
    if mode[:6] == 'server':
        global server
        from bluesky.network import Server
        server = Server(headless)

    # The remaining objects are only instantiated in the sim nodes
    if mode[:3] == 'sim':
        # Check whether simulation node should run detached
        detached = (mode[-8:] == 'detached')
        from bluesky.traffic import Traffic

        if pygame:
            from bluesky.ui.pygame import Screen
            from bluesky.simulation.pygame import Simulation
        else:
            from bluesky.simulation.qtgl import Simulation, ScreenIO as Screen

        from bluesky import stack
        from bluesky.tools import plugin, varexplorer

        # Initialize singletons
        global traf, sim, scr
        traf = Traffic()
        sim = Simulation(detached)
        scr = Screen()

        # Initialize remaining modules
        plugin.init(mode)
        varexplorer.init()
        stack.init(scnfile)
Ejemplo n.º 2
0
def init(mode='sim', pygame=False, discovery=False, cfgfile='', scnfile=''):
    """ Initialize bluesky modules.

        Arguments:
        - mode: can be 'sim', 'sim-detached', 'server-gui', 'server-headless',
          or 'client'
        - pygame: indicate if BlueSky is started with BlueSky_pygame.py
        - discovery: Enable network discovery
    """
    # Initialize global settings first, possibly loading a custom config file
    settings.init(cfgfile)

    # Is this a server running headless?
    headless = (mode[-8:] == 'headless')

    # Keep track of the gui type.
    global gui_type
    gui_type = 'pygame' if pygame else \
               'none' if headless or mode[:3] == 'sim' else 'qtgl'

    # Load navdatabase in all versions of BlueSky
    # Only the headless server doesn't need this
    if not headless:
        from bluesky.navdatabase import Navdatabase
        global navdb
        navdb = Navdatabase()

    # If mode is server-gui or server-headless start the networking server
    if mode[:6] == 'server':
        global server
        from bluesky.network import Server
        server = Server(headless)

    # The remaining objects are only instantiated in the sim nodes
    if mode[:3] == 'sim':
        # Check whether simulation node should run detached
        detached = (mode[-8:] == 'detached')
        from bluesky.traffic import Traffic

        if pygame:
            from bluesky.ui.pygame import Screen
            from bluesky.simulation.pygame import Simulation
        else:
            from bluesky.simulation.qtgl import Simulation, ScreenIO as Screen

        from bluesky import stack
        from bluesky.tools import plugin, plotter

        # Initialize singletons
        global traf, sim, scr
        traf = Traffic()
        sim = Simulation(detached)
        scr = Screen()

        # Initialize remaining modules
        plugin.init(mode)
        plotter.init()
        stack.init(scnfile)
import bluesky.settings as settings
import cProfile

print "   *****   BlueSky Open ATM simulator *****"
print "Distributed under GNU General Public License v3"

settings.init()

if settings.gui == 'pygame':
    import BlueSky_pygame as bs
elif settings.gui == 'qtgl':
    import BlueSky_qtgl as bs
else:
    import sys
    print 'Unknown gui type:', settings.gui
    sys.exit(0)

# Start the main loop. When debugging in python interactive mode,
# relevant objects are available in bs namespace (e.g., bs.gui, bs.sim)
bs.MainLoop()
Ejemplo n.º 4
0
import bluesky.settings as settings

print "   *****   BlueSky Open ATM simulator *****"
print "Distributed under GNU General Public License v3"

settings.init()

if settings.gui == 'pygame':
    import BlueSky_pygame as bs
elif settings.gui == 'qtgl':
    import BlueSky_qtgl as bs
else:
    import sys
    print 'Unknown gui type:', settings.gui
    sys.exit(0)

# Start the main loop. When debugging in python interactive mode,
# relevant objects are available in bs namespace (e.g., bs.gui, bs.sim)
bs.MainLoop()
Ejemplo n.º 5
0
import sys
import traceback
from bluesky import settings

if __name__ == "__main__":
    settings.init('qtgl')
 
# This file is used to start the gui mainloop or a single node simulation loop
node_only = ('--node' in sys.argv)

if node_only:
    from bluesky.sim.qtgl.nodemanager import runNode
else:
    from bluesky.navdb import Navdatabase
    from bluesky.ui.qtgl import Gui
    from bluesky.sim.qtgl import MainManager
    from bluesky.tools.network import StackTelnetServer
    if __name__ == "__main__":
        print "   *****   BlueSky Open ATM simulator *****"
        print "Distributed under GNU General Public License v3"


# Global navdb, gui, and sim objects for easy access in interactive python shell
navdb   = None
gui     = None
manager = None


# Create custom system-wide exception handler. For now it replicates python's
# default traceback message. This was added to counter a new PyQt5.5 feature
# where unhandled exceptions would result in a qFatal with a very uninformative
from bluesky import settings
if __name__ == "__main__":
    print "   *****   BlueSky Open ATM simulator *****"
    print "Distributed under GNU General Public License v3"
    settings.init('pygame')

from bluesky.navdb import Navdatabase
from bluesky.ui.pygame import Gui
from bluesky.sim.pygame import Simulation

# Global navdb, gui, and sim objects for easy access in interactive python shell
navdb = None
gui = None
sim = None


def MainLoop():
    # =============================================================================
    # Create gui and simulation objects
    # =============================================================================
    global navdb, gui, sim
    navdb = Navdatabase('global')  # Read database from specified folder
    gui = Gui(navdb)
    sim = Simulation(gui, navdb)

    # =============================================================================
    # Start the mainloop (and possible other threads)
    # =============================================================================
    sim.start()

    # Main loop for tmx object
Ejemplo n.º 7
0
import sys
import traceback
from bluesky import settings

if __name__ == "__main__":
    settings.init('qtgl')

# This file is used to start the gui mainloop or a single node simulation loop
node_only = ('--node' in sys.argv)

if node_only:
    from bluesky.sim.qtgl.nodemanager import runNode
else:
    from bluesky.navdb import Navdatabase
    from bluesky.ui.qtgl import Gui
    from bluesky.sim.qtgl import MainManager
    from bluesky.tools.network import StackTelnetServer


# Global navdb, gui, and sim objects for easy access in interactive python shell
navdb   = None
gui     = None
manager = None


# Create custom system-wide exception handler. For now it replicates python's
# default traceback message. This was added to counter a new PyQt5.5 feature
# where unhandled exceptions would result in a qFatal with a very uninformative
# message.
def exception_handler(exc_type, exc_value, exc_traceback):
    traceback.print_exception(exc_type, exc_value, exc_traceback)
Ejemplo n.º 8
0
def init(mode='sim', configfile=None, scenfile=None, discoverable=False,
         gui=None, detached=False, **kwargs):
    ''' Initialize bluesky modules.

        Arguments:

    '''

    # Keep track of mode and gui type.
    globals()['mode'] = mode
    globals()['gui'] = gui

    # Initialize global settings first, possibly loading a custom config file
    settings.init(configfile)

    # Initialise tools
    tools.init()

    # Load navdatabase in all versions of BlueSky
    # Only the headless server doesn't need this
    if mode == "sim" or gui is not None:
        from bluesky.navdatabase import Navdatabase
        global navdb
        navdb = Navdatabase()

    # If mode is server-gui or server-headless start the networking server
    if mode == 'server':
        global server
        from bluesky.network.server import Server
        server = Server(discoverable, configfile, scenfile)

    # The remaining objects are only instantiated in the sim nodes
    if mode == 'sim':
        from bluesky.traffic import Traffic
        from bluesky.simulation import Simulation
        if gui == 'pygame':
            from bluesky.ui.pygame import Screen
            from bluesky.network.detached import Node
        else:
            from bluesky.simulation import ScreenIO as Screen
            if detached:
                from bluesky.network.detached import Node
            else:
                from bluesky.network.node import Node

        from bluesky.core import varexplorer

        # Initialize singletons
        global traf, sim, scr, net
        traf = Traffic()
        sim = Simulation()
        scr = Screen()
        net = Node(settings.simevent_port,
                   settings.simstream_port)

        # Initialize remaining modules
        varexplorer.init()
        if scenfile:
            stack.stack(f'IC {scenfile}')

    from bluesky.core import plugin
    plugin.init(mode)
    stack.init(mode)
Ejemplo n.º 9
0
from bluesky import settings
if __name__ == "__main__":
    print "   *****   BlueSky Open ATM simulator *****"
    print "Distributed under GNU General Public License v3"
    settings.init('pygame')

from bluesky.navdb import Navdatabase
from bluesky.ui.pygame import Gui
from bluesky.sim.pygame import Simulation


# Global navdb, gui, and sim objects for easy access in interactive python shell
navdb = None
gui   = None
sim   = None


def MainLoop():
    # =============================================================================
    # Create gui and simulation objects
    # =============================================================================
    global navdb, gui, sim
    navdb = Navdatabase('global')   # Read database from specified folder
    gui   = Gui(navdb)
    sim   = Simulation(gui, navdb)

    # =============================================================================
    # Start the mainloop (and possible other threads)
    # =============================================================================
    sim.start()
Ejemplo n.º 10
0
def init(mode='sim', pygame=False, discovery=False, cfgfile='', scnfile=''):
    ''' Initialize bluesky modules.

        Arguments:
        - mode: can be 'sim', 'sim-detached', 'server-gui', 'server-headless',
          or 'client'
        - pygame: indicate if BlueSky is started with BlueSky_pygame.py
        - discovery: Enable network discovery
    '''
    # Is this a server running headless?
    headless = (mode[-8:] == 'headless')

    # Keep track of the gui type.
    global gui_type
    gui_type = 'pygame' if pygame else \
               'none' if headless or mode[:3] == 'sim' else 'qtgl'

    # Initialize global settings first, possibly loading a custom config file
    settings.init(cfgfile)

    # Initialise tools
    tools.init()

    # Load navdatabase in all versions of BlueSky
    # Only the headless server doesn't need this
    if not headless:
        from bluesky.navdatabase import Navdatabase
        global navdb
        navdb = Navdatabase()

    # If mode is server-gui or server-headless start the networking server
    if mode[:6] == 'server':
        global server
        from bluesky.network.server import Server
        server = Server(discovery)

    # The remaining objects are only instantiated in the sim nodes
    if mode[:3] == 'sim':
        # Check whether simulation node should run detached
        detached = (mode[-8:] == 'detached')
        from bluesky.traffic import Traffic
        from bluesky.simulation import Simulation
        if pygame:
            from bluesky.ui.pygame import Screen
            from bluesky.network.detached import Node
        else:
            from bluesky.simulation import ScreenIO as Screen
            if detached:
                from bluesky.network.detached import Node
            else:
                from bluesky.network.node import Node

        from bluesky.core import varexplorer

        # Initialize singletons
        global traf, sim, scr, net
        traf = Traffic()
        sim = Simulation()
        scr = Screen()
        net = Node(settings.simevent_port,
                   settings.simstream_port)

        # Initialize remaining modules
        varexplorer.init()
        if scnfile:
            stack.stack(f'IC {scnfile}')

    from bluesky.core import plugin
    plugin.init(mode)
    stack.init(mode)
Ejemplo n.º 11
0
def main():
    """
        Start BlueSky: This is the main entrypoint for BlueSky.
        Depending on settings and arguments passed it can start in different
        modes. The central part of BlueSky consists of a server managing all
        simulations, normally together with a gui. The different modes for this
        are:
        - server-gui: Start gui and simulation server
        - server-headless: start server without gui
        - client: start gui only, which can connect to an already running server

        A BlueSky server can start one or more simulation processes, which run
        the actual simulations. These simulations can also be started completely
        separate from all other BlueSky functionality, in the detached mode.
        This is useful when calling bluesky from within another python
        script/program. The corresponding modes are:
        - sim: The normal simulation process started by a BlueSky server
        - sim-detached: An isolated simulation node, without networking
    """
    # When importerror gives different name than (pip) install needs,
    # also advise latest version
    missingmodules = {
        "OpenGL": "pyopengl and pyopengl-accelerate",
        "PyQt4": "pyqt5"
    }

    if "--build-caches" in sys.argv:
        settings.init("")
        from bluesky.navdatabase import Navdatabase
        Navdatabase()
        return

    ### Parse command-line arguments ###
    # BlueSky.py modes:
    # server-gui: Start gui and simulation server
    # client: start gui only, which can connect to an already running server
    # server-headless: start server only
    # detached: start only one simulation node, without networking
    #   ==> useful for calling bluesky from within another python script/program
    if '--detached' in sys.argv:
        mode = 'sim-detached'
    elif '--sim' in sys.argv:
        mode = 'sim'
    elif '--client' in sys.argv:
        mode = 'client'
    elif '--headless' in sys.argv:
        mode = 'server-headless'
    else:
        mode = 'server-gui'

    discovery = ('--discoverable' in sys.argv or mode[-8:] == 'headless')

    # Check if alternate config file is passed or a default scenfile
    cfgfile = ''
    scnfile = ''
    for i in range(len(sys.argv)):
        if len(sys.argv) > i + 1:
            if sys.argv[i] == '--config-file':
                cfgfile = sys.argv[i + 1]
            elif sys.argv[i] == '--scenfile':
                scnfile = sys.argv[i + 1]

    # Catch import errors
    try:
        # Initialize bluesky modules
        bs.init(mode, discovery=discovery, cfgfile=cfgfile, scnfile=scnfile)

        # Only start a simulation node if called with --sim or --detached
        if mode[:3] == 'sim':
            bs.sim.start()
        else:
            # Only print start message in the non-sim cases to avoid printing
            # this for every started node
            print("   *****   BlueSky Open ATM simulator *****")
            print("Distributed under GNU General Public License v3")

        # Start server if server/gui or server-headless is started here
        if mode[:6] == 'server':
            if mode[-8:] == 'headless':
                bs.server.run()
            else:
                bs.server.start()

        # Start gui if client or main server/gui combination is started here
        if mode in ('client', 'server-gui'):
            from bluesky.ui import qtgl
            qtgl.start(mode)

    # Give info on missing module
    except ImportError as error:
        modulename = missingmodules.get(error.name) or error.name
        if modulename is None:
            raise error
        print("Bluesky needs", modulename)
        print("Install using e.g. pip install", modulename)