hosc-0.17: Haskell Open Sound Control

Safe Haskell | Safe
Language | Haskell98

Sound.OSC.Transport.FD

Contents

- Send
- Receive
- Timeout
- Wait

Description

An abstract transport layer with implementations for `UDP` and `TCP` transport.

Synopsis

- class Transport t where
  - sendPacket :: t -> Packet -> IO ()
  - recvPacket :: t -> IO Packet
  - close :: t -> IO ()
- withTransport :: Transport t => IO t -> (t -> IO a) -> IO a
- sendMessage :: Transport t => t -> Message -> IO ()
- sendBundle :: Transport t => t -> Bundle -> IO ()
- recvBundle :: Transport t => t -> IO Bundle
- recvMessage :: Transport t => t -> IO (Maybe Message)
- recvMessages :: Transport t => t -> IO [Message]
- recvPacketTimeout :: Transport t => Double -> t -> IO (Maybe Packet)
- waitUntil :: Transport t => t -> (Packet -> Bool) -> IO Packet
- waitFor :: Transport t => t -> (Packet -> Maybe a) -> IO a
- waitImmediate :: Transport t => t -> IO Packet
- waitMessage :: Transport t => t -> IO Message
- waitAddress :: Transport t => t -> Address_Pattern -> IO Packet
- waitReply :: Transport t => t -> Address_Pattern -> IO Message
- waitDatum :: Transport t => t -> Address_Pattern -> IO [Datum]

# Documentation

class Transport t where Source #

Abstract over the underlying transport protocol.

Methods

sendPacket :: t -> Packet -> IO () Source #

Encode and send an OSC packet.

recvPacket :: t -> IO Packet Source #

Receive and decode an OSC packet.

close :: t -> IO () Source #

Close an existing connection.

#### Instances

Instances details

Transport UDP Source # | `UDP` is an instance of `Transport`.
Instance details Defined in Sound.OSC.Transport.FD.UDP Methods sendPacket :: UDP -> Packet -> IO () Source # recvPacket :: UDP -> IO Packet Source # close :: UDP -> IO () Source #
Transport TCP Source # | `TCP` is an instance of `Transport`.
Instance details Defined in Sound.OSC.Transport.FD.TCP Methods sendPacket :: TCP -> Packet -> IO () Source # recvPacket :: TCP -> IO Packet Source # close :: TCP -> IO () Source #

withTransport :: Transport t => IO t -> (t -> IO a) -> IO a Source #

Bracket OSC communication.

# Send

sendMessage :: Transport t => t -> Message -> IO () Source #

`sendPacket` of `Packet_Message`.

sendBundle :: Transport t => t -> Bundle -> IO () Source #

`sendPacket` of `Packet_Bundle`.

# Receive

recvBundle :: Transport t => t -> IO Bundle Source #

Variant of `recvPacket` that runs `packet_to_bundle`.

recvMessage :: Transport t => t -> IO (Maybe Message) Source #

Variant of `recvPacket` that runs `packet_to_message`.

recvMessages :: Transport t => t -> IO [Message] Source #

Variant of `recvPacket` that runs `packetMessages`.

# Timeout

recvPacketTimeout :: Transport t => Double -> t -> IO (Maybe Packet) Source #

Variant of `recvPacket` that implements an n second `timeout`.

# Wait

waitUntil :: Transport t => t -> (Packet -> Bool) -> IO Packet Source #

Wait for a `Packet` where the supplied predicate is `True`, discarding intervening packets.

waitFor :: Transport t => t -> (Packet -> Maybe a) -> IO a Source #

Wait for a `Packet` where the supplied function does not give `Nothing`, discarding intervening packets.

waitImmediate :: Transport t => t -> IO Packet Source #

`waitUntil` `packet_is_immediate`.

waitMessage :: Transport t => t -> IO Message Source #

`waitFor` `packet_to_message`, ie. an incoming `Message` or immediate mode `Bundle` with one element.

waitAddress :: Transport t => t -> Address_Pattern -> IO Packet Source #

A `waitFor` for variant using `packet_has_address` to match on the `Address_Pattern` of incoming `Packets`.

waitReply :: Transport t => t -> Address_Pattern -> IO Message Source #

Variant on `waitAddress` that returns matching `Message`.

waitDatum :: Transport t => t -> Address_Pattern -> IO [Datum] Source #

Variant of `waitReply` that runs `messageDatum`.