image_stream/
client.rs

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}