| module TChannelTransport(TChannelTrans(..)) where |
| import System.IO |
| import IO |
| import Thrift |
| import Control.Exception |
| data TChannelTrans = TChannelTrans (Handle) |
| |
| instance TTransport TChannelTrans where |
| tisOpen a = True |
| topen a = return a |
| tclose a = return a |
| tread a 0 = return [] |
| tread (TChannelTrans h) i = Prelude.catch |
| (do c <- hGetChar h |
| t <- tread (TChannelTrans h) (i-1) |
| return $ c:t) |
| (\e -> if isEOFError e then return [] else throwDyn (TransportExn "TChannelTransport: Could not read" TE_UNKNOWN)) |
| twrite a [] = return () |
| twrite (TChannelTrans h) (c:t) = do hPutChar h c |
| twrite (TChannelTrans h) t |
| tflush (TChannelTrans h) = hFlush h |
| |