udp_socket_notify.pony

use net = ".."

trait UDPSocketNotify
  """
  Callbacks for a UDP socket. Implement this trait and pass it to `UDPSocket`
  to handle socket events.

  `on_bind_failure` has no default implementation because ignoring a bind
  failure silently is never correct.
  """
  fun ref on_bound(sock: UDPSocket ref) =>
    """
    Called when the socket is bound and ready for I/O.
    """
    None

  fun ref on_bind_failure(sock: UDPSocket ref)
    """
    Called when the socket could not bind.
    """

  fun ref on_received(sock: UDPSocket ref,
    data: Array[U8] iso,
    from: net.NetAddress val)
    : net.ReadAction
  =>
    """
    Called each time a datagram arrives.

    Return `KeepReading` to let the read loop take the next datagram, or
    `YieldReading` to stop after this one and give other actors a turn.

    The default returns `KeepReading`. Send-only sockets use this default
    and never override it. Datagrams that arrive on a socket that does not
    override this method are silently discarded.
    """
    net.KeepReading

  fun ref on_closed(sock: UDPSocket ref) =>
    """
    Called when the socket is closed.
    """
    None