terminal-chat

Форк
0
32 строки · 914.0 Байт
1
use std::{io::{BufReader, self, BufRead, Error, ErrorKind}, self, net::TcpStream};
2

3
use crate::types::SignalHeader;
4

5
pub trait StreamReader {
6
  fn read_signal(&mut self) -> io::Result<String>;
7
}
8

9
impl StreamReader for BufReader<TcpStream> {
10
  fn read_signal(&mut self) -> io::Result<String> {
11
    let mut res_line = String::new();
12
    let mut headers_read = false;
13
    loop {
14
      let mut buf_line = String::new();
15
      match self.read_line(&mut buf_line) {
16
        Err(_) => return Err(Error::new(ErrorKind::ConnectionAborted, "boom boom")),
17
        Ok(0) => return Err(Error::new(ErrorKind::BrokenPipe, "boom boom")),
18
        Ok(m) => m,
19
      };
20
      res_line.push_str(&buf_line);
21
  
22
      if res_line.ends_with("\r\n\r\n"){
23
        if !res_line.contains(&SignalHeader::WithMessage.to_string()) || headers_read {
24
          break;
25
        }
26
        headers_read = true;
27
      }
28
    }
29
  
30
    Ok(res_line)
31
  }
32
}

Использование cookies

Мы используем файлы cookie в соответствии с Политикой конфиденциальности и Политикой использования cookies.

Нажимая кнопку «Принимаю», Вы даете АО «СберТех» согласие на обработку Ваших персональных данных в целях совершенствования нашего веб-сайта и Сервиса GitVerse, а также повышения удобства их использования.

Запретить использование cookies Вы можете самостоятельно в настройках Вашего браузера.