this repo has no description
1open Swim.Types 2 3external env_cast : 'a -> 'b = "%identity" 4 5let () = 6 Eio_main.run @@ fun env -> 7 let env = env_cast env in 8 Eio.Switch.run @@ fun sw -> 9 let config = 10 { 11 default_config with 12 bind_addr = "\127\000\000\001"; 13 bind_port = 7947; 14 node_name = Some "ocaml-node"; 15 protocol_interval = 1.0; 16 probe_timeout = 0.5; 17 secret_key = String.make 16 '\x00'; 18 cluster_name = ""; 19 (* Empty for memberlist compatibility - it uses Label instead *) 20 encryption_enabled = false; 21 } 22 in 23 let env_wrap = { stdenv = env; sw } in 24 match Swim.Cluster.create ~sw ~env:env_wrap ~config with 25 | Error `Invalid_key -> 26 Printf.eprintf "Error: Invalid encryption key\n"; 27 exit 1 28 | Ok cluster -> 29 Printf.printf "OCaml SWIM node started on 127.0.0.1:%d\n%!" 30 config.bind_port; 31 Swim.Cluster.start cluster; 32 33 let go_node = 34 make_node_info 35 ~id:(node_id_of_string "go-node") 36 ~addr:(`Udp (Eio.Net.Ipaddr.of_raw "\127\000\000\001", 7946)) 37 ~meta:"" 38 in 39 Printf.printf "Adding Go node to membership...\n%!"; 40 Swim.Cluster.add_member cluster go_node; 41 42 Printf.printf "Running for 30 seconds...\n%!"; 43 for i = 1 to 30 do 44 Eio.Time.sleep env#clock 1.0; 45 let stats = Swim.Cluster.stats cluster in 46 Printf.printf 47 "[%2d] alive=%d suspect=%d dead=%d sent=%d recv=%d dropped=%d\n%!" i 48 stats.nodes_alive stats.nodes_suspect stats.nodes_dead stats.msgs_sent 49 stats.msgs_received stats.msgs_dropped 50 done; 51 52 Printf.printf "Shutting down...\n%!"; 53 Swim.Cluster.shutdown cluster