fixed bugs in parsing inputs and responding to them
This commit is contained in:
parent
e911ee72d4
commit
b7728d43c5
69
src/lib.rs
69
src/lib.rs
|
@ -43,6 +43,7 @@ impl MalestormIo {
|
||||||
fn write(&self, buf: &[u8]) -> Result<(), IoError> {
|
fn write(&self, buf: &[u8]) -> Result<(), IoError> {
|
||||||
let mut writer = self.stdout.lock();
|
let mut writer = self.stdout.lock();
|
||||||
writer.write_all(buf)?;
|
writer.write_all(buf)?;
|
||||||
|
writer.write_all(&[b'\n'])?;
|
||||||
writer.flush()
|
writer.flush()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -59,40 +60,44 @@ impl<'a> Malestorm<'a> {
|
||||||
|
|
||||||
let mut buf = Vec::new();
|
let mut buf = Vec::new();
|
||||||
|
|
||||||
let read = match program.io.read_line(&mut buf) {
|
loop {
|
||||||
Ok(v) => v,
|
let read = match program.io.read_line(&mut buf) {
|
||||||
Err(e) => panic!("{:?}", e),
|
Ok(v) => v,
|
||||||
};
|
Err(e) => panic!("{:?}", e),
|
||||||
|
};
|
||||||
|
|
||||||
if read == 0 {
|
if read == 0 {
|
||||||
return;
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
let message: Message = match serde_json::from_slice(&buf) {
|
||||||
|
Ok(v) => v,
|
||||||
|
Err(e) => {
|
||||||
|
eprintln!(
|
||||||
|
"error in parsing input: {:?} msg = {:?}",
|
||||||
|
e,
|
||||||
|
String::from_utf8_lossy(&buf)
|
||||||
|
);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
buf.clear();
|
||||||
|
|
||||||
|
let mtype = message.body.message_type.clone();
|
||||||
|
|
||||||
|
let pc = program.clone();
|
||||||
|
|
||||||
|
let handler = match program.handlers.get(&mtype.as_str()) {
|
||||||
|
Some(v) => v,
|
||||||
|
None => {
|
||||||
|
eprintln!("no handler found for {}", message.body.message_type);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
handler(message, pc);
|
||||||
}
|
}
|
||||||
|
|
||||||
let message: Message = match serde_json::from_slice(&buf) {
|
|
||||||
Ok(v) => v,
|
|
||||||
Err(e) => {
|
|
||||||
eprintln!(
|
|
||||||
"error in parsing input: {:?} msg = {}",
|
|
||||||
e,
|
|
||||||
String::from_utf8_lossy(&buf)
|
|
||||||
);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
let mtype = message.body.message_type.clone();
|
|
||||||
|
|
||||||
let pc = program.clone();
|
|
||||||
|
|
||||||
let handler = match program.handlers.get(&mtype.as_str()) {
|
|
||||||
Some(v) => v,
|
|
||||||
None => {
|
|
||||||
eprintln!("no handler found for {}", message.body.message_type);
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
};
|
|
||||||
|
|
||||||
handler(message, pc);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
pub fn set_node_id(&self, node_id: String) {
|
pub fn set_node_id(&self, node_id: String) {
|
||||||
|
|
Loading…
Reference in New Issue
Block a user