[docs]classVirtualBus(BusABC):"""A class implementing a virtual CAN bus that listens to messages on a channel."""def__init__(self,channel:str):self.channel=channelself.queue:asyncio.Queue[Message]=asyncio.Queue()ifself.channelnotinqueues:queues[self.channel]=[self.queue]else:queues[self.channel].append(self.queue)
[docs]defsend(self,msg:Message):"""Send message to the virtual bus (self does not receive a copy)."""forqueueinqueues[self.channel]:ifqueueisself.queue:continuequeue.put_nowait(msg)
[docs]asyncdefget(self):"""Get messages from the bus."""msg=awaitself.queue.get()returnmsg