Przeglądaj źródła

now only coroutines get executed using curio.run

digital 7 lat temu
rodzic
commit
5dda2b5931
1 zmienionych plików z 21 dodań i 60 usunięć
  1. 21 60
      lib/beewatch/server/__init__.py

+ 21 - 60
lib/beewatch/server/__init__.py

@@ -42,19 +42,21 @@ lserver = logging.getLogger(__name__+".server")
 
 class BeeWatchServer(digilib.network.Server):
     """docstring for Server."""
+
     def __init__(self,*args,**kwargs):
         super(BeeWatchServer, self).__init__(
             *args,
             **kwargs,
             handler=beewatch.server.ConnHandlerBeeWatch,
         )
+
     def make_socket(self):
         s = super(BeeWatchServer,self).make_socket()
         s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1)
         return s
 
-
 class ConnHandlerBeeWatch(digilib.network.ConnHandlerBase):
+
     def __init__(self, socket, addr, server):
         super(ConnHandlerBeeWatch, self).__init__(socket, addr, server)
         self.engines_ctrl = beewatch._controllers["engines_ctrl"]
@@ -65,26 +67,7 @@ class ConnHandlerBeeWatch(digilib.network.ConnHandlerBase):
         self.text_to_func = {
             "turn":self.engines_ctrl.turn
         }
-    def call(self,func_name,args,respond,kwargs):
-        ttf = beewatch._commands
-        if func_name in ttf.keys():
-            try:
-                task = curio.run(
-                    ttf[func_name](
-                        # self.bee_api,
-                        *args,
-                        respond=respond,
-                        **kwargs,
-                    )
-                )
-            except:
-                tb = traceback.format_exc()
-                print(tb)
-                respond(tb)
-        else:
-            respond("Unknown command")
-    def welcome_client(self):
-        self.send("this is the server speaking, hello new client!")
+
     def handle(self, data_decoded):
         data_decoded=data_decoded.strip()
         # lchat.info("Client:"+data_decoded)
@@ -94,49 +77,27 @@ class ConnHandlerBeeWatch(digilib.network.ConnHandlerBase):
         else:
             cmd=data_decoded
             args = ()
-        kwargs = {}
-        ttf = beewatch._commands
-        if cmd in ttf.keys():
-            try:
-                task = curio.run(
-                    ttf[cmd](
-                        # self.bee_api,
-                        args=args,
-                        command=cmd,
-                        respond=self.respond,
-                    )
-                )
-            except Exception as e:
-                lserver.error("Error while calling api func",exc_info=e)
-                tb = traceback.format_exc()
-                self.respond(tb)
-        else:
+        kwargs = {"args":args,"command":command,"respond":self.respond}
+        func = beewatch._commands.get(name,False)
+        if func == False:
             self.respond("Unknown command")
-        # self.call(
-        #     cmd,
-        #     respond=self.respond,
-        #     args=args,
-        #     kwargs={},
-        # )
-    def do(self,func_num,*args,respond):
-        arg_to_func = {
-            "1":self.bee_api.do_something_1,
-            "2":self.bee_api.do_something_2,
-            "3":self.bee_api.do_something_3,
-        }
-        arg_to_func[func_num](*args,respond=respond)
-    def echo(self,*args,**kwargs):
-        lchat.info(str(args))
-        lchat.info(str(kwargs))
-    def speedcheck(self,respond):
-        left_speed=str(self.bee_api.c.movement_control.get_speed("left"))
-        right_speed=str(self.bee_api.c.movement_control.get_speed("right"))
-        result = "left: "+left_speed+", right: "+right_speed
-        lchat.info(result)
-        self.respond(result)
+            return
+        try:
+            retval = func(**kwargs)
+            if type(retval) is curio.coroutine:
+                lserver.debug("curio.run started")
+                task = curio.run(retval)
+                lserver.debug("curio.run finished")
+        except Exception as e:
+            lserver.error("Error while calling api func",exc_info=e)
+            tb = traceback.format_exc()
+            self.respond(tb)
+
     def respond(self,text,*args):
         self.send(text)
 
+    def welcome_client(self):
+        self.send("this is the server speaking, hello new client!")