implement client reconnect; remove some old code
This commit is contained in:
@ -46,7 +46,7 @@ class AssetsController(Controller):
|
||||
filename = self.matches.group(1)
|
||||
self.serve_file(filename)
|
||||
|
||||
class ClientDataForwarder(object):
|
||||
class OpenWebRxClient(object):
|
||||
def __init__(self, conn):
|
||||
self.conn = conn
|
||||
def write_spectrum_data(self, data):
|
||||
@ -63,17 +63,23 @@ class ClientDataForwarder(object):
|
||||
self.conn.send(bytes([0x04]) + data)
|
||||
def write_secondary_dsp_config(self, cfg):
|
||||
self.conn.send({"type":"secondary_config", "value":cfg})
|
||||
def write_config(self, cfg):
|
||||
self.conn.send({"type":"config","value":cfg})
|
||||
def write_receiver_details(self, details):
|
||||
self.conn.send({"type":"receiver_details","value":details})
|
||||
|
||||
class WebSocketMessageHandler(object):
|
||||
def __init__(self):
|
||||
self.handshake = None
|
||||
self.forwarder = None
|
||||
self.client = None
|
||||
|
||||
def handleTextMessage(self, conn, message):
|
||||
if (message[:16] == "SERVER DE CLIENT"):
|
||||
# maybe put some more info in there? nothing to store yet.
|
||||
self.handshake = "completed"
|
||||
|
||||
self.client = OpenWebRxClient(conn)
|
||||
|
||||
pm = PropertyManager.getSharedInstance()
|
||||
|
||||
config_keys = ["waterfall_colors", "waterfall_min_level", "waterfall_max_level",
|
||||
@ -82,19 +88,18 @@ class WebSocketMessageHandler(object):
|
||||
"client_audio_buffer_size"]
|
||||
config = dict((key, pm.getPropertyValue(key)) for key in config_keys)
|
||||
config["start_offset_freq"] = pm.getPropertyValue("start_freq") - pm.getPropertyValue("center_freq")
|
||||
conn.send({"type":"config","value":config})
|
||||
self.client.write_config(config)
|
||||
print("client connection intitialized")
|
||||
|
||||
receiver_keys = ["receiver_name", "receiver_location", "receiver_qra", "receiver_asl", "receiver_gps",
|
||||
"photo_title", "photo_desc"]
|
||||
receiver_details = dict((key, pm.getPropertyValue(key)) for key in receiver_keys)
|
||||
conn.send({"type":"receiver_details","value":receiver_details})
|
||||
self.client.write_receiver_details(receiver_details)
|
||||
|
||||
self.forwarder = ClientDataForwarder(conn)
|
||||
SpectrumThread.getSharedInstance().add_client(self.forwarder)
|
||||
CpuUsageThread.getSharedInstance().add_client(self.forwarder)
|
||||
SpectrumThread.getSharedInstance().add_client(self.client)
|
||||
CpuUsageThread.getSharedInstance().add_client(self.client)
|
||||
|
||||
self.dsp = DspManager(self.forwarder)
|
||||
self.dsp = DspManager(self.client)
|
||||
|
||||
return
|
||||
|
||||
@ -119,9 +124,9 @@ class WebSocketMessageHandler(object):
|
||||
print("unsupported binary message, discarding")
|
||||
|
||||
def handleClose(self, conn):
|
||||
if self.forwarder:
|
||||
SpectrumThread.getSharedInstance().remove_client(self.forwarder)
|
||||
CpuUsageThread.getSharedInstance().remove_client(self.forwarder)
|
||||
if self.client:
|
||||
SpectrumThread.getSharedInstance().remove_client(self.client)
|
||||
CpuUsageThread.getSharedInstance().remove_client(self.client)
|
||||
if self.dsp:
|
||||
self.dsp.stop()
|
||||
|
||||
|
@ -67,9 +67,11 @@ class SpectrumThread(threading.Thread):
|
||||
bytes_to_read=int(dsp.get_fft_bytes_to_read())
|
||||
while self.doRun:
|
||||
data=dsp.read(bytes_to_read)
|
||||
#print("gotcha",len(data),"bytes of spectrum data via spectrum_thread_function()")
|
||||
for c in self.clients:
|
||||
c.write_spectrum_data(data)
|
||||
if len(data) == 0:
|
||||
self.shutdown()
|
||||
else:
|
||||
for c in self.clients:
|
||||
c.write_spectrum_data(data)
|
||||
|
||||
print("spectrum thread shut down")
|
||||
|
||||
@ -136,9 +138,11 @@ class DspManager(object):
|
||||
|
||||
if (pm.getPropertyValue("digimodes_enable")):
|
||||
def set_secondary_mod(mod):
|
||||
if mod == False: mod = None
|
||||
if self.dsp.get_secondary_demodulator() == mod: return
|
||||
self.stopSecondaryThreads()
|
||||
self.dsp.stop()
|
||||
if mod == False:
|
||||
if mod is None:
|
||||
self.dsp.set_secondary_demodulator(None)
|
||||
else:
|
||||
self.dsp.set_secondary_demodulator(mod)
|
||||
@ -147,8 +151,6 @@ class DspManager(object):
|
||||
"if_samp_rate":self.dsp.if_samp_rate(),
|
||||
"secondary_bw":self.dsp.secondary_bw()
|
||||
})
|
||||
# TODO frontend will probably miss this
|
||||
#rxws.send(self, "MSG secondary_fft_size={0} if_samp_rate={1} secondary_bw={2} secondary_setup".format(cfg.digimodes_fft_size, dsp.if_samp_rate(), dsp.secondary_bw()))
|
||||
self.dsp.start()
|
||||
|
||||
if mod:
|
||||
@ -180,7 +182,10 @@ class DspManager(object):
|
||||
def readDspOutput(self):
|
||||
while (self.doRun):
|
||||
data = self.dsp.read(256)
|
||||
self.handler.write_dsp_data(data)
|
||||
if len(data) != 256:
|
||||
time.sleep(1)
|
||||
else:
|
||||
self.handler.write_dsp_data(data)
|
||||
|
||||
def readSMeterOutput(self):
|
||||
while (self.doRun):
|
||||
@ -199,6 +204,7 @@ class DspManager(object):
|
||||
|
||||
def stop(self):
|
||||
self.doRun = False
|
||||
self.runSecondary = False
|
||||
self.dsp.stop()
|
||||
|
||||
def setProperty(self, prop, value):
|
||||
|
Reference in New Issue
Block a user