{-# LANGUAGE DuplicateRecordFields #-} {-# LANGUAGE NamedFieldPuns #-} {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE TypeApplications #-} module Main where import Control.Logger.Simple import Data.ByteArray (ScrubbedBytes) import qualified Data.List.NonEmpty as L import qualified Data.Map.Strict as M import Simplex.Messaging.Agent.Env.SQLite import Simplex.Messaging.Agent.Server (runSMPAgent) import Simplex.Messaging.Agent.Store.SQLite (MigrationConfirmation (..)) import Simplex.Messaging.Client (defaultNetworkConfig) import Simplex.Messaging.Transport (TLS, Transport (..)) cfg :: AgentConfig cfg = defaultAgentConfig agentDbFile :: String agentDbFile = "smp-agent.db" agentDbKey :: ScrubbedBytes agentDbKey = "" servers :: InitialAgentServers servers = InitialAgentServers { smp = M.fromList [(1, L.fromList ["smp://bU0K-bRg24xWW__lS0umO1Zdw_SXqpJNtm1_RrPLViE=@localhost:5223"])], ntf = [], xftp = M.empty, netCfg = defaultNetworkConfig } logCfg :: LogConfig logCfg = LogConfig {lc_file = Nothing, lc_stderr = True} -- Warning: this SMP agent server is experimental - it does not work correctly with multiple connected TCP clients in some cases. main :: IO () main = do let AgentConfig {tcpPort} = cfg putStrLn $ maybe (error "no agent port") (\port -> "SMP agent listening on port " ++ port) tcpPort setLogLevel LogInfo -- LogError Right st <- createAgentStore agentDbFile agentDbKey False MCConsole withGlobalLogging logCfg $ runSMPAgent (transport @TLS) cfg servers st