def main():
    options = parse_args()
    dl_address = (options.dshost, options.dlport)
    print("Trying to work with:")
    print("Server console client on %s:%d." % (options.dshost, options.csport))
    print("Device Link on %s:%d." % dl_address)

    def on_start(_):
        print("Successfully connected to game server.")
        f = HeightmapCreatorFactory(clients[0], clients[1], options.dir)
        connector = reactor.listenTCP(options.port, f, interface=options.host)
        host = connector.getHost()
        print("Listening clients on %s:%d." % (host.host, host.port))

    def on_connected(client):
        clients.append(client)
        d = dl_client.on_start.addCallback(on_start)
        reactor.listenUDP(0, dl_client)
        return d

    def on_fail(err):
        print("Failed to connect to game server: %s" % err.value)
        reactor.stop()

    def on_connection_lost(err):
        print("Connection was lost.")

    dl_client = DeviceLinkClient(dl_address, timeout_value=DL_TIMEOUT)
    clients = [dl_client, ]
    p = ConsoleParser(
        (service.PilotBaseService(), service.MissionBaseService()))
    f = ConsoleClientFactory(parser=p, timeout_value=DS_CONSOLE_TIMEOUT)
    f.on_connecting.addCallbacks(on_connected, on_fail)
    f.on_connection_lost.addErrback(on_connection_lost)
    reactor.connectTCP(options.dshost, options.csport, f)
    reactor.run()
    def __init__(self):
        MultiService.__init__(self)
        self.clear_shared_storage()

        # Place to store some of server confs values --------------------------
        self.confs = {}

        # Init pilots service -------------------------------------------------
        from commander.service.pilots import PilotsService
        pilots = PilotsService()
        pilots.setServiceParent(self)

        # Init objects service ------------------------------------------------
        from commander.service.objects import ObjectsService
        objects = ObjectsService()
        objects.setServiceParent(self)

        # Init missions service with log watcher ------------------------------
        from commander.service.missions import MissionsService
        log_watcher = LogWatchingService(settings.IL2_EVENTS_LOG_PATH)
        missions = MissionsService(log_watcher)
        log_parser = EventLogParser((pilots, objects, missions, ))
        log_watcher.set_parser(log_parser)
        missions.setServiceParent(self)

        # Init console and DeviceLink parsers ---------------------------------
        console_parser = ConsoleParser((pilots, missions, ))
        device_link_parser = DeviceLinkParser()

        # Group parsers and services ------------------------------------------
        self.parsers = namedtuple('commander_parsers',
            field_names=['console', 'device_link', 'log'])(
            console_parser, device_link_parser, log_parser)
        self.services = namedtuple('commander_services',
            field_names=['pilots', 'objects', 'missions'])(
            pilots, objects, missions)
 def setUp(self):
     self.pilot_srvc = PilotService()
     self.parser = ConsoleParser(self.pilot_srvc)
     self.pilot_srvc.startService()