aneris.examples.ping_pong_done.code
From aneris Require Export lang network notation tactics.
From aneris.examples.library Require Export lib.
Definition pong : ground_lang.val :=
λ: "addr",
let: "socket" := NewSocket #Network.PF_INET
#Network.SOCK_DGRAM
#Network.IPPROTO_UDP in
SocketBind "socket" "addr";;
let: "msg" := listen_wait "socket" in
let: "sender" := Snd "msg" in
(if: Fst "msg" = #"PING" then SendTo "socket" #"PONG" "sender" else assert #false);;
let: "ack" := listen_wait "socket" in
(if: Fst "ack" = #"DONE" then #() else assert #false).
Definition ping : ground_lang.val :=
λ: "addr" "server",
let: "socket" := NewSocket #Network.PF_INET
#Network.SOCK_DGRAM
#Network.IPPROTO_UDP in
SocketBind "socket" "addr";;
SendTo "socket" #"PING" "server";;
let: "msg" := listen_wait "socket" in
if: Fst "msg" = #"PONG"
then SendTo "socket" #"DONE" "server"
else assert #false.
Definition ping_pong_runner :=
⟨"system";
let: "pongaddr" := MakeAddress #"0.0.0.0" #80 in
let: "pingaddr" := MakeAddress #"0.0.0.1" #80 in
Start "pong" "0.0.0.0" (pong "pongaddr") ;;
Start "ping" "0.0.0.1" (ping "pingaddr" "pongaddr")
⟩.
From aneris.examples.library Require Export lib.
Definition pong : ground_lang.val :=
λ: "addr",
let: "socket" := NewSocket #Network.PF_INET
#Network.SOCK_DGRAM
#Network.IPPROTO_UDP in
SocketBind "socket" "addr";;
let: "msg" := listen_wait "socket" in
let: "sender" := Snd "msg" in
(if: Fst "msg" = #"PING" then SendTo "socket" #"PONG" "sender" else assert #false);;
let: "ack" := listen_wait "socket" in
(if: Fst "ack" = #"DONE" then #() else assert #false).
Definition ping : ground_lang.val :=
λ: "addr" "server",
let: "socket" := NewSocket #Network.PF_INET
#Network.SOCK_DGRAM
#Network.IPPROTO_UDP in
SocketBind "socket" "addr";;
SendTo "socket" #"PING" "server";;
let: "msg" := listen_wait "socket" in
if: Fst "msg" = #"PONG"
then SendTo "socket" #"DONE" "server"
else assert #false.
Definition ping_pong_runner :=
⟨"system";
let: "pongaddr" := MakeAddress #"0.0.0.0" #80 in
let: "pingaddr" := MakeAddress #"0.0.0.1" #80 in
Start "pong" "0.0.0.0" (pong "pongaddr") ;;
Start "ping" "0.0.0.1" (ping "pingaddr" "pongaddr")
⟩.