this repo has no description
2
fork

Configure Feed

Select the types of activity you want to include in your feed.

Add send_request/receive_response

garrison 57f04b27 3a1f4fdc

+34 -8
+34 -8
lib/trinity/sim_server.ex
··· 3 3 4 4 import Trinity.Scheduler, only: [simulation_key: 0, receive_yield: 1] 5 5 6 + @type request_id :: reference 7 + 6 8 defp get_sim, do: Process.get(simulation_key()) 7 9 8 10 def start_link(module, arg, options \\ []) do ··· 17 19 end 18 20 end 19 21 20 - @dialyzer {:no_improper_lists, sim_call: 3} 22 + @spec send_request(GenServer.server, term) :: request_id 23 + def send_request(server, request) do 24 + case get_sim() do 25 + nil -> :gen_server.send_request(server, request) 26 + _sim -> sim_send_request(server, request) 27 + end 28 + end 29 + 30 + def receive_response(request_id, timeout) do 31 + case get_sim() do 32 + nil -> :gen_server.receive_response(request_id, timeout) 33 + _sim -> sim_receive_response(request_id, timeout) 34 + end 35 + end 36 + 21 37 defp sim_call(server, request, timeout) do 22 - # TODO: real alias 38 + req_id = send_request(server, request) 39 + case receive_response(req_id, timeout) do 40 + {:reply, reply} -> reply 41 + :timeout -> exit({:timeout, {__MODULE__, :call, [server, request, timeout]}}) 42 + end 43 + end 44 + 45 + @dialyzer {:no_improper_lists, sim_send_request: 2} 46 + defp sim_send_request(server, request) do 23 47 alias = SimProcess.alias() 24 - tag = [:alias | alias] 48 + SimProcess.send server, {:"$sim_call", {self(), [:alias | alias]}, request} 25 49 26 - SimProcess.send server, {:"$sim_call", {self(), tag}, request} 50 + alias 51 + end 27 52 53 + defp sim_receive_response(request_id, timeout) do 28 54 result = receive_yield do 29 - {^tag, response} -> response 55 + {[:alias | ^request_id], reply} -> {:reply, reply} 56 + # TODO: :DOWN -> {:error, {reason, object}} 30 57 after 31 - # TODO 32 - timeout -> raise "timeout" 58 + timeout -> :timeout 33 59 end 60 + SimProcess.unalias(request_id) 34 61 35 - SimProcess.unalias(alias) 36 62 result 37 63 end 38 64