aneris.examples.lock_server.lock
From aneris Require Export lang network notation tactics.
From aneris.examples.library Require Export lib.
Definition lock_server : ground_lang.val :=
(
λ: "addr",
let: "owner" := ref NONE in
let: "socket" := NewSocket #Network.PF_INET
#Network.SOCK_DGRAM
#Network.IPPROTO_UDP in
let: "handler" := rec: "handler" "msg" "sender" :=
(if: "msg" = #"LOCK"
then match: !"owner" with
NONE => "owner" <- SOME "sender";;
SendTo "socket" #"YES" "sender"
| SOME "_" => SendTo "socket" #"NO" "sender"
end
else "owner" <- NONE;;
SendTo "socket" #"RELEASED" "sender");;
listen "socket" "handler" in
SocketBind "socket" "addr";;
listen "socket" "handler"
)%V.
From aneris.examples.library Require Export lib.
Definition lock_server : ground_lang.val :=
(
λ: "addr",
let: "owner" := ref NONE in
let: "socket" := NewSocket #Network.PF_INET
#Network.SOCK_DGRAM
#Network.IPPROTO_UDP in
let: "handler" := rec: "handler" "msg" "sender" :=
(if: "msg" = #"LOCK"
then match: !"owner" with
NONE => "owner" <- SOME "sender";;
SendTo "socket" #"YES" "sender"
| SOME "_" => SendTo "socket" #"NO" "sender"
end
else "owner" <- NONE;;
SendTo "socket" #"RELEASED" "sender");;
listen "socket" "handler" in
SocketBind "socket" "addr";;
listen "socket" "handler"
)%V.