103 lines
2.7 KiB
Python
Raw Normal View History

2020-05-15 12:27:34 +02:00
import socket
import select
import signal
from CameraContext import CameraContext
from UserCommand import UserCommand
from CameraConnection import CameraConnection
from CameraCommander import CameraCommander
from WaitActivity import WaitActivity
def on_sigint(signal, frame):
global server_enabled
server_enabled = False
#
# Main
#
server_enabled = True
signal.signal(signal.SIGINT, on_sigint)
connected_cameras = []
connected_users = []
cam_listener_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
cam_listener_sock.bind(("", 41551))
cam_listener_sock.listen(5)
cmd_listener_sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
cmd_listener_sock.bind(("", 40550))
cmd_listener_sock.listen(5)
print("[Main] : Ready")
while server_enabled or len(CameraCommander.Cameras) > 0:
if server_enabled:
conn_list, wlist, xlist = select.select([cam_listener_sock, cmd_listener_sock], [], [], 0.05)
if cam_listener_sock in conn_list:
cam_sock, cam_addr = cam_listener_sock.accept()
connected_cameras.append(CameraContext(CameraConnection(cam_sock, cam_addr)))
elif cmd_listener_sock in conn_list:
user_sock, user_addr = cmd_listener_sock.accept()
connected_users.append(UserCommand(user_sock, user_addr))
new_connected_users = []
for userCommand in connected_users:
if userCommand.sock:
new_connected_users.append(userCommand)
connected_users = new_connected_users
user_sock_list = [userCommand.sock for userCommand in connected_users]
if server_enabled:
sock_read_list, wlist, xlist = select.select(user_sock_list, [], [], 0.05)
for user_sock in sock_read_list:
for userCommand in connected_users:
if user_sock == userCommand.sock:
userCommand.execute()
new_connected_cameras = []
for context in connected_cameras:
if context.connection:
new_connected_cameras.append(context)
connected_cameras = new_connected_cameras
if not server_enabled:
for context in CameraCommander.Cameras:
if isinstance(context.state, WaitActivity):
try:
context.disconnect()
except CameraContext.TransmissionErrorException:
context.close()
cam_sock_list = [context.connection.sock for context in connected_cameras]
sock_read_list, wlist, xlist = select.select(cam_sock_list, [], [], 0.05)
for cam_sock in sock_read_list:
for context in connected_cameras:
if cam_sock == context.connection.sock:
context.handle()
for context in connected_cameras:
context.tic()
for context in connected_cameras:
if context.connection:
context.close()
for userCommand in connected_users:
if userCommand.sock:
userCommand.close()
cmd_listener_sock.shutdown(socket.SHUT_RDWR)
cmd_listener_sock.close()
cam_listener_sock.shutdown(socket.SHUT_RDWR)
cam_listener_sock.close()
print("[Main] : Bye !!")