blob: 4676fc1a49cdac526d9979acaf9f3d9116a256e2 [file] [log] [blame]
module TServer(run_basic_server,run_threaded_server) where
import Network
import Thrift
import Control.Exception
import TBinaryProtocol
import TChannelTransport
import Control.Concurrent
proc_loop hand proc ps = do v <-proc hand ps
if v then proc_loop hand proc ps
else return ()
accept_loop accepter hand sock proc transgen iprotgen oprotgen =
do (h,hn,_) <- accepter sock
let t = transgen h
let ip = iprotgen t
let op = oprotgen t
forkIO (handle (\e -> return ()) (proc_loop hand proc (ip,op)))
accept_loop accepter hand sock proc transgen iprotgen oprotgen
run_threaded_server accepter listener hand proc port transgen iprotgen oprotgen =
do sock <- listener
accept_loop accepter hand sock proc transgen iprotgen oprotgen
return ()
-- A basic threaded binary protocol socket server.
run_basic_server hand proc port = run_threaded_server accept (listenOn (PortNumber port)) hand proc port TChannelTrans TBinaryProtocol TBinaryProtocol