43 |
43 |
44 def usage(): |
44 def usage(): |
45 print(""" |
45 print(""" |
46 Usage of Beremiz PLC execution service :\n |
46 Usage of Beremiz PLC execution service :\n |
47 %s {[-n servicename] [-i IP] [-p port] [-x enabletaskbar] [-a autostart]|-h|--help} working_dir |
47 %s {[-n servicename] [-i IP] [-p port] [-x enabletaskbar] [-a autostart]|-h|--help} working_dir |
48 -n - zeroconf service name (default:disabled) |
48 -n zeroconf service name (default:disabled) |
49 -i - IP address of interface to bind to (default:localhost) |
49 -i IP address of interface to bind to (default:localhost) |
50 -p - port number default:3000 |
50 -p port number default:3000 |
51 -h - print this help text and quit |
51 -h print this help text and quit |
52 -a - autostart PLC (0:disable 1:enable) (default:0) |
52 -a autostart PLC (0:disable 1:enable) (default:0) |
53 -x - enable/disable wxTaskbarIcon (0:disable 1:enable) (default:1) |
53 -x enable/disable wxTaskbarIcon (0:disable 1:enable) (default:1) |
54 -t - enable/disable Twisted web interface (0:disable 1:enable) (default:1) |
54 -t enable/disable Twisted web interface (0:disable 1:enable) (default:1) |
55 -w - web server port or "off" to disable web server (default:8009) |
55 -w web server port or "off" to disable web server (default:8009) |
56 -c - WAMP client default config file (default:wampconf.json) |
56 -c WAMP client config file (can be overriden by wampconf.json in project) |
57 -s - WAMP client secret, given as a file |
57 -s WAMP client secret, given as a file (can be overriden by wamp.secret in project) |
58 -e - python extension (absolute path .py) |
58 -e python extension (absolute path .py) |
59 |
59 |
60 working_dir - directory where are stored PLC files |
60 working_dir - directory where are stored PLC files |
61 """ % sys.argv[0]) |
61 """ % sys.argv[0]) |
62 |
62 |
63 |
63 |
569 self.run = run_with_except_hook |
569 self.run = run_with_except_hook |
570 threading.Thread.__init__ = init |
570 threading.Thread.__init__ = init |
571 |
571 |
572 |
572 |
573 installThreadExcepthook() |
573 installThreadExcepthook() |
|
574 havewamp = False |
574 |
575 |
575 if havetwisted: |
576 if havetwisted: |
576 if webport is not None: |
577 if webport is not None: |
577 try: |
578 try: |
578 import runtime.NevowServer as NS # pylint: disable=ungrouped-imports |
579 import runtime.NevowServer as NS # pylint: disable=ungrouped-imports |
579 except Exception, e: |
580 except Exception: |
580 print(_("Nevow/Athena import failed :"), e) |
581 LogMessageAndException(_("Nevow/Athena import failed :")) |
581 webport = None |
582 webport = None |
582 NS.WorkingDir = WorkingDir |
583 NS.WorkingDir = WorkingDir |
583 |
584 |
584 # Find pre-existing project WAMP config file |
585 try: |
585 _wampconf = os.path.join(WorkingDir, "wampconf.json") |
586 import runtime.WampClient as WC # pylint: disable=ungrouped-imports |
586 |
587 WC.WorkingDir = WorkingDir |
587 # If project's WAMP config file exits, override default (-c) |
588 havewamp = True |
588 if os.path.exists(_wampconf): |
589 except Exception: |
589 wampconf = _wampconf |
590 LogMessageAndException(_("WAMP import failed :")) |
590 |
|
591 if wampconf is not None: |
|
592 try: |
|
593 import runtime.WampClient as WC # pylint: disable=ungrouped-imports |
|
594 except Exception, e: |
|
595 print(_("WAMP import failed :"), e) |
|
596 wampconf = None |
|
597 |
591 |
598 # Load extensions |
592 # Load extensions |
599 for extention_file, extension_folder in extensions: |
593 for extention_file, extension_folder in extensions: |
600 sys.path.append(extension_folder) |
594 sys.path.append(extension_folder) |
601 execfile(os.path.join(extension_folder, extention_file), locals()) |
595 execfile(os.path.join(extension_folder, extention_file), locals()) |
603 if havetwisted: |
597 if havetwisted: |
604 if webport is not None: |
598 if webport is not None: |
605 try: |
599 try: |
606 website = NS.RegisterWebsite(webport) |
600 website = NS.RegisterWebsite(webport) |
607 pyruntimevars["website"] = website |
601 pyruntimevars["website"] = website |
|
602 NS.SetServer(pyroserver) |
608 statuschange.append(NS.website_statuslistener_factory(website)) |
603 statuschange.append(NS.website_statuslistener_factory(website)) |
609 except Exception: |
604 except Exception: |
610 LogMessageAndException(_("Nevow Web service failed. ")) |
605 LogMessageAndException(_("Nevow Web service failed. ")) |
611 |
606 |
612 if wampconf is not None: |
607 if havewamp: |
613 try: |
608 try: |
614 _wampconf = WC.LoadWampClientConf(wampconf) |
609 WC.SetServer(pyroserver) |
615 if _wampconf: |
610 WC.RegisterWampClient(wampconf, wampsecret) |
616 if _wampconf["url"]: # TODO : test more ? |
611 WC.RegisterWebSettings(NS) |
617 WC.RegisterWampClient(wampconf, wampsecret) |
|
618 pyruntimevars["wampsession"] = WC.GetSession |
|
619 WC.SetServer(pyroserver) |
|
620 else: |
|
621 raise Exception(_("WAMP config is incomplete.")) |
|
622 else: |
|
623 raise Exception(_("WAMP config is missing.")) |
|
624 except Exception: |
612 except Exception: |
625 LogMessageAndException(_("WAMP client startup failed. ")) |
613 LogMessageAndException(_("WAMP client startup failed. ")) |
626 |
614 |
627 pyro_thread_started = Lock() |
615 pyro_thread_started = Lock() |
628 pyro_thread_started.acquire() |
616 pyro_thread_started.acquire() |