Skip to content
Snippets Groups Projects
Commit c33dfdae authored by jkerdreu's avatar jkerdreu
Browse files

Managed to get asyncio & gevent in the same code !

Should do the same w/ the dashboard



git-svn-id: https://redmine.imt-atlantique.fr/svn/xaal/code/Python/branches/0.7@2921 b32b6428-25c9-4566-ad07-03861ab6144f
parent 4732ed23
No related branches found
No related tags found
No related merge requests found
from .app import setup
from . import app
app.main()
from .app import main
main()
......@@ -11,7 +11,7 @@ import os
import platform
import logging
from gevent import Greenlet
import gevent
from gevent.pywsgi import WSGIServer
from geventwebsocket.handler import WebSocketHandler
......@@ -25,6 +25,7 @@ logger = logging.getLogger(PACKAGE_NAME)
# we use this global variable to share data with greenlet
monitor = None
cfg = None
server = None
def monitor_filter(msg):
""" Filter incomming messages. Return False if you don't want to use this device"""
......@@ -32,10 +33,9 @@ def monitor_filter(msg):
return False
return True
def setup_xaal():
def setup_xaal(engine):
""" setup xAAL Engine & Device. And start it in a Greenlet"""
global monitor,cfg
engine = Engine()
cfg = tools.load_cfg(PACKAGE_NAME)
if not cfg:
logger.info("No config file found, building a new one")
......@@ -55,12 +55,10 @@ def setup_xaal():
if not db_server:
logger.info('Please set a db_server in your config file')
monitor = Monitor(dev,filter_func=monitor_filter,db_server=tools.get_uuid(db_server))
engine.start()
green_let = Greenlet(xaal_loop, engine)
green_let.start()
def xaal_loop(engine):
""" xAAL Engine Loop Greenlet"""
engine.start()
while 1:
engine.loop()
......@@ -141,11 +139,12 @@ def send_request(addr,action):
response.status=404
return json_encode(res)
def run():
""" start the xAAL stack & launch the HTTP stuff"""
global server
helpers.set_console_title(PACKAGE_NAME)
helpers.setup_console_logger(level=logging.INFO)
setup_xaal()
app = default_app()
debug(True)
port = int(cfg.get('config').get('port',8080))
......@@ -153,13 +152,30 @@ def run():
server = WSGIServer(("", port), app, handler_class=WebSocketHandler)
server.serve_forever()
def stop():
global server
server.stop()
def main():
# This apps can run with gevent alone (without asyncio)
# bottle.py use gevent to handle websocket.
# I maintain this to be able to run it on older 2.7 Python
engine = Engine()
setup_xaal(engine)
green_let = gevent.Greenlet(xaal_loop, engine)
green_let.start()
try:
run()
except KeyboardInterrupt:
stop()
print("Bye Bye...")
def setup(engine):
# This is a AsyncEngine only setup, used w/ xaal-pkgrun for example
setup_xaal(engine)
gevent.spawn(run)
engine.on_stop(stop)
return True
if __name__ == '__main__':
main()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment