equal
deleted
inserted
replaced
1 use hedgewars_engine_messages::{messages::*, parser}; |
1 use hedgewars_engine_messages::{messages::*, parser::extract_message}; |
2 use netbuf::*; |
2 use netbuf::*; |
|
3 use std::io::*; |
3 |
4 |
4 pub struct IPC { |
5 pub struct IPC { |
5 in_buffer: Buf, |
6 in_buffer: Buf, |
6 out_buffer: Buf, |
7 out_buffer: Buf, |
7 } |
8 } |
8 |
9 |
9 impl IPC { |
10 impl IPC { |
10 pub fn new() -> Self { |
11 pub fn new() -> Self { |
|
12 Self { |
|
13 in_buffer: Buf::new(), |
|
14 out_buffer: Buf::new(), |
|
15 } |
|
16 } |
11 |
17 |
|
18 pub fn send_message(&mut self, message: &EngineMessage) { |
|
19 self.out_buffer.write(&message.to_bytes()).unwrap(); |
12 } |
20 } |
13 } |
21 } |
|
22 |
|
23 impl Write for IPC { |
|
24 fn write(&mut self, buf: &[u8]) -> Result<usize> { |
|
25 self.in_buffer.write(buf) |
|
26 } |
|
27 |
|
28 fn flush(&mut self) -> Result<()> { |
|
29 self.in_buffer.flush() |
|
30 } |
|
31 } |
|
32 |
|
33 impl Read for IPC { |
|
34 fn read(&mut self, buf: &mut [u8]) -> Result<usize> { |
|
35 let result = self.out_buffer.as_ref().read(buf); |
|
36 |
|
37 if let Ok(read_bytes) = result { |
|
38 self.out_buffer.consume(read_bytes); |
|
39 } |
|
40 |
|
41 result |
|
42 } |
|
43 } |
|
44 |
|
45 impl Iterator for IPC { |
|
46 type Item = EngineMessage; |
|
47 |
|
48 fn next(&mut self) -> Option<Self::Item> { |
|
49 let (consumed, message) = extract_message(&self.in_buffer[..])?; |
|
50 |
|
51 self.in_buffer.consume(consumed); |
|
52 |
|
53 Some(message) |
|
54 } |
|
55 } |