%-*-Mode:erlang;coding:utf-8;tab-width:4;c-basic-offset:4;indent-tabs-mode:()-*- % ex: set ft=erlang fenc=utf-8 sts=4 ts=4 sw=4 et nomod: %%% %%%------------------------------------------------------------------------ %%% @doc %%% ==CPG Test Server== %%% @end %%% %%% MIT License %%% %%% Copyright (c) 2013-2017 Michael Truog %%% %%% Permission is hereby granted, free of charge, to any person obtaining a %%% copy of this software and associated documentation files (the "Software"), %%% to deal in the Software without restriction, including without limitation %%% the rights to use, copy, modify, merge, publish, distribute, sublicense, %%% and/or sell copies of the Software, and to permit persons to whom the %%% Software is furnished to do so, subject to the following conditions: %%% %%% The above copyright notice and this permission notice shall be included in %%% all copies or substantial portions of the Software. %%% %%% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR %%% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, %%% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE %%% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER %%% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING %%% FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER %%% DEALINGS IN THE SOFTWARE. %%% %%% @author Michael Truog %%% @copyright 2013-2017 Michael Truog %%% @version 1.7.1 {@date} {@time} %%%------------------------------------------------------------------------ -module(cpg_test_server). -author('mjtruog at protonmail dot com'). -behaviour(gen_server). %% external interface -export([start_link/1, put/2, get/1, pid/1]). %% gen_server callbacks -export([init/1, handle_call/3, handle_cast/2, handle_info/2, terminate/2, code_change/3]). -record(state, { value }). %%%------------------------------------------------------------------------ %%% External interface functions %%%------------------------------------------------------------------------ %%------------------------------------------------------------------------- %% @doc %% ===Start the test server with a cpg via_name().=== %% @end %%------------------------------------------------------------------------- -spec start_link(cpg:via_name()) -> {'ok', pid()} | {'error', any()}. start_link(ViaName) -> gen_server:start_link({via, cpg, ViaName}, ?MODULE, [], []). put(ViaName, Value) -> gen_server:call({via, cpg, ViaName}, {put, Value}). get(ViaName) -> gen_server:call({via, cpg, ViaName}, get). pid(ViaName) -> gen_server:call({via, cpg, ViaName}, pid). %%%------------------------------------------------------------------------ %%% Callback functions from gen_server %%%------------------------------------------------------------------------ init([]) -> {ok, #state{}}. handle_call({put, Value}, _, State) -> {reply, ok, State#state{value = Value}}; handle_call(get, _, #state{value = Value} = State) -> {reply, Value, State}; handle_call(pid, _, State) -> {reply, self(), State}; handle_call(_, _, State) -> {stop, unknown_call, error, State}. handle_cast(_, State) -> {stop, unknown_cast, State}. handle_info(_, State) -> {stop, unknown_info, State}. terminate(_, _) -> ok. code_change(_, State, _) -> {ok, State}. %%%------------------------------------------------------------------------ %%% Private functions %%%------------------------------------------------------------------------