Packages

The Phi Programming Language

Current section

Files

Jump to
phi lib Control Distributed RPC.hm
Raw

lib/Control/Distributed/RPC.hm

-----------------------------------------------------------------------------
-- |
-- Module : Control.Distributed.RPC
-- Copyright : (c) 2020-2021 EMQ Technologies Co., Ltd.
-- License : BSD-style (see the LICENSE file)
--
-- Maintainer : Feng Lee, feng@emqx.io
-- Yang M, yangm@emqx.io
-- Stability : experimental
-- Portability : portable
--
-- The Distributed RPC module.
--
-----------------------------------------------------------------------------
module Control.Distributed.RPC
( RequestId
, call
, callTimeout
, cast
, multiCall
, multiCallTimeout
, multiCast
, receiveResponse
, receiveResponseTimeout
, sendRequest
, waitResponse
, waitResponseTimeout
) where
import Control.Distributed.Node (Node)
import Control.Monad (IO)
import Data.Maybe (Maybe)
import Data.Ref (Reference)
import Data.Timeout (Timeout)
import Data.Unit (Unit)
import Foreign (ffiIO1, ffiIO2, ffiIO3)
type RequestId = Reference
call :: forall res. Node -> IO () -> IO res
call = ffiIO2 :erpc :call
callTimeout :: forall res. Node -> IO () -> Integer -> IO res
callTimeout = ffiIO3 :erpc :call
multiCall :: forall res. [Node] -> IO () -> IO res
multiCall = ffiIO2 :erpc :multicall
multiCallTimeout :: forall res. [Node] -> IO () -> Integer -> IO res
multiCallTimeout = ffiIO3 :erpc :multicall
cast :: Node -> IO () -> IO ()
cast = ffiIO2 :erpc :cast
multiCast :: [Node] -> IO () -> IO ()
multiCast = ffiIO2 :erpc :multicast
receiveResponse :: forall res. RequestId -> IO res
receiveResponse = ffiIO1 :erpc :receive_response
receiveResponseTimeout :: forall res. RequestId -> Integer -> IO res
receiveResponseTimeout = ffiIO2 :erpc :receive_response
sendRequest :: Node -> IO () -> IO RequestId
sendRequest = ffiIO2 :erpc :send_request
foreign import waitResponse
:: forall res. RequestId -> IO (Maybe res)
foreign import waitResponseTimeout
:: forall res. RequestId -> Timeout -> IO (Maybe res)