from mlagents_envs.side_channel import SideChannel, IncomingMessage, OutgoingMessage from typing import List import uuid class RawBytesChannel(SideChannel): """ This is an example of what the SideChannel for raw bytes exchange would look like. Is meant to be used for general research purpose. """ def __init__(self, channel_id: uuid.UUID): self._received_messages: List[bytes] = [] super().__init__(channel_id) def on_message_received(self, msg: IncomingMessage) -> None: """ Is called by the environment to the side channel. Can be called multiple times per step if multiple messages are meant for that SideChannel. """ self._received_messages.append(msg.get_raw_bytes()) def get_and_clear_received_messages(self) -> List[bytes]: """ returns a list of bytearray received from the environment. """ result = list(self._received_messages) self._received_messages = [] return result def send_raw_data(self, data: bytearray) -> None: """ Queues a message to be sent by the environment at the next call to step. """ msg = OutgoingMessage() msg.set_raw_bytes(data) super().queue_message_to_send(msg)