main: fix handling of incomplete data received (#55)

Reviewed-on: M-Labs/thermostat#55
Co-Authored-By: topquark12 <aw@m-labs.hk>
Co-Committed-By: topquark12 <aw@m-labs.hk>
This commit is contained in:
topquark12 2021-01-29 16:18:07 +08:00 committed by sb10q
parent 7cb0ed70be
commit a5d8661b10
2 changed files with 7 additions and 8 deletions

View File

@ -243,11 +243,8 @@ def main():
lookback, noiseband, ch['interval']) lookback, noiseband, ch['interval'])
for data in tec.report_mode(): for data in tec.report_mode():
try:
ch = data[channel] ch = data[channel]
# Workaround for report_mode may yeild empty object
except KeyError:
continue
temperature = ch['temperature'] temperature = ch['temperature']

View File

@ -213,9 +213,11 @@ fn main() -> ! {
socket.close() socket.close()
} else if socket.can_send() && socket.can_recv() { } else if socket.can_send() && socket.can_recv() {
match socket.recv(|buf| session.feed(buf)) { match socket.recv(|buf| session.feed(buf)) {
Ok(SessionInput::Nothing) => { // SessionInput::Nothing happens when the line reader parses a string of characters that is not
send_line(&mut socket, b"{}"); // followed by a newline character. Could be due to partial commands not terminated with newline,
} // socket RX ring buffer wraps around, or when the command is sent as seperate TCP packets etc.
// Do nothing and feed more data to the line reader in the next loop cycle.
Ok(SessionInput::Nothing) => {}
Ok(SessionInput::Command(command)) => match command { Ok(SessionInput::Command(command)) => match command {
Command::Quit => Command::Quit =>
socket.close(), socket.close(),