Пример #1
0
 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))
Пример #2
0
 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))
Пример #3
0
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()
Пример #4
0
    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())