pony_asio.pony

use @pony_asio_event_create[AsioEventID](owner: AsioEventNotify, fd: U32,
  flags: U32, nsec: U64, noisy: Bool)
use @pony_asio_event_destroy[None](event: AsioEventID)
use @pony_asio_event_fd[U32](event: AsioEventID)
use @pony_asio_event_get_disposable[Bool](event: AsioEventID)
use @pony_asio_event_resubscribe_read[None](event: AsioEventID)
use @pony_asio_event_resubscribe_write[None](event: AsioEventID)
use @pony_asio_event_set_readable[None](event: AsioEventID, readable: Bool)
use @pony_asio_event_set_writeable[None](event: AsioEventID, writeable: Bool)
use @pony_asio_event_setnsec[U32](event: AsioEventID, nsec: U64)
use @pony_asio_event_unsubscribe[None](event: AsioEventID)

primitive PonyAsio
  """
  Wrappers for the runtime's `pony_asio_event_*` functions. Used internally to
  subscribe socket and timer events with the ASIO backend.
  """
  fun create_event(the_actor: AsioEventNotify, fd: U32): AsioEventID =>
    @pony_asio_event_create(
      the_actor, fd, AsioEvent.read_write_oneshot(), 0, true)

  fun destroy(event: AsioEventID) =>
    @pony_asio_event_destroy(event)

  fun event_fd(event: AsioEventID): U32 =>
    @pony_asio_event_fd(event)

  fun get_disposable(event: AsioEventID): Bool =>
    @pony_asio_event_get_disposable(event)

  fun resubscribe_read(event: AsioEventID) =>
    @pony_asio_event_resubscribe_read(event)

  fun resubscribe_write(event: AsioEventID) =>
    @pony_asio_event_resubscribe_write(event)

  fun set_readable(event: AsioEventID) =>
    @pony_asio_event_set_readable(event, true)

  fun set_unreadable(event: AsioEventID) =>
    @pony_asio_event_set_readable(event, false)

  fun set_writeable(event: AsioEventID) =>
    @pony_asio_event_set_writeable(event, true)

  fun set_unwriteable(event: AsioEventID) =>
    @pony_asio_event_set_writeable(event, false)

  fun create_timer_event(the_actor: AsioEventNotify, nsec: U64): AsioEventID =>
    @pony_asio_event_create(the_actor, 0, AsioEvent.timer(), nsec, true)

  fun set_timer(event: AsioEventID, nsec: U64) =>
    @pony_asio_event_setnsec(event, nsec)

  fun unsubscribe(event: AsioEventID) =>
    @pony_asio_event_unsubscribe(event)