def new_server(viewer_queue, stop_page, port, secret_key):
# create server
app = Flask(__name__, static_url_path='/static')
app.config['SECRET_KEY'] = secret_key
# must be 'threading' for broadcast emitting
socketio = SocketIO(app, async_mode='threading',
logger=False, engineio_logger=False)
# rooting
@app.route('/')
def __index():
logger.info('Render viewer page')
return render_template('index.html', script="index.js")
if stop_page:
@app.route('/stop')
def __stop():
socketio.stop()
logger.info('Server stop request')
return 'This server is stopped'
@socketio.on('connect', namespace=IO_NAMESPACE)
def __on_viewer_connect():
logger.info('New viewer connection is established')
@socketio.on('disconnect', namespace=IO_NAMESPACE)
def __on_viewer_disconnect():
logger.info('Viewer connection is closed')
@socketio.on('update', namespace=IO_NAMESPACE)
def __on_update():
logger.info('Image updating request is received')
# get all of current data
emit_data = buffering_thread.get_data_all()
# emit all
logger.debug('Emit for update all')
emit('update', emit_data, namespace=IO_NAMESPACE)
def update_event(tab, name, data):
emit_data = [[tab, name, data]] # single data
# broadcast emit
logger.debug('Broadcast emit for update (tab: %s, name: %s)' %
(str(tab), str(name)))
socketio.emit('update', emit_data, namespace=IO_NAMESPACE)
# create image updating thread
if viewer_queue:
logger.info('Start image buffering thread')
buffering_thread = ImageBufferingThread(viewer_queue)
buffering_thread.daemon = True
buffering_thread.start()
buffering_thread.register_update_event_func(update_event)
# start server
logger.info('Start server on port %d' % port)
socketio.run(app, host='0.0.0.0', port=port, debug=False, log_output=False)
logger.info('Stop server on port %d' % port)
评论列表
文章目录