Files
PhotonVision/backend/app/handlers/SocketHandler.py

86 lines
2.8 KiB
Python
Raw Normal View History

2019-03-01 21:59:49 +02:00
import tornado.websocket
2019-03-23 23:42:24 +02:00
import json
from ..classes.Exceptions import NoCameraConnectedException
2019-04-13 11:57:43 -07:00
from ..classes.SettingsManager import SettingsManager
2019-03-01 21:59:49 +02:00
2019-03-26 21:05:31 +02:00
2019-03-01 21:59:49 +02:00
class ChameleonWebSocket(tornado.websocket.WebSocketHandler):
actions = {}
2019-03-26 21:05:31 +02:00
set_this_camera_settings = ["exposure", "brightness", "video_mode"]
def __init__(self, application, request, **kwargs):
super().__init__(application, request, **kwargs)
self.settings_manager = SettingsManager()
self.init_actions()
def init_actions(self):
2019-04-20 09:02:21 -07:00
self.actions["change_pipeline_values"] = self.change_pipeline_values
self.actions["change_general_settings_values"] = self.settings_manager.change_general_settings_values
self.actions["change_cam"] = self.change_curr_camera
self.actions["change_pipeline"] = self.change_curr_pipeline
2019-03-31 22:24:10 +03:00
def open(self):
2019-03-31 22:24:10 +03:00
self.send_full_settings()
2019-03-29 18:20:40 +03:00
2019-03-02 00:12:41 +02:00
print("WebSocket opened")
2019-03-01 21:59:49 +02:00
def on_message(self, message):
2019-03-31 22:24:10 +03:00
message_dic = json.loads(message)
for key in message_dic:
self.actions.get(key, self.actions["change_pipeline_values"])(message_dic[key])
2019-03-26 21:05:01 +02:00
print(message)
2019-03-02 00:12:41 +02:00
2019-03-01 21:59:49 +02:00
def on_close(self):
self.settings_manager.save_settings()
2019-03-02 00:12:41 +02:00
print("WebSocket closed")
2019-04-08 21:35:17 +03:00
def check_origin(self, origin):
return True
def send_curr_pipeline(self):
try:
self.write_message(self.settings_manager.get_curr_pipeline())
except NoCameraConnectedException:
# TODO: return something if no camera connected
self.write_message("No camera connected")
def send_curr_cam(self):
try:
self.write_message(self.settings_manager.get_curr_cam())
except NoCameraConnectedException:
# TODO: return something if no camera connected
self.write_message("No camera connected")
2019-03-31 22:24:10 +03:00
def send_full_settings(self):
full_settings = self.settings_manager.general_settings.copy()
try:
full_settings = self.settings_manager.get_curr_pipeline()
except NoCameraConnectedException:
# TODO: return something if no camera connected
full_settings["data"] = None
2019-03-31 22:24:10 +03:00
self.write_message(full_settings)
2019-03-31 22:24:10 +03:00
def change_curr_camera(self, dic):
self.settings_manager.set_curr_camera(cam_name=dic["cam"])
self.send_curr_cam()
2019-03-31 22:24:10 +03:00
def change_curr_pipeline(self, dic):
self.settings_manager.set_curr_pipeline(pipe_name=dic["pipeline"])
self.send_curr_pipeline()
2019-04-20 09:02:21 -07:00
def change_pipeline_values(self, dic):
self.settings_manager.change_pipeline_values(dic)
for key in self.set_this_camera_settings:
if key in dic:
self.settings_manager.set_camera_settings(self.settings_manager.general_settings["curr_camera"],
dic[key])