def main(): try: # 测试伺服机 # servo = Servo(channel=11,freq=50) # while True: # servo.rotate(0) # time.sleep(1) # servo.rotate(180) # time.sleep(1) # 测试超声波距离传感器 # dd = DistanceDetector(7,8) # while True: # time.sleep(0.2) # dis = dd.getDistance() # print(dis) #测试压力传感器 # pressureSensor = PressureSensor(SCK_channel=7, DT_channel=8) # while True: # print(pressureSensor.getData()) # time.sleep(1) #开启服务 # cameraService = CameraService() # cameraService.startService() # waterSercice = WaterDispenserService(channel=7) # waterSercice.startService() # cleanService = CleanShitService() # cleanService.startService() # 尝试使用事件驱动模型 eventManager = EventManager() feedingEventListener = FeedingEventListener() # cleanShitEventListener = CleanShitEventListener() rotateCameraEventListener = RotateCameraEventListener() eventManager.addEventListener(EVENT_FEEDING, feedingEventListener.excute) # eventManager.addEventListener(EVENT_CLEAN_SHIT, cleanShitEventListener.excute) eventManager.addEventListener(EVENT_ROTATE_CAMERA, rotateCameraEventListener.excute) eventManager.start() while True: logging.info("start") event = waitForEvent() eventManager.sendEvent(event) print(event.data.items()) except KeyboardInterrupt: pass
def handle_inputs(self) -> None: # Called for each game tick. We check our keyboard presses here. for pg_event in pygame.event.get(): # handle window manager closing our window if self.is_quit_event(pg_event): EventManager.post(QuitEvent()) # handle key down events elif pg_event.type == pygame.KEYDOWN: self.handle_keypress(pg_event.unicode, pressed=True) # elif pg_event.type == pygame.KEYUP: # self.handle_keypress(pg_event.unicode, pressed=False) elif pg_event.type == pygame.MOUSEBUTTONDOWN: self.handle_mouse_click(pressed=True) elif pg_event.type == pygame.MOUSEBUTTONUP: self.handle_mouse_click(pressed=False)
def setUp(self): self.service = DummyEventService() self.service.event_manager = EventManager() self.service.setup() super().setUp()
def run(self) -> None: EventManager.post(TickEvent()) while True: EventManager.post(TickEvent())
def setUp(self): self.manager = EventManager() super().setUp()
class TestEventManager(BaseTest): def setUp(self): self.manager = EventManager() super().setUp() def test_subscribe(self): self.assertEqual(len(self.manager.state), 0) self.manager.subscribe(ClusterCreatedEvent) assert len(self.manager.state) == 1 assert len(self.manager.items) == 1 assert len(self.manager.keys) == 1 assert len(self.manager.values) == 1 assert ClusterCreatedEvent.event_type in self.manager.state assert self.manager.state[ ClusterCreatedEvent.event_type] == ClusterCreatedEvent # Adding the same event self.manager.subscribe(ClusterCreatedEvent) assert len(self.manager.state) == 1 assert len(self.manager.items) == 1 assert len(self.manager.items) == 1 assert len(self.manager.keys) == 1 assert len(self.manager.values) == 1 # Adding new event self.manager.subscribe(ClusterUpdatedEvent) assert len(self.manager.state) == 2 assert len(self.manager.items) == 2 assert len(self.manager.items) == 2 assert len(self.manager.keys) == 2 assert len(self.manager.values) == 2 # Adding new event with same event type class DummyEvent(ClusterCreatedEvent): pass with self.assertRaises(AssertionError): self.manager.subscribe(DummyEvent) def test_knows(self): assert self.manager.knows( event_type=ClusterCreatedEvent.event_type) is False self.manager.subscribe(ClusterCreatedEvent) assert self.manager.knows( event_type=ClusterCreatedEvent.event_type) is True # Adding same event self.manager.subscribe(ClusterCreatedEvent) assert self.manager.knows( event_type=ClusterCreatedEvent.event_type) is True # New event assert self.manager.knows(ClusterUpdatedEvent) is False self.manager.subscribe(ClusterUpdatedEvent) assert self.manager.knows( event_type=ClusterCreatedEvent.event_type) is True def test_get(self): assert self.manager.get( event_type=ClusterCreatedEvent.event_type) is None self.manager.subscribe(ClusterCreatedEvent) assert self.manager.get( event_type=ClusterCreatedEvent.event_type) == ClusterCreatedEvent def test_user_write_events(self): assert self.manager.user_write_events() == [] self.manager.subscribe(ClusterCreatedEvent) assert self.manager.user_write_events() == [] self.manager.subscribe(ExperimentViewedEvent) assert self.manager.user_write_events() == [] self.manager.subscribe(ExperimentDeletedEvent) assert self.manager.user_write_events() == [] self.manager.subscribe(ExperimentCreatedEvent) assert self.manager.user_write_events() == [ ExperimentCreatedEvent.event_type ] def test_user_view_events(self): assert self.manager.user_view_events() == [] self.manager.subscribe(ClusterCreatedEvent) assert self.manager.user_view_events() == [] self.manager.subscribe(ExperimentCreatedEvent) assert self.manager.user_view_events() == [] self.manager.subscribe(ExperimentCreatedEvent) assert self.manager.user_view_events() == [] self.manager.subscribe(ExperimentDeletedEvent) assert self.manager.user_view_events() == [] self.manager.subscribe(ExperimentViewedEvent) assert self.manager.user_view_events() == [ ExperimentViewedEvent.event_type ]
from events.event_manager import EventManager default_manager = EventManager()
def __init__(self) -> None: EventManager.register(self)
def update(self, event: Event) -> None: if event.event_type == EventType.KEY_PRESS: if event.key == 'y': EventManager.post(ChangeScreenEvent('combat'))
def handle_mouse_click(self, pressed: bool) -> None: mouse_event = MouseClickEvent(position=pygame.mouse.get_pos(), pressed=pressed) EventManager.post(mouse_event)
def handle_keypress(self, key_name: str, pressed: bool) -> None: input_event = KeyPressEvent(key=key_name, pressed=pressed) EventManager.post(input_event)