summaryrefslogtreecommitdiffstats
path: root/sources/thibaut/mesh.ml
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