-- example code 3 for socketserver import MissingH.Network.SocketServer import MissingH.IO import MissingH.Logging.Logger import Data.Char import System.IO import MissingH.Str import System.Time realhandler h = let loop = do e <- hIsEOF h if e then return () else do c <- hGetLine h case (rstrip c) of "QUIT" -> hPutStr h "Goodbye!\n" "COMMANDS" -> do hPutStrLn h "You can type TIME for the current time" loop "TIME" -> do ct <- getClockTime calt <- toCalendarTime ct hPutStrLn h $ calendarTimeToString calt loop x -> do hPutStrLn h (map toUpper x) loop in do hPutStrLn h "Welcome to the uppercase server. I'll echo" hPutStrLn h "everything back to you in uppercase. When done," hPutStrLn h "just type \"QUIT\" to exit." hPutStrLn h "You can also type \"COMMANDS\" for some fun stuff." hPutStrLn h "" loop hClose h handler = threadedHandler $ loggingHandler "main" INFO $ handleHandler $ realhandler main = do updateGlobalLogger "main" (setLevel DEBUG) serveTCPforever ((simpleInetOptions 12345) {reuse = True}) handler