Browse Source

interrupt simulation if sigterm terminal package is read

Bastien Sevajol 6 years ago
parent
commit
c1c81b7669
3 changed files with 18 additions and 1 deletions
  1. 8 0
      synergine2/core.py
  2. 5 0
      synergine2/terminals.py
  3. 5 1
      synergine2_cocos2d/layer.py

+ 8 - 0
synergine2/core.py View File

@@ -76,6 +76,10 @@ class Core(BaseObject):
76 76
                 events = []
77 77
                 packages = self.terminal_manager.receive()
78 78
                 for package in packages:
79
+                    if package.sigterm:
80
+                        self.logger.info('SIGTERM received from terminal package')
81
+                        self._continue = False
82
+
79 83
                     events.extend(self.cycle_manager.apply_actions(
80 84
                         simulation_actions=package.simulation_actions,
81 85
                         subject_actions=package.subject_actions,
@@ -102,7 +106,11 @@ class Core(BaseObject):
102 106
                 self._end_cycle()
103 107
         except KeyboardInterrupt:
104 108
             pass  # Just stop while
109
+
110
+        self.logger.info('Getting out of loop. Terminating.')
105 111
         self.terminal_manager.stop()
112
+        self.cycle_manager.stop()
113
+        self.logger.info('Terminated')
106 114
 
107 115
     def _start_cycle(self):
108 116
         time_ = time.time()

+ 5 - 0
synergine2/terminals.py View File

@@ -34,6 +34,7 @@ class TerminalPackage(BaseObject):
34 34
             simulation_actions: [tuple]=None,
35 35
             subject_actions: [tuple]=None,
36 36
             is_cycle: bool=False,
37
+            sigterm: bool=False,
37 38
             *args,
38 39
             **kwargs
39 40
     ):
@@ -44,6 +45,7 @@ class TerminalPackage(BaseObject):
44 45
         self.simulation_actions = simulation_actions or []
45 46
         self.subject_actions = subject_actions or []
46 47
         self.is_cycle = is_cycle
48
+        self.sigterm = sigterm
47 49
 
48 50
     def repr_debug(self) -> str:
49 51
         subjects = self.subjects or []
@@ -55,6 +57,7 @@ class TerminalPackage(BaseObject):
55 57
             simulation_actions=['{}: {}'.format(a.__class__.__name__, p) for a, p in self.simulation_actions],
56 58
             subject_actions=['{}: {}'.format(a.__class__.__name__, p) for a, p in self.subject_actions],
57 59
             is_cycle=self.is_cycle,
60
+            sigterm=self.sigterm,
58 61
         ))
59 62
 
60 63
 
@@ -266,6 +269,8 @@ class TerminalManager(BaseObject):
266 269
                         ))
267 270
 
268 271
                     packages.append(package)
272
+                    if package.sigterm:
273
+                        return packages
269 274
             else:
270 275
                 try:
271 276
                     while True:

+ 5 - 1
synergine2_cocos2d/layer.py View File

@@ -58,6 +58,10 @@ class SubjectLayer(cocos.layer.ScrollableLayer):
58 58
         self.subjects_index[actor.subject.id] = actor
59 59
 
60 60
 
61
+class MainScene(cocos.scene.Scene):
62
+    pass
63
+
64
+
61 65
 class LayerManager(object):
62 66
     edit_layer_class = None  # type: typing.Type['EditLayer']
63 67
 
@@ -99,7 +103,7 @@ class LayerManager(object):
99 103
             self.middleware.get_world_height(),
100 104
         )
101 105
 
102
-        self.main_scene = cocos.scene.Scene()
106
+        self.main_scene = MainScene()
103 107
         self.scrolling_manager = ScrollingManager()
104 108
 
105 109
         self.main_layer = MainLayer(