CurryInfo: cpns-3.0.0 / Network.CPNS.Config

classes:

              
documentation:
------------------------------------------------------------------------------
--- Configurations of the implementation of a Curry Port Name Server (CPNS)
--- based on raw sockets. The CPNS allows the connection to port by
--- symbolic names.
---
--- If we connect to a port with symbolic name `pn`, we first connect
--- to the CPNS of the host named by `pn` to get the physical socket
--- number of this port. In order to connect to CPNS from any
--- machine in the world, the CPNS demon always listens at port `cpnsSocket`.
--- Note that this port must be identical for all machines running
--- `Network.NamedSocket` or Distributed Curry! If this port is occupied
--- by another process on a host, you cannot run CPNSD on it.
---
--- @author Michael Hanus
--- @version March 2021
------------------------------------------------------------------------------
name:
Network.CPNS.Config
operations:
addLogLn cpnsSocket cpnsTimeOut getCPNSD getLogFile getStartupLockFile
sourcecode:
module Network.CPNS.Config
  ( cpnsSocket, cpnsTimeOut
  , getCPNSD, getStartupLockFile, getLogFile, addLogLn
  )
 where

import System.Directory   ( doesFileExist, getTemporaryDirectory )
import System.FilePath    ( (</>) )

import Network.CPNS.ConfigPackage ( packageExecutable )


-- The standard port number of CPNS demon.
cpnsSocket :: Int
cpnsSocket = 8769

-- The time out before considering the server as unreachable:
cpnsTimeOut :: Int
cpnsTimeOut = 6000

--- Gets name of lock file to coordinate the startup of the CPNS demon.
getStartupLockFile :: IO String
getStartupLockFile = do
  tmp <- getTemporaryDirectory
  return $ tmp </> "Curry_CPNSD.lock"

--- Returns the executable of the CPNS demon.
--- Raises an error if the executable does not exist.
getCPNSD :: IO String
getCPNSD = do
  let cpnsbin = packageExecutable
  exbin <- doesFileExist cpnsbin
  if exbin
    then return cpnsbin
    else error "CPNS demon not found in path! Install it by: cypm install cpns"

--- Get name of CPNSD log file.
getLogFile :: IO String
getLogFile = do
  tmp <- getTemporaryDirectory
  return $ tmp </> "Curry_CPNSD.log"

--- Adds a line to the log file
addLogLn :: String -> IO ()
addLogLn s = do
  logfile <- getLogFile
  appendFile logfile (s ++ "\n")
types:

              
unsafe:
safe