From 490dfb1af1357e1672a06c5ad82851b8deff0276 Mon Sep 17 00:00:00 2001 From: sam Date: Wed, 30 Sep 2020 00:15:40 +0200 Subject: [PATCH] Gracefuler end. --- LJ.conf | 14 +++++++------- README.md | 4 +++- ethertools/talk3.py | 2 +- libs3/cli.py | 4 ++-- libs3/commands.py | 37 ++++++++++++++++++++++++++++++++++--- libs3/gstt.py | 2 +- main.py | 12 ++++++++---- 7 files changed, 56 insertions(+), 19 deletions(-) diff --git a/LJ.conf b/LJ.conf index 69d6b6f..741f1fe 100644 --- a/LJ.conf +++ b/LJ.conf @@ -1,5 +1,5 @@ [General] -lasernumber = 4 +lasernumber = 2 debug = 0 ljayserverip = 0.0.0.0 wwwip = 192.168.2.43 @@ -63,9 +63,9 @@ swapx = -1 swapy = -1 lsteps = [(1.0, 8),(0.25, 3), (0.75, 3), (1.0, 10)] warpdest = [[-1500., 1500.], - [ 1500., 1500.], - [ 1500.,-1500.], - [-1500.,-1500.]] + [ 1500., 1500.], + [ 1500.,-1500.], + [-1500.,-1500.]] [laser3] color = -1 @@ -83,9 +83,9 @@ swapx = -1 swapy = -1 lsteps = [(1.0, 8),(0.25, 3), (0.75, 3), (1.0, 10)] warpdest = [[-1500., 1500.], - [ 1500., 1500.], - [ 1500.,-1500.], - [-1500.,-1500.]] + [ 1500., 1500.], + [ 1500.,-1500.], + [-1500.,-1500.]] [plugins] plugins = { diff --git a/README.md b/README.md index ee8e4ff..9ea87bf 100644 --- a/README.md +++ b/README.md @@ -354,7 +354,9 @@ About hardware setup, especially if you have several lasers : ILDA cables are in # 2 useful and *always working tools* from j4cdac github repository : sitter and talk. -- Sitter will display all etherdreams available on the network and their state (playing, idle,...). python sitter.py or use the compiled version (for macOS). May need tkinter : pip3 install tk +- Sitter will display all etherdreams available on the network and their state (playing, idle,...). python sitter.py or use the compiled version (for macOS). May need tkinter : +pip3 install tk ++/- : sudo apt install python-tk - Talk : will draw a 4 colors square. Try : python3 talk3.py -h # diff --git a/ethertools/talk3.py b/ethertools/talk3.py index b841124..b4de9ef 100755 --- a/ethertools/talk3.py +++ b/ethertools/talk3.py @@ -35,7 +35,7 @@ import sys argsparser = argparse.ArgumentParser(description="Draw a square on a laser via Etherdream DAC") -argsparser.add_argument("-i","--ip",help="Etherdream IP (default : first etherdream broadcast received",default="True",type=str) +argsparser.add_argument("-i","--ip",help="Etherdream IP (default : first etherdream broadcast received)",default="True",type=str) diff --git a/libs3/cli.py b/libs3/cli.py index 7af0f73..83aa5fc 100644 --- a/libs3/cli.py +++ b/libs3/cli.py @@ -15,6 +15,7 @@ from /team/laser from libs3 import gstt import argparse import subprocess +from libs3 import settings def handle(): @@ -112,8 +113,7 @@ def handle(): # Lasers = number of laser connected otherwise will be autodetected with one minimum if args.Lasers != None: gstt.LaserNumber = args.Lasers - else: - gstt.LaserNumber = 1 + Settings.Write() if args.bhoroscIP != None: diff --git a/libs3/commands.py b/libs3/commands.py index 133c2e7..fe61ca5 100644 --- a/libs3/commands.py +++ b/libs3/commands.py @@ -92,7 +92,7 @@ Bob could use /pl/2/0 and /pl/2/1 and Lisa could use /pl/2/2 and /pl/2/3. import types, time, socket from libs3 import gstt import redis -from libs3 import settings, plugins, homographyp +from libs3 import settings, plugins, homographyp,log r = redis.StrictRedis(host=gstt.LjayServerIP , port=6379, db=0) @@ -333,6 +333,9 @@ def handler(oscpath, args): print() print("new laser number",args[0]) print() + gstt.LaserNumber = args[0] + settings.Write() + if oscpath[2] == "regen": print() @@ -352,6 +355,7 @@ def handler(oscpath, args): print() gstt.debug = int(args[0]) plugins.SendAll("/debug "+str(gstt.debug)) + settings.Write() if oscpath[2] == "rescan": @@ -359,11 +363,13 @@ def handler(oscpath, args): DAChecks() print("Done.") - if oscpath[2] == "rstrt": + if oscpath[2] == "restart": print() print("Restarting", args[0], "...") if args[0] == "lj": - raise Restart(time.asctime()) + LJautokill() + import os + os.execv(sys.executable, ['python3'] + sys.argv) else: plugins.Restart(args[0]) print() @@ -586,6 +592,31 @@ def isconnected(IP): time.sleep(delay) return ipup ''' +def LJautokill(): + + log.warn("LJ stopping...") + print(gstt.LaserNumber,"Tracers launched") + lasernumber= gstt.LaserNumber -1 + log.warn("Killing tracer0...") + worker0.join() + if lasernumber >0: + log.warn("Killing tracer1...") + worker1.join() + if lasernumber >1: + log.warn("Killing tracer2...") + worker2.join() + if lasernumber >2: + log.warn("Killing tracer3...") + worker3.join() + + log.warn("Laser feedbacks resetting...") + for laserid in range(0,lasernumber+1): + + r.set('/lack/'+str(laserid),64) + r.set('/lstt/'+str(laserid),64) + r.set('/cap/'+str(laserid),0) + log.infog("LJ stopped.") + # autodetect DACs in LJ.conf. def DAChecks(): diff --git a/libs3/gstt.py b/libs3/gstt.py index 8af2178..193098d 100644 --- a/libs3/gstt.py +++ b/libs3/gstt.py @@ -23,7 +23,7 @@ ljpath='' anims= [[],[],[],[]] # How many lasers are connected. Different that "currentlaser" and "dacnumber" (=autodetected) -LaserNumber = -1 +LaserNumber = 4 # What laser client to listen at launch SceneNumber = 0 diff --git a/main.py b/main.py index bf33162..a633d63 100755 --- a/main.py +++ b/main.py @@ -440,21 +440,25 @@ if __name__ == '__main__': # Launch one process (a newdacp instance) by etherdream dac_worker0= Process(target=dac_process, args=(0,0,)) dac_worker0.start() + commands.worker0 = dac_worker0 print("Tracer 0 : name", dac_worker0.name , "pid", dac_worker0.pid ) if lasernumber >0: dac_worker1= Process(target=dac_process, args=(1,0,)) + commands.worker1 = dac_worker1 print("Tracer 1 : name", dac_worker1.name , "pid", dac_worker1.pid ) dac_worker1.start() if lasernumber >1: dac_worker2= Process(target=dac_process, args=(2,0,)) dac_worker2.start() + commands.worker2 = dac_worker2 print("Tracer 2 : name", dac_worker2.name , "pid", dac_worker2.pid ) if lasernumber >2: dac_worker3= Process(target=dac_process, args=(3,0,)) print("Tracer 3 : name", dac_worker3.name , "pid", dac_worker3.pid ) + commands.worker3 = dac_worker3 dac_worker3.start() print("") #def Run(): @@ -511,14 +515,13 @@ if __name__ == '__main__': except Exception: log.err("Exception") traceback.print_exc() - - except Restart(moment): - print("Autokill asked at", moment) # Gently stop on CTRL C finally: + commands.LJautokill() + ''' dac_worker0.join() if lasernumber >0: dac_worker1.join() @@ -533,8 +536,9 @@ if __name__ == '__main__': r.set('/lack/'+str(laserid),64) r.set('/lstt/'+str(laserid),64) r.set('/cap/'+str(laserid),0) + ''' + - print("Fin de LJ.") #if __name__ == "__main__": # Run()