Fix up documentation even more
This commit is contained in:
		
							parent
							
								
									661964277f
								
							
						
					
					
						commit
						118acf77b8
					
				| @ -134,8 +134,9 @@ class MessageBase(abc.ABC): | |||||||
|     MSGTYPE = None |     MSGTYPE = None | ||||||
|     """ |     """ | ||||||
|     Defines a unique identifier for a message class. |     Defines a unique identifier for a message class. | ||||||
|     ``MSGTYPE`` must be unique within all classes sent over a channel.  |      | ||||||
|     ``MSGTYPE`` must be < ``0xf000``. Values >= ``0xf000`` are reserved. |     * Must be unique within all classes registered with a ``Channel`` | ||||||
|  |     * Must be less than ``0xf000``. Values greater than or equal to ``0xf000`` are reserved. | ||||||
|     """ |     """ | ||||||
| 
 | 
 | ||||||
|     @abstractmethod |     @abstractmethod | ||||||
| @ -148,7 +149,7 @@ class MessageBase(abc.ABC): | |||||||
|         raise NotImplemented() |         raise NotImplemented() | ||||||
| 
 | 
 | ||||||
|     @abstractmethod |     @abstractmethod | ||||||
|     def unpack(self, raw): |     def unpack(self, raw: bytes): | ||||||
|         """ |         """ | ||||||
|         Populate message from binary representation |         Populate message from binary representation | ||||||
| 
 | 
 | ||||||
| @ -196,14 +197,29 @@ class Envelope: | |||||||
| 
 | 
 | ||||||
| class Channel(contextlib.AbstractContextManager): | class Channel(contextlib.AbstractContextManager): | ||||||
|     """ |     """ | ||||||
|     Channel provides reliable delivery of messages over |     Provides reliable delivery of messages over | ||||||
|     a link. |     a link. | ||||||
| 
 | 
 | ||||||
|     Channel is not meant to be instantiated |     ``Channel`` differs from ``Request`` and | ||||||
|     directly, but rather obtained from a Link using the |     ``Resource`` in some important ways: | ||||||
|     get_channel() function. |  | ||||||
| 
 | 
 | ||||||
|     :param outlet: Outlet object to use for transport |      **Continuous** | ||||||
|  |         Messages can be sent or received as long as | ||||||
|  |         the ``Link`` is open. | ||||||
|  |      **Bi-directional** | ||||||
|  |         Messages can be sent in either direction on | ||||||
|  |         the ``Link``; neither end is the client or | ||||||
|  |         server. | ||||||
|  |      **Size-constrained** | ||||||
|  |         Messages must be encoded into a single packet. | ||||||
|  | 
 | ||||||
|  |     ``Channel`` is similar to ``Packet``, except that it | ||||||
|  |     provides reliable delivery (automatic retries) as well | ||||||
|  |     as a structure for exchanging several types of | ||||||
|  |     messages over the ``Link``. | ||||||
|  | 
 | ||||||
|  |     ``Channel`` is not instantiated directly, but rather | ||||||
|  |     obtained from a ``Link`` with ``get_channel()``. | ||||||
|     """ |     """ | ||||||
|     def __init__(self, outlet: ChannelOutletBase): |     def __init__(self, outlet: ChannelOutletBase): | ||||||
|         """ |         """ | ||||||
| @ -227,12 +243,17 @@ class Channel(contextlib.AbstractContextManager): | |||||||
|         self._shutdown() |         self._shutdown() | ||||||
|         return False |         return False | ||||||
| 
 | 
 | ||||||
|     def register_message_type(self, message_class: Type[MessageBase], *, is_system_type: bool = False): |     def register_message_type(self, message_class: Type[MessageBase]): | ||||||
|         """ |         """ | ||||||
|         Register a message class for reception over a channel. |         Register a message class for reception over a ``Channel``. | ||||||
| 
 | 
 | ||||||
|         :param message_class: Class to register. Must extend MessageBase. |         Message classes must extend ``MessageBase``. | ||||||
|  | 
 | ||||||
|  |         :param message_class: Class to register | ||||||
|         """ |         """ | ||||||
|  |         self._register_message_type(message_class, is_system_type=False) | ||||||
|  | 
 | ||||||
