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 |
580 self.run = run_with_except_hook |
580 self.run = run_with_except_hook |
581 threading.Thread.__init__ = init |
581 threading.Thread.__init__ = init |
582 |
582 |
583 |
583 |
584 installThreadExcepthook() |
584 installThreadExcepthook() |
|
585 havewamp = False |
585 |
586 |
586 if havetwisted: |
587 if havetwisted: |
587 if webport is not None: |
588 if webport is not None: |
588 try: |
589 try: |
589 import runtime.NevowServer as NS # pylint: disable=ungrouped-imports |
590 import runtime.NevowServer as NS # pylint: disable=ungrouped-imports |
590 except Exception, e: |
591 except Exception: |
591 print(_("Nevow/Athena import failed :"), e) |
592 LogMessageAndException(_("Nevow/Athena import failed :")) |
592 webport = None |
593 webport = None |
593 NS.WorkingDir = WorkingDir |
594 NS.WorkingDir = WorkingDir |
594 |
595 |
595 # Find pre-existing project WAMP config file |
596 try: |
596 _wampconf = os.path.join(WorkingDir, "wampconf.json") |
597 import runtime.WampClient as WC # pylint: disable=ungrouped-imports |
597 |
598 WC.WorkingDir = WorkingDir |
598 # If project's WAMP config file exits, override default (-c) |
599 havewamp = True |
599 if os.path.exists(_wampconf): |
600 except Exception: |
600 wampconf = _wampconf |
601 LogMessageAndException(_("WAMP import failed :")) |
601 |
|
602 if wampconf is not None: |
|
603 try: |
|
604 import runtime.WampClient as WC # pylint: disable=ungrouped-imports |
|
605 except Exception, e: |
|
606 print(_("WAMP import failed :"), e) |
|
607 wampconf = None |
|
608 |
602 |
609 # Load extensions |
603 # Load extensions |
610 for extention_file, extension_folder in extensions: |
604 for extention_file, extension_folder in extensions: |
611 sys.path.append(extension_folder) |
605 sys.path.append(extension_folder) |
612 execfile(os.path.join(extension_folder, extention_file), locals()) |
606 execfile(os.path.join(extension_folder, extention_file), locals()) |
614 if havetwisted: |
608 if havetwisted: |
615 if webport is not None: |
609 if webport is not None: |
616 try: |
610 try: |
617 website = NS.RegisterWebsite(webport) |
611 website = NS.RegisterWebsite(webport) |
618 pyruntimevars["website"] = website |
612 pyruntimevars["website"] = website |
|
613 NS.SetServer(pyroserver) |
619 statuschange.append(NS.website_statuslistener_factory(website)) |
614 statuschange.append(NS.website_statuslistener_factory(website)) |
620 except Exception: |
615 except Exception: |
621 LogMessageAndException(_("Nevow Web service failed. ")) |
616 LogMessageAndException(_("Nevow Web service failed. ")) |
622 |
617 |
623 if wampconf is not None: |
618 if havewamp: |
624 try: |
619 try: |
625 _wampconf = WC.LoadWampClientConf(wampconf) |
620 WC.SetServer(pyroserver) |
626 if _wampconf: |
621 WC.RegisterWampClient(wampconf, wampsecret) |
627 if _wampconf["url"]: # TODO : test more ? |
622 WC.RegisterWebSettings(NS) |
628 WC.RegisterWampClient(wampconf, wampsecret) |
|
629 pyruntimevars["wampsession"] = WC.GetSession |
|
630 WC.SetServer(pyroserver) |
|
631 else: |
|
632 raise Exception(_("WAMP config is incomplete.")) |
|
633 else: |
|
634 raise Exception(_("WAMP config is missing.")) |
|
635 except Exception: |
623 except Exception: |
636 LogMessageAndException(_("WAMP client startup failed. ")) |
624 LogMessageAndException(_("WAMP client startup failed. ")) |
637 |
625 |
638 pyro_thread_started = Lock() |
626 pyro_thread_started = Lock() |
639 pyro_thread_started.acquire() |
627 pyro_thread_started.acquire() |