from judge.bridge.base_handler import ZlibPacketHandler


class EchoPacketHandler(ZlibPacketHandler):
    def on_connect(self):
        print("New client:", self.client_address)
        self.timeout = 5

    def on_timeout(self):
        print("Inactive client:", self.client_address)

    def on_packet(self, data):
        self.timeout = None
        print(
            "Data from %s: %r"
            % (self.client_address, data[:30] if len(data) > 30 else data)
        )
        self.send(data)

    def on_disconnect(self):
        print("Closed client:", self.client_address)


def main():
    import argparse
    from judge.bridge.server import Server

    parser = argparse.ArgumentParser()
    parser.add_argument("-l", "--host", action="append")
    parser.add_argument("-p", "--port", type=int, action="append")
    parser.add_argument("-P", "--proxy", action="append")
    args = parser.parse_args()

    class Handler(EchoPacketHandler):
        proxies = args.proxy or []

    server = Server(list(zip(args.host, args.port)), Handler)
    server.serve_forever()


if __name__ == "__main__":
    main()