blob: a73a3bcd286fbba7b18c87f9873f243a920d0b25 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
open Globals
(* peer is asking to p *)
let ask_peer peer p =
let pred elem = match elem with
| Peer x -> x.id = peer.id
| _ -> false
in
if SlotArray.mem pred p.slots then
AskRoot
else if not (SlotArray.full p.slots) then begin
SlotArray.add p.slots (Peer peer);
Peer p
end
else match SlotArray.random_peer p.slots with
| Peer x -> AskPeer x
| _ -> failwith "Something is very wrong.\n"
let do_peer peers peer =
let aux i slot = match slot with
| Empty -> AskRoot
| AskRoot -> ask_peer peer peers.(0)
| AskPeer p -> ask_peer peer p
| Peer p -> if p.con_state <> ON then Peer p else AskRoot
in
SlotArray.map aux peer.slots
|