Skip to content

Commit 73c67c5

Browse files
authored
docs: add getting-started section
1 parent 0bd672f commit 73c67c5

File tree

1 file changed

+76
-0
lines changed

1 file changed

+76
-0
lines changed

README.md

+76
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,79 @@ In contrast to MPI, this crates allows for more flexible communication patterns
66
The underlying protocol is session based which allows nodes to join and leave at any time.
77
One node explicitly takes over the role of the session coordinator and is responsible for creating the session.
88
All other nodes must join the session as a member.
9+
10+
## Getting Started
11+
If you use Rust you can add camure as dependency using:
12+
```sh
13+
cargo add camure
14+
```
15+
If you want to use the library from languages other than Rust, please take a look at [camure-ffi](https://github.com/soehrl/camure-ffi).
16+
17+
Below are a few examples that will get you started quickly.
18+
The full documentation can be found [here](https://docs.rs/camure/).
19+
20+
### Barrier Groups
21+
#### Coordinator
22+
```rust
23+
use camure::session::Coordinator;
24+
25+
let bind_addr = "192.168.0.100:12345".parse()?;
26+
let multicast_addr = "234.0.0.0:55555".parse()?;
27+
let coordinator = Coordinator::start_session(bind_addr, multicast_addr)?;
28+
29+
let mut barrier_group_coordinator = coordinator.create_barrier_group(Some(0))?;
30+
barrier_group_coordinator.accept()?;
31+
32+
for _ in 0..1000 {
33+
barrier_group_coordinator.wait()?;
34+
}
35+
```
36+
#### Member
37+
```rust
38+
use camure::session::Member;
39+
40+
let coordinator_addr = "192.168.0.100:12345".parse()?;
41+
let member = Member::join_session(coordinator_addr)?;
42+
43+
let mut barrier_group_member = member.join_barrier_group(0)?;
44+
for _ in 0..1000 {
45+
barrier_group_member.wait()?;
46+
}
47+
```
48+
49+
### Broadcast Groups
50+
#### Coordinator
51+
```rust
52+
use camure::session::Coordinator;
53+
use std::io::Write;
54+
55+
let bind_addr = "192.168.0.100:12345".parse()?;
56+
let multicast_addr = "234.0.0.0:55555".parse()?;
57+
let coordinator = Coordinator::start_session(bind_addr, multicast_addr)?;
58+
59+
let mut sender = coordinator.create_broadcast_group(Some(0))?;
60+
sender.accept().unwrap();
61+
62+
for _ in 0..1000 {
63+
sender.write_message().write_all(b"SOME DATA")?;
64+
}
65+
sender.wait()?;
66+
```
67+
#### Member
68+
```rust
69+
use camure::session::Member;
70+
use std::io::Read;
71+
72+
let coordinator_addr = "192.168.0.100:12345".parse()?;
73+
let member = Member::join_session(coordinator_addr)?;
74+
75+
let mut receiver = member.join_broadcast_group(0).unwrap();
76+
77+
for _ in 0..1000 {
78+
let mut buf = String::new();
79+
let message = receiver.recv()?;
80+
let mut message_reader = message.read();
81+
message_reader.read_to_string(&mut buf)?;
82+
println!("{}", buf);
83+
}
84+
```

0 commit comments

Comments
 (0)