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'])
for data in tec.report_mode():
try:
ch = data[channel]
# Workaround for report_mode may yeild empty object
except KeyError:
continue
ch = data[channel]
temperature = ch['temperature']

View File

@ -213,9 +213,11 @@ fn main() -> ! {
socket.close()
} else if socket.can_send() && socket.can_recv() {
match socket.recv(|buf| session.feed(buf)) {
Ok(SessionInput::Nothing) => {
send_line(&mut socket, b"{}");
}
// SessionInput::Nothing happens when the line reader parses a string of characters that is not
// 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 {
Command::Quit =>
socket.close(),