summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSverker Eriksson <sverker@erlang.org>2022-05-11 12:43:26 +0200
committerGitHub <noreply@github.com>2022-05-11 12:43:26 +0200
commit1a281cc7d6c4a0297caf5768c58b4531c064ea5e (patch)
tree736f45f5446e2340de293b024194827c1cbecca0
parentddfdc0d2c69295e6ab1bf50d2c4e401d43f69688 (diff)
parent60f9500c0b483cf3ef7cb50aace04955c8c52d68 (diff)
downloaderlang-1a281cc7d6c4a0297caf5768c58b4531c064ea5e.tar.gz
Merge PR-5978 from sverker/peer-server-ref
Add type peer:server_ref()
-rw-r--r--lib/stdlib/doc/src/peer.xml8
-rw-r--r--lib/stdlib/src/peer.erl18
2 files changed, 20 insertions, 6 deletions
diff --git a/lib/stdlib/doc/src/peer.xml b/lib/stdlib/doc/src/peer.xml
index 6ac2c6b278..6356a29b32 100644
--- a/lib/stdlib/doc/src/peer.xml
+++ b/lib/stdlib/doc/src/peer.xml
@@ -247,6 +247,14 @@
<datatypes>
<datatype>
+ <name name="server_ref"/>
+ <desc>
+ <p>
+ Identifies the controlling process of a peer node.
+ </p>
+ </desc>
+ </datatype>
+ <datatype>
<name name="start_options"/>
<desc>
<p>
diff --git a/lib/stdlib/src/peer.erl b/lib/stdlib/src/peer.erl
index 6938e5051a..e3b6619f25 100644
--- a/lib/stdlib/src/peer.erl
+++ b/lib/stdlib/src/peer.erl
@@ -59,6 +59,12 @@
send/3
]).
+-export_type([server_ref/0]).
+
+-type server_ref() :: % What stop, get_state, call, cast, send accepts
+ pid().
+
+
%% Could be gen_statem too, with peer_state, but most interactions
%% are anyway available in all states.
-behaviour(gen_server).
@@ -193,23 +199,23 @@ start(Options) ->
start_it(Options, start).
%% @doc Stops controlling process, shutting down peer node synchronously
--spec stop(gen_statem:server_ref()) -> ok.
+-spec stop(Dest :: server_ref()) -> ok.
stop(Dest) ->
gen_server:stop(Dest).
%% @doc returns peer node state.
--spec get_state(Dest :: gen_statem:server_ref()) -> peer_state().
+-spec get_state(Dest :: server_ref()) -> peer_state().
get_state(Dest) ->
gen_server:call(Dest, get_state).
%% @doc Calls M:F(A) remotely, via alternative connection, with default 5 seconds timeout
--spec call(Dest :: gen_statem:server_ref(), Module :: module(), Function :: atom(),
+-spec call(Dest :: server_ref(), Module :: module(), Function :: atom(),
Args :: [term()]) -> Result :: term().
call(Dest, M, F, A) ->
call(Dest, M, F, A, ?SYNC_RPC_TIMEOUT).
%% @doc Call M:F(A) remotely, timeout is explicitly specified
--spec call(Dest :: gen_statem:server_ref(), Module :: module(), Function :: atom(),
+-spec call(Dest :: server_ref(), Module :: module(), Function :: atom(),
Args :: [term()], Timeout :: timeout()) -> Result :: term().
call(Dest, M, F, A, Timeout) ->
case gen_server:call(Dest, {call, M, F, A}, Timeout) of
@@ -222,13 +228,13 @@ call(Dest, M, F, A, Timeout) ->
end.
%% @doc Cast M:F(A) remotely, don't care about the result
--spec cast(Dest :: gen_statem:server_ref(), Module :: module(), Function :: atom(), Args :: [term()]) -> ok.
+-spec cast(Dest :: server_ref(), Module :: module(), Function :: atom(), Args :: [term()]) -> ok.
cast(Dest, M, F, A) ->
gen_server:cast(Dest, {cast, M, F, A}).
%% @doc Sends a message to pid or named process on the peer node
%% using alternative connection. No delivery guarantee.
--spec send(Dest :: gen_statem:server_ref(), To :: pid() | atom(), Message :: term()) -> ok.
+-spec send(Dest :: server_ref(), To :: pid() | atom(), Message :: term()) -> ok.
send(Dest, To, Message) ->
gen_server:cast(Dest, {send, To, Message}).