summaryrefslogtreecommitdiffstats
path: root/sources/thibaut/chord.ml
blob: cb3ad2a7ce21e9276dbbf4a062b4e008bf570fff (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
27
open Globals
open SlotArray


let do_peer root peer =

  let aux = function 
    | Ask p -> ask_peer peer p 
    | _ -> failwith "Big problem"
  in
    
    SlotArray.filter_peers is_active peer.slots;
    SlotArray.iter_asks aux peer.slots;
    let free_slots = SlotArray.capacity peer.slots - SlotArray.length peer.slots
      - SlotArray.asks peer.slots in
    if free_slots > 2 then 
      let (a,b) = ask_root root peer in
        if a then begin
          SlotArray.accept (Peer root) peer.slots;
          SlotArray.append_asks b peer.slots
        end
        else
          SlotArray.append_asks b peer.slots
            
let do_server root = 
  SlotArray.filter_peers is_active root.slots