|
@@ -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](
|
|
|
-
|
|
|
- *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()
|
|
|
|
|
@@ -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](
|
|
|
-
|
|
|
- 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")
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- 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!")
|
|
|
|
|
|
|
|
|
|