module Database.Memcached.Server ( runServer, ServerSettings, serverSettings, ) where import Blaze.ByteString.Builder import Control.Monad.Trans import Data.Conduit import Data.Conduit.Attoparsec import Data.Conduit.Network import Network (withSocketsDo) import Database.Curry import Database.Memcached.Commands runServer :: ServerSettings (MemcachedT IO) -> IO () runServer ss = withSocketsDo $ runDBMT def $ runTCPServer ss server server :: Application (MemcachedT IO) server ss = appSource ss $$ conduitParser parseCommand =$ awaitForever p =$ appSink ss where p (_range, req) = do liftIO $ putStrLn $ "server: " ++ show req resp <- lift $ execCommand req yield . toByteString . fromResponse $ resp