diff options
Diffstat (limited to 'app')
| -rw-r--r-- | app/Main.hs | 44 | 
1 files changed, 44 insertions, 0 deletions
diff --git a/app/Main.hs b/app/Main.hs new file mode 100644 index 0000000..e82d838 --- /dev/null +++ b/app/Main.hs @@ -0,0 +1,44 @@ +module Main (main) where + +import qualified Cache +import Control.Concurrent (forkIO) +import qualified Http +import Intro +import qualified Queue as Q +import qualified Smtp +import System.Environment (getArgs) + +data Opts = Opts {httpPort :: String, smtpPort :: String} deriving (Show) + +defaultHttpPort :: String +defaultHttpPort = "9785" + +defaultSmtpPort :: String +defaultSmtpPort = "5879" + +main :: IO () +main = do +  args <- getArgs +  case (parseArgs args) of +    Right opts -> do +      putStrLn $ "Starting HTTP server at http://localhost:" ++ opts.httpPort +      putStrLn $ "Starting SMTP server at smtp://localhost:" ++ opts.smtpPort + +      queue <- Q.newQueue +      cache <- Cache.newInMemory +      _ <- forkIO $ Cache.start queue cache +      _ <- forkIO $ Http.runServer Nothing opts.httpPort cache queue +      Smtp.runServer Nothing opts.smtpPort queue +    Left err -> putStrLn ("Error. " ++ err) + +parseArgs :: [String] -> Either String Opts +parseArgs args = parse args (Opts defaultHttpPort defaultSmtpPort) + where +  parse [] opts = Right opts +  parse (x1 : x2 : xs) opts +    | x1 == "-http-port" = parse xs (opts{httpPort = x2}) +    | x1 == "-smtp-port" = parse xs (opts{smtpPort = x2}) +  parse (x : []) _ +    | x == "-http-port" = Left "Missing HTTP port" +    | x == "-smtp-port" = Left "Missing SMTP port" +  parse (x : _) _ = Left ("Unrecognized option: " ++ x)  | 
