class Server(): def __init__(self, port): self.port = port self.app = Flask(__name__, static_folder='assets/static', static_url_path='/static', template_folder='assets/templates') self.app.register_blueprint(routes) self.socketio = SocketIO(self.app) # Log to stdout. sh = logging.StreamHandler(sys.stdout) self.app.logger.addHandler(sh) @self.socketio.on('connect') def on_connect(): """ This seems necessary to get the SocketIO emitting working properly... """ pass def start(self): self.app.logger.debug('starting the nomadic server...') self.socketio.run(self.app, port=self.port) def refresh_clients(self): self.socketio.emit('refresh')
values = [s.strip().split(".") for s in args.values.split(",")] while 1: polld = poller.poll(timeout=1000) for sock, mode in polld: if mode != zmq.POLLIN: continue msg = sock.recv() evt = log.Event.from_bytes(msg) if sock in republish_socks: republish_socks[sock].send(msg) if args.map and evt.which() == 'liveLocation': print('send loc') socketio.emit( 'location', { 'lat': evt.liveLocation.lat, 'lon': evt.liveLocation.lon, 'alt': evt.liveLocation.alt, }) if not args.no_print: if args.pipe: sys.stdout.write(msg) sys.stdout.flush() elif args.raw: hexdump(msg) elif args.json: print(json.loads(msg)) elif args.dump_json: print(json.dumps(evt.to_dict())) elif values: print("logMonotime = {}".format(evt.logMonoTime)) for value in values:
class RandomThread(Thread): def __init__(self): self.delay = 1 super(RandomThread, self).__init__() def randomNumberGenerator(self): """ Generate a random number every 1 second and emit to a socketio instance (broadcast) Ideally to be run in a separate thread? """ #infinite loop of magical random numbers print "Making random numbers" while not thread_stop_event.isSet(): number = round(random()*10, 3) print number socketio.emit('newnumber', {'number': number}, namespace='/test') print "app.py: emitted newnumber" sleep(self.delay) def run(self): self.randomNumberGenerator() @app.route('/') def index(): #only by sending this page first will the client be connected to the socketio instance return render_template('index.html') @socketio.on('connect', namespace='/test') def test_connect(): # need visibility of the global thread object
# plot point of interrest @socketio.on(MARKER, namespace='/stream') def flag(message): logger.info("client requesting flag plot: " + str(message)) try: results = [] results.append(CHART_MARKER) results.append(message['data']) values.append(results) logger.debug("appended to values: " + str(results)) datafile.write(str(results) + '\n') logger.debug("written to file") except Exception, e: logger.warn("unable to append the data file: " + str(e)); logger.info("broadcasting: " + message['data']) socketio.emit(MARKER, {'data': message['data']}, namespace='/stream') # socket.io refresh request @socketio.on('refresh', namespace='/stream') def refresh(message): logger.info('client requesting refresh: ' + str(message)) realtime = False # shutdown the realtime events to prevent timeline contamination i = 0; # counter for how many events were emitting for logging later e = message['data'] # get thre desired count of records from the message # if the desired number of recoreds exceeds whats in the value history, adjust accordingly if e>len(values): e=len(values) logger.debug("setting max history available to %s" % e)