syndicate-rs/src/main.rs

41 lines
1.1 KiB
Rust
Raw Normal View History

2018-12-09 13:28:01 +00:00
mod bag;
mod skeleton;
use std::net::{TcpListener, TcpStream};
use std::io::Result;
use preserves::value;
2018-12-09 13:28:01 +00:00
// use self::skeleton::Index;
2018-12-09 13:28:01 +00:00
mod packets {
#[derive(Debug, serde::Serialize, serde::Deserialize)]
pub struct Error(pub String);
}
fn handle_connection(mut stream: TcpStream) -> Result<()> {
println!("Got {:?}", &stream);
let codec = value::Codec::without_placeholders();
loop {
match codec.decode(&stream) {
Ok(v) => codec.encoder(&mut stream).write(&v)?,
Err(value::codec::Error::Eof) => break,
Err(value::codec::Error::Io(e)) => return Err(e),
Err(value::codec::Error::Syntax(s)) => {
let v = value::to_value(packets::Error(s.to_string())).unwrap();
codec.encoder(&mut stream).write(&v)?;
break
}
}
}
Ok(())
}
2018-12-09 13:28:01 +00:00
fn main() -> Result<()> {
// let i = Index::new();
let listener = TcpListener::bind("0.0.0.0:5889")?;
for stream in listener.incoming() {
handle_connection(stream?);
}
Ok(())
2018-12-09 13:28:01 +00:00
}