103 lines
2.7 KiB
Python
103 lines
2.7 KiB
Python
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 !!")
|