module Sound.OpenSoundControl.Transport.File (File, open) where import Sound.OpenSoundControl.Transport (Transport(..)) import Sound.OpenSoundControl.Byte (encode_u32) import Sound.OpenSoundControl.OSC (encodeOSC, OSC(Message)) import Control.Monad (liftM) import qualified Data.ByteString.Lazy as B import System.IO (Handle, openBinaryFile, hClose, IOMode(WriteMode)) -- | The File transport handle data type. data File = File Handle deriving (Eq, Show) instance Transport File where send (File fd) msg = let b = encodeOSC msg n = fromIntegral (B.length b) in B.hPut fd (B.append (encode_u32 n) b) recv _ = return (Message "/done" []) close (File fd) = hClose fd -- | Open a command file open :: FilePath -> IO File open fileName = liftM File $ openBinaryFile fileName WriteMode