Source code for traits_futures.i_pingee

# (C) Copyright 2018-2023 Enthought, Inc., Austin, TX
# All rights reserved.
#
# This software is provided without warranty under the terms of the BSD
# license included in LICENSE.txt and may be redistributed only under
# the conditions described in the aforementioned license. The license
# is also available online at http://www.enthought.com/licenses/BSD.txt
#
# Thanks for using Enthought open source!

"""
Interface for the toolkit-specific pingee and pinger classes.
"""

import abc


[docs]class IPingee(abc.ABC): """ Interface for toolkit-specific pingee classes. An IPingee instance provides a toolkit-specific cross-thread pinging mechanism. The pingee is owned by the main thread, but may be shared with background threads for the sole purpose of allowing those background threads to create linked pingers. Whenever a ping is received from a linked ``IPinger`` instance, the pingee ensures that under a running event loop, the ``on_ping`` callable is eventually called. The ``on_ping`` callable will always be called on the main thread. Parameters ---------- on_ping Zero-argument callable that's called on the main thread every time a ping is received. """
[docs] @abc.abstractmethod def connect(self): """ Prepare pingee to receive pings. Not thread-safe. This method should only be called in the main thread. """
[docs] @abc.abstractmethod def disconnect(self): """ Disconnect from the on_ping callable. Pings that are received after this method is called will be ignored. Not thread-safe. This method should only be called in the main thread. """
[docs] @abc.abstractmethod def pinger(self): """ Create and return a new pinger linked to this pingee. This method is thread-safe. Typically the pingee will be passed to a background thread, and this method used within that background thread to create a pinger. This method should only be called after the 'connect' method has been called. Returns ------- pinger : IPinger New pinger, linked to this pingee. """
[docs]class IPinger(abc.ABC): """ Interface for toolkit-specific pinger classes. An IPinger instance emits pings targeting a particular IPingee instance. Parameters ---------- pingee : IPingee The target receiver for the pings. The receiver should already be connected. """
[docs] @abc.abstractmethod def connect(self): """ Connect to the ping receiver. No pings should be sent before this method is called. """
[docs] @abc.abstractmethod def disconnect(self): """ Disconnect from the ping receiver. No pings should be sent after calling this method. """
[docs] @abc.abstractmethod def ping(self): """ Send a ping to the receiver. """