From e084d260ff0439f04ab62eba7229309d79ed55c4 Mon Sep 17 00:00:00 2001 From: Julien Dessaux Date: Sun, 16 Jul 2023 23:31:00 +0200 Subject: [haskell] Add a SpaceTradersT and handle server reset api message --- haskell/src/SpaceTraders/Automation/Init.hs | 58 +++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 haskell/src/SpaceTraders/Automation/Init.hs (limited to 'haskell/src/SpaceTraders/Automation') diff --git a/haskell/src/SpaceTraders/Automation/Init.hs b/haskell/src/SpaceTraders/Automation/Init.hs new file mode 100644 index 0000000..8e90fca --- /dev/null +++ b/haskell/src/SpaceTraders/Automation/Init.hs @@ -0,0 +1,58 @@ +{-# LANGUAGE OverloadedStrings #-} + +module SpaceTraders.Automation.Init + ( deinitST + , initST + ) where + +import Control.Exception +import qualified Database.SQLite.Simple as S +import qualified Data.Text as T +import System.Directory + +import SpaceTraders +import qualified SpaceTraders.APIClient.Agent as STAA +import SpaceTraders.APIClient.Errors +import SpaceTraders.Database +import SpaceTraders.Database.Agents +import SpaceTraders.Database.Contracts +import SpaceTraders.Database.Ships +import SpaceTraders.Database.Tokens + +deinitST :: Config -> IO () +deinitST config = do + close $ conn config + +initST :: IO Config +initST = do + c <- open + t <- getToken c `catch` handleNoToken c + ma <- runSpaceTradersT STAA.myAgent (Config c t) + case ma of + Left (APIResetHappened _) -> wipe c + Left e -> throwIO e + _ -> return $ Config c t + where + handleNoToken :: S.Connection -> SomeException -> IO T.Text + handleNoToken c _ = register c + +register :: S.Connection -> IO (T.Text) +register c = do + r <- STAA.register "ADYXAX" "COSMIC" + case r of + Right r' -> do + setAgent c $ STAA.agent r' + addContract c $ STAA.contract r' + addShip c $ STAA.ship r' + let t = STAA.token r' + setToken c $ t + return t + Left e' -> throwIO e' + +wipe :: S.Connection -> IO Config +wipe c = do + close c + removeFile "spacetraders.db" + conn' <- open + t <- register conn' + return $ Config conn' t -- cgit v1.2.3