erlang-0.1: src/Foreign/Erlang/OTP/GenServer.lhs
> module Foreign.Erlang.OTP.GenServer (
> -- * High-level communication.
> genCall
> , genCast
> , rpcCall
> , rpcCast
> ) where
> import Foreign.Erlang.Types (Erlang, ErlType(..))
> import Foreign.Erlang.Processes
> -- | gen_server:cast(Pid, Msg)
> genCast :: Erlang a => MBox -> Node -> Pid -> a -> IO ()
> genCast mbox node pid msg = mboxSend mbox node pid (ErlAtom "$gen_cast", msg)
> -- | gen_server:call(Pid, Msg)
> genCall :: Erlang a => MBox -> Node -> Pid -> a -> IO ErlType
> genCall mbox node pid msg = do
> ref <- mboxRef mbox
> mboxSend mbox node pid (ErlAtom "$gen_call", (mboxSelf mbox, ref), msg)
> mboxRecv' mbox ref
> -- | rpc:cast(Node, Module, Function, Arguments)
> rpcCast :: MBox -> Node -> String -> String -> [ErlType] -> IO ()
> rpcCast mbox node m f as = genCast mbox node (Right "rex") $
> (ErlAtom "cast", ErlAtom m, ErlAtom f, as, mboxSelf mbox)
> -- | rpc:call(Node, Module, Function, Arguments)
> rpcCall :: MBox -> Node -> String -> String -> [ErlType] -> IO ErlType
> rpcCall mbox node m f as = genCall mbox node (Right "rex") $
> (ErlAtom "call", ErlAtom m, ErlAtom f, as, mboxSelf mbox)