Эх сурвалжийг харах

fix: json socket pkg drop's (encoder +/-)

micha 3 жил өмнө
parent
commit
8f07edc908
3 өөрчлөгдсөн 32 нэмэгдсэн , 26 устгасан
  1. 13 14
      _LibreLightDesk.py
  2. 5 4
      console.py
  3. 14 8
      lib/chat.py

+ 13 - 14
_LibreLightDesk.py

@@ -161,8 +161,8 @@ POS   = ["PAN","TILT","MOTION"]
 COLOR = ["RED","GREEN","BLUE","COLOR"]
 BEAM  = ["GOBO","G-ROT","PRISMA","P-ROT","FOCUS","SPEED"]
 INT   = ["DIM","SHUTTER","STROBE","FUNC"]
-client = chat.tcp_sender()
-jclient = chat.tcp_sender(port=50001)
+client = chat.tcp_sender(port=50001)
+jclient = chat.tcp_sender()#port=50001)
 
 class _FadeTime():
     def __init__(self):
@@ -1428,7 +1428,7 @@ class GUI(Base):
                     cmd.append(vcmd[i])
         if cmd and not modes.val("BLIND"):
             pass
-            jclient.send( "**"+ json.dumps(cmd) +"**" )
+            jclient.send( "\x00"+ json.dumps(cmd) +"\x00" )
         return 0
 
         cmd=[]
@@ -2087,7 +2087,11 @@ class Fixtures(Base):
             return 0
 
         if fix not in self.fixtures:
+            jdata=[{"MODE":"---"}]
+            ii =0
+            jclient.send("\x00"+json.dumps(jdata)+"\x00")
             for fix in self.fixtures:
+                ii+=1
                 #cprint(fix,attr,xval)
                 data = self.fixtures[fix]
                 if attr in data["ATTRIBUT"]:
@@ -2096,6 +2100,8 @@ class Fixtures(Base):
                     elif data["ATTRIBUT"][attr]["ACTIVE"]:
                         if fix: # prevent endless recursion
                             self.encoder(fix,attr,xval,xfade)
+            jdata=[{"MODE":ii}]
+            jclient.send("\x00"+json.dumps(jdata)+"\x00")
             return 0
 
         data = self.fixtures[fix]
@@ -2112,15 +2118,12 @@ class Fixtures(Base):
         if xval == "+":
             v2+= increment
             jdata["INC"] = increment
-            v = "+{:0.4f}".format( increment ) #) #4.11"
             change=1
         elif xval == "-":
             jdata["INC"] = increment*-1
             v2-= increment
-            v = "-{:0.4f}".format( increment ) #) #4.11"
             change=1
         elif type(xval) is int or type(xval) is float:
-            jdata["xVALUE"] = round(xval,4)
             v2 = xval 
             change=1
 
@@ -2137,19 +2140,15 @@ class Fixtures(Base):
         if change:
             data["ATTRIBUT"][attr]["ACTIVE"] = 1
             data["ATTRIBUT"][attr]["VALUE"] = round(v2,4)
+
+            jdata["FADE"] = 0
             if xfade:
-                cmd=update_dmx(attr=attr,data=data)
                 jdata["FADE"] = xfade
-            else:
-                cmd=update_dmx(attr=attr,data=data,args=[0])
-                jdata["FADE"] = 0
 
-            if cmd and not modes.val("BLIND"):
-                #client.send(cmd)
+            if not modes.val("BLIND"):
                 jdata = [jdata]
                 print(jdata)
-                #print(cmd)
-                jclient.send("**"+json.dumps(jdata)+"**")
+                jclient.send("\x00"+json.dumps(jdata)+"\x00")
         return v2
 
     def get_active(self):

+ 5 - 4
console.py

@@ -377,8 +377,9 @@ def split_cmd(data):
 
 import json
 def JCB(data):
-    jdatas = data["cmd"].split("**")
-    print("JCB")
+    #jdatas = data["cmd"].split("\x00")
+    jdatas = [data["cmd"]]
+    #print("JCB")
     c = clock.time() 
     c = float(c)
     time = 0
@@ -586,9 +587,9 @@ def CB(data):
                 print("Error on line {}".format(sys.exc_info()[-1].tb_lineno))
 
 
-jchat = chat.CMD(JCB,port=50001) # server listener
+jchat = chat.CMD(CB,port=50001) # server listener
 thread.start_new_thread(jchat.poll,())
-chat.cmd(CB) # server listener
+chat.cmd(JCB) # server listener
 #chat.cmd(JCB,port=50001) # server listener
 
 #input("END")

+ 14 - 8
lib/chat.py

@@ -90,6 +90,7 @@ class CMD():
         self.clients2 = clients2
         self.cb=cb
         self.select=select
+        self.msg=b''
     def poll(self):
         server  = self.server
         clients = self.clients
@@ -114,14 +115,19 @@ class CMD():
                     else:
                         msg=b''
                         try:
-                            xmsg = sock.recv(1024)#5120)
-                        except BlockingIOError as e:
-                            pass#print( "exception",e)
-                        try:
-                            while xmsg: 
-                                msg += xmsg
+                            if self.msg:
+                                xmsg = self.msg
+                            else:
                                 xmsg = sock.recv(1024)#5120)
-                                xmsg = xmsg.replace(b";",b"")
+                            while xmsg:# != b"\x00": 
+                                if b'\x00' in xmsg:
+                                    s = xmsg.split(b"\x00",1)
+                                    msg += s[0]
+                                    self.msg = s[1]
+                                    break
+                                msg += xmsg
+                                xmsg = sock.recv(1)#5120)
+                                #xmsg = xmsg.replace(b";",b"")
                             #print(msg)
                         except BlockingIOError as e:
                             pass#print( "exception",e)
@@ -154,7 +160,7 @@ class CMD():
                                 cb({"c":client_nr,"cmd":cmd})
 
 
-                        else:
+                        if 0:#else: #workaround json sock pkg-drops
                             print("+++ Verbindung zu %s beendet" % ip)
                             sock.close()
                             if sock in clients: