1use std::io::prelude::*;
2use image::RgbImage;
3
4use message::*;
5
6
7pub struct Client<S: Read + Write> {
8 messenger: Messenger<S>,
9 dimensions: (u32, u32)
10}
11
12impl<S: Read + Write> Client<S> {
13 pub fn new(stream: S) -> Result<Client<S>, String> {
14 let messenger = Messenger::new(stream);
15
16 let dimensions = match messenger.recv() {
17 Ok(m) => match m {
18 Message::Dimensions(d) => d,
19 _ => return Err("Unexpected Message, expected Capabilities Message".to_string())
20 },
21 Err(e) => return Err(e)
22 };
23
24 Ok(Client {
25 messenger,
26 dimensions
27 })
28 }
29
30 pub fn dimensions(&self) -> (u32, u32) {
31 self.dimensions
32 }
33
34 pub fn send(&self, image: RgbImage) -> Result<usize, String> {
35 let image_data = image.into_raw();
36 let message = Message::RgbImage(image_data);
37 self.messenger.send(&message)
38 }
39}