def test_client_disconnection(self): """ Tests if client gets disconnected after TIMEOUT. """ timer = FakeTimer(TIMEOUT + 1) manager = ClientManager(timer) client_id = manager.register("rosetta")[1] self.assertIsNone(manager.get_client(client_id))
def test_empty_manager(self): """ Tests if ClientManager does not return trash clients for random client id. """ manager = ClientManager() for client_id in range(1, 10): self.assertIsNone(manager.get_client(client_id))
def main(): # Parse the input aruments ap = argparse.ArgumentParser() ap.add_argument("--address", "-a", required=False, default="0.0.0.0", help="listening IP address, default=\"0.0.0.0\"") ap.add_argument("--port", "-p", required=False, default=9910, help="listening UDP Port, default=9910") ap.add_argument("--config", required=False, default="default_config.xml", help="config XML file from ATEM software (default=default_config.xml)") ap.add_argument("--debug", "-d", required=False, default="INFO", help="debug level (in quotes): NONE, INFO (default), WARNING, DEBUG") args = ap.parse_args() host = args.address port = args.port config_file = args.config print("ATEM Server Starting...") s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.bind((host, port)) client_mgr = ClientManager() atem_config.config_init(config_file) print("ATEM Server Running...Hit ctrl-c to exit") while True: try: # Process incoming packets but timeout after a while so the clients # can perform cleanup and resend unresponded packets. readers, writers, errors = select.select([s], [], [], 0.050) if len(readers) > 0: try: bytes, addr = s.recvfrom(2048) packet = Packet(addr, bytes) packet.parse_packet() client = client_mgr.get_client(packet.ip_and_port, packet.session_id) client.process_inbound_packet(packet) except ConnectionResetError: print("connection reset!") s.close() s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) s.bind((host, port)) continue except KeyboardInterrupt: raise # Perform regularly regardless of incoming packets client_mgr.run_clients(s) except KeyboardInterrupt: # quit sys.exit()
def test_add_clients_and_get_them(self): """ Tests if registered client's can be found in manager. """ sample_clients = ["curiosity", "venera", "spirit"] manager = ClientManager() client_with_id = [] for name in sample_clients: state = manager.register(name) self.assertTrue(state[0]) client_with_id.append((name, state[1])) for (name, client_id) in client_with_id: self.assertEqual(name, manager.get_client(client_id).get_name())