|  |     def _register_message_type(self, message_class: Type[MessageBase], *, is_system_type: bool = False): | ||||||
|         with self._lock: |         with self._lock: | ||||||
|             if not issubclass(message_class, MessageBase): |             if not issubclass(message_class, MessageBase): | ||||||
|                 raise ChannelException(CEType.ME_INVALID_MSG_TYPE, |                 raise ChannelException(CEType.ME_INVALID_MSG_TYPE, | ||||||
| @ -254,7 +275,10 @@ class Channel(contextlib.AbstractContextManager): | |||||||
|     def add_message_handler(self, callback: MessageCallbackType): |     def add_message_handler(self, callback: MessageCallbackType): | ||||||
|         """ |         """ | ||||||
|         Add a handler for incoming messages. A handler |         Add a handler for incoming messages. A handler | ||||||
|         has the signature ``(message: MessageBase) -> bool``. |         has the following signature: | ||||||
|  | 
 | ||||||
|  |         ``(message: MessageBase) -> bool`` | ||||||
|  | 
 | ||||||
|         Handlers are processed in the order they are |         Handlers are processed in the order they are | ||||||
|         added. If any handler returns True, processing |         added. If any handler returns True, processing | ||||||
|         of the message stops; handlers after the |         of the message stops; handlers after the | ||||||
| @ -268,7 +292,7 @@ class Channel(contextlib.AbstractContextManager): | |||||||
| 
 | 
 | ||||||
|     def remove_message_handler(self, callback: MessageCallbackType): |     def remove_message_handler(self, callback: MessageCallbackType): | ||||||
|         """ |         """ | ||||||
|         Remove a handler |         Remove a handler added with ``add_message_handler``. | ||||||
| 
 | 
 | ||||||
|         :param callback: handler to remove |         :param callback: handler to remove | ||||||
|         """ |         """ | ||||||
| @ -341,7 +365,7 @@ class Channel(contextlib.AbstractContextManager): | |||||||
| 
 | 
 | ||||||
|     def is_ready_to_send(self) -> bool: |     def is_ready_to_send(self) -> bool: | ||||||
|         """ |         """ | ||||||
|         Check if Channel is ready to send. |         Check if ``Channel`` is ready to send. | ||||||
| 
 | 
 | ||||||
|         :return: True if ready |         :return: True if ready | ||||||
|         """ |         """ | ||||||
| @ -389,9 +413,9 @@ class Channel(contextlib.AbstractContextManager): | |||||||
|     def send(self, message: MessageBase) -> Envelope: |     def send(self, message: MessageBase) -> Envelope: | ||||||
|         """ |         """ | ||||||
|         Send a message. If a message send is attempted and |         Send a message. If a message send is attempted and | ||||||
|         Channel is not ready, an exception is thrown. |         ``Channel`` is not ready, an exception is thrown. | ||||||
| 
 | 
 | ||||||
|         :param message: an instance of a MessageBase subclass to send on the Channel |         :param message: an instance of a ``MessageBase`` subclass | ||||||
|         """ |         """ | ||||||
|         envelope: Envelope | None = None |         envelope: Envelope | None = None | ||||||
|         with self._lock: |         with self._lock: | ||||||
| @ -416,7 +440,9 @@ class Channel(contextlib.AbstractContextManager): | |||||||
|     def MDU(self): |     def MDU(self): | ||||||
|         """ |         """ | ||||||
|         Maximum Data Unit: the number of bytes available |         Maximum Data Unit: the number of bytes available | ||||||
|         for a message to consume in a single send. |         for a message to consume in a single send. This | ||||||
|  |         value is adjusted from the ``Link`` MDU to accommodate | ||||||
|  |         message header information. | ||||||
| 
 | 
 | ||||||
|         :return: number of bytes available |         :return: number of bytes available | ||||||
|         """ |         """ | ||||||
|  | |||||||
| @ -92,6 +92,18 @@ The *Request* example explores sendig requests and receiving responses. | |||||||
| 
 | 
 | ||||||
| This example can also be found at `<https://github.com/markqvist/Reticulum/blob/master/Examples/Request.py>`_. | This example can also be found at `<https://github.com/markqvist/Reticulum/blob/master/Examples/Request.py>`_. | ||||||
| 
 | 
 | ||||||
|  | .. _example-channel: | ||||||
|  | 
 | ||||||
|  | Channel | ||||||
|  | ==== | ||||||
|  | 
 | ||||||
|  | The *Channel* example explores using a ``Channel`` to send structured | ||||||
|  | data between peers of a ``Link``. | ||||||
|  | 
 | ||||||
|  | .. literalinclude:: ../../Examples/Channel.py | ||||||
|  | 
 | ||||||
|  | This example can also be found at `<https://github.com/markqvist/Reticulum/blob/master/Examples/Channel.py>`_. | ||||||
|  | 
 | ||||||
| .. _example-filetransfer: | .. _example-filetransfer: | ||||||
| 
 | 
 | ||||||
| Filetransfer | Filetransfer | ||||||
|  | |||||||
| @ -132,7 +132,7 @@ This chapter lists and explains all classes exposed by the Reticulum Network Sta | |||||||
|    Channel |    Channel | ||||||
|    ------ |    ------ | ||||||
| 
 | 
 | ||||||
| .. autoclass:: RNS.Channel.Channel(outlet) | .. autoclass:: RNS.Channel.Channel() | ||||||
|    :members: |    :members: | ||||||
| 
 | 
 | ||||||
| .. _api-messsagebase: | .. _api-messsagebase: | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user