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

- fakeinput can now run w/ pkgrun

- fix a bottle.TEMPLATE global variable clash (shoud fix the same in dashboard)

git-svn-id: https://redmine.imt-atlantique.fr/svn/xaal/code/Python/branches/0.7@2923 b32b6428-25c9-4566-ad07-03861ab6144f
parent caa9ef5b
Branches
No related tags found
No related merge requests found
from .app import setup
\ No newline at end of file
from gevent import monkey; monkey.patch_all()
from gevent import monkey; monkey.patch_all(thread=False)
from xaal.lib import Engine,Device,helpers,tools
from bottle import default_app,debug,get,request,response,redirect,static_file,template,TEMPLATE_PATH
from bottle import Bottle,default_app,debug,get,request,response,redirect,static_file,template,TEMPLATE_PATH
from . import devices
import os
import platform
import logging
from gevent import Greenlet
import gevent
from gevent.pywsgi import WSGIServer
from geventwebsocket.handler import WebSocketHandler
PACKAGE_NAME = "xaal.fakeinput"
logger = logging.getLogger(PACKAGE_NAME)
DEFAULT_PORT = 8081
HOME = os.path.dirname(__file__)
VIEWS = [os.path.join(HOME,"views"),]
logger = logging.getLogger(PACKAGE_NAME)
server = None
cfg = None
fake_devices = []
app = Bottle()
def setup_xaal():
def setup_xaal(engine):
""" setup xAAL Engine & Device. And start it in a Greenlet"""
global monitor,cfg
engine = Engine()
global cfg
cfg = tools.load_cfg(PACKAGE_NAME)
if not cfg:
cfg = tools.new_cfg(PACKAGE_NAME)
......@@ -43,12 +43,9 @@ def setup_xaal():
engine.add_device(dev)
load_config(engine)
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()
......@@ -60,7 +57,6 @@ def random_devices():
return tmp
def load_config(engine):
global fake_devices
cfg_devices = cfg.get('devices',[])
for k in cfg_devices:
addr = tools.get_uuid(k)
......@@ -84,54 +80,67 @@ def search_device(addr):
return k
return None
@get('/static/<filename:path>')
@app.get('/static/<filename:path>')
def static(filename):
root = os.path.dirname(__file__)
root = os.path.join(root,'static')
root = os.path.join(HOME,'static')
return static_file(filename, root=root)
@get('/')
@app.get('/')
def index():
return template('index.tpl',request=request,devices = fake_devices)
return template('index.tpl',template_lookup=VIEWS,request=request,devices=fake_devices)
@get('/api/click/<addr>/<click_type:int>')
@app.get('/api/click/<addr>/<click_type:int>')
def click(addr,click_type):
dev = search_device(addr)
if dev and isinstance(dev,devices.Button):
dev.click(click_type)
@get('/api/set_on/<addr>')
@app.get('/api/set_on/<addr>')
def set_on(addr):
dev = search_device(addr)
if dev and not isinstance(dev,devices.Button):
dev.set_on()
@get('/api/set_off/<addr>')
@app.get('/api/set_off/<addr>')
def set_off(addr):
dev = search_device(addr)
if dev and not isinstance(dev,devices.Button):
dev.set_off()
def run():
""" start the xAAL stack & launch the HTTP stuff"""
root = os.path.join(HOME,'views')
TEMPLATE_PATH.append(root)
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',DEFAULT_PORT))
logger.info("HTTP Server running on port : %d" % port)
server = WSGIServer(("", port), app, handler_class=WebSocketHandler)
server = WSGIServer(f":{port}", app, handler_class=WebSocketHandler)
server.serve_forever()
def stop():
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