1extern crate mem_file;
2use mem_file::*;
3use std::path::PathBuf;
4
5struct SharedState {
6 num_listenners: u32,
7 message: [u8; 256],
8}
9impl MemFileCast for SharedState {}
11
12fn main() {
13
14 let mut mem_file: MemFile = match MemFile::create(PathBuf::from("test.txt"), 4096) {
16 Ok(v) => v,
17 Err(e) => {
18 println!("Error : {}", e);
19 println!("Failed to create MemFile...");
20 return;
21 }
22 };
23
24 {
26 let mut shared_state: MemFileWLock<SharedState> = match mem_file.wlock() {
27 Ok(v) => v,
28 Err(_) => panic!("Failed to acquire write lock !"),
29 };
30
31 shared_state.num_listenners = 0;
32 let src = b"Welcome, we currently have 0 listenners !\x00";
33 shared_state.message[0..src.len()].copy_from_slice(src);
34 }
35 println!("Waiting for a listenner to connect !");
36
37 loop {
39
40 let shared_state: MemFileRLock<SharedState> = match mem_file.rlock() {
42 Ok(v) => v,
43 Err(_) => panic!("Failed to acquire read lock !"),
44 };
45
46 if shared_state.num_listenners > 0 {
48 println!("We have a listenner !");
49 break;
50 }
51
52 drop(shared_state);
54 std::thread::sleep(std::time::Duration::from_millis(200));
55 }
56
57 {
59 let mut shared_state: MemFileWLock<SharedState> = match mem_file.wlock() {
60 Ok(v) => v,
61 Err(_) => panic!("Failed to acquire write lock !"),
62 };
63
64 let src = format!("Goodbye {} listenner(s) !\x00", shared_state.num_listenners);
65 shared_state.message[0..src.len()].copy_from_slice(&src.as_bytes());
66 }
67}