use std::io::prelude::*;
use std::net::TcpStream;
use String;
use crate::Program;
pub struct CodeRequest {
pub index: u32,
pub fragment: u32,
pub filename: String,
pub workspace: String,
pub contents: String,
}
pub fn code_request(mut stream: TcpStream, program: &mut Program) {
let mut buffer = [0; 8192];
stream.read(&mut buffer).expect("Error reading stream");
let req = String::from_utf8_lossy(&buffer);
let mut req_iter = req.split("\0");
let cr = CodeRequest {
index: req_iter.next().unwrap().parse().unwrap(),
fragment: req_iter.next().unwrap().parse().unwrap(),
filename: req_iter.next().unwrap().to_string(),
workspace: req_iter.next().unwrap().to_string(),
contents: req_iter.next().unwrap().to_string(),
};
if cr.filename != program.filename {
*program = Program::new();
}
program.filename = cr.filename.to_owned();
program.workspace = cr.workspace.to_owned();
match program.cells.get(&cr.fragment) {
Some(_) => program.update_cell(&cr),
None => program.create_cell(&cr),
}
program.write_to_file(cr.fragment);
let response = program.run();
stream.write(response.as_bytes()).unwrap();
stream.flush().unwrap();
program.fmt();
}