From 8db3ac2b822617e4f649a38fa256c392847addef Mon Sep 17 00:00:00 2001 From: Augusto Monteiro Date: Fri, 27 Jan 2017 22:20:10 -0300 Subject: [PATCH] #479 - Refactoring SkillContainer - Shuting down skill on stop process --- mycroft/skills/container.py | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/mycroft/skills/container.py b/mycroft/skills/container.py index 54b8a10fa0..34508c6cd4 100644 --- a/mycroft/skills/container.py +++ b/mycroft/skills/container.py @@ -28,7 +28,7 @@ from mycroft.util.log import getLogger __author__ = 'seanfitz' -logger = getLogger("SkillContainer") +LOG = getLogger("SkillContainer") class SkillContainer(object): @@ -73,23 +73,37 @@ class SkillContainer(object): port=params.port, ssl=params.use_ssl) - def try_load_skill(self): + def load_skill(self): if self.enable_intent_skill: intent_skill = create_intent_skill() intent_skill.bind(self.ws) intent_skill.initialize() skill_descriptor = create_skill_descriptor(self.dir) - load_skill(skill_descriptor, self.ws) + self.skill = load_skill(skill_descriptor, self.ws) def run(self): - self.ws.on('message', logger.debug) - self.ws.on('open', self.try_load_skill) - self.ws.on('error', logger.error) - self.ws.run_forever() + try: + self.ws.on('message', LOG.debug) + self.ws.on('open', self.load_skill) + self.ws.on('error', LOG.error) + self.ws.run_forever() + except Exception as e: + LOG.error("Error: {0}".format(e)) + self.stop() + + def stop(self): + if self.skill: + self.skill.shutdown() def main(): - SkillContainer(sys.argv[1:]).run() + container = SkillContainer(sys.argv[1:]) + try: + container.run() + except KeyboardInterrupt: + container.stop() + finally: + sys.exit() if __name__ == "__main__":