Skip to content

Commit 2c49027

Browse files
committed
ServerSideEvents
1 parent 1ea0362 commit 2c49027

5 files changed

+41
-20
lines changed

Hackiebox.cpp

+4-2
Original file line numberDiff line numberDiff line change
@@ -5,8 +5,8 @@ BoxConfig Config;
55
BoxEvents Events;
66
Hackiebox Box;
77

8-
void crash(crashSource source, uint32_t sp) {
9-
Log.info("crashSource=%i, sp=%X", source, sp);
8+
void crash(crashSource source, uint32_t* sp) {
9+
Log.info("crashSource=%i, sp=%X, sp=%X", source, sp, (uint32_t)sp-0x20004000);
1010

1111
if (source == CRASH_TEST)
1212
return;
@@ -138,6 +138,8 @@ void Hackiebox::setup() {
138138
//Dont refactor, otherwise box may crash
139139
boxBattery._batteryTestThread = EnhancedThread(ThreadCallbackHandler([&]() { boxBattery._doBatteryTestStep(); }), 10*60*1000);
140140
boxBattery._batteryTestThread.enabled = false;
141+
142+
logStreamSse.setSsePaused(false);
141143

142144
boxLEDs.defaultIdleAnimation();
143145
Log.info("Hackiebox started!");

LogStreamMulti.cpp

+2-1
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ size_t LogStreamMulti::println() {
3535
for (uint8_t i = 0; i < LOG_STREAM_MULTI_MAX_SIZE; i++) {
3636
if (_streams[i] == 0)
3737
continue;
38-
result = _streams[i]->print("\r\n");
38+
result = _streams[i]->println();//("\r\n");
3939
}
4040
flush();
4141
return 2;
@@ -46,6 +46,7 @@ void LogStreamMulti::flush() {
4646
if (_streams[i] == 0)
4747
continue;
4848
_streams[i]->write((const uint8_t*)&_buffer, _getBufferPosition());
49+
_streams[i]->flush();
4950
}
5051
memset(_buffer, '\0', LOG_STREAM_MULTI_BUFFER_SIZE);
5152
}

LogStreamSse.cpp

+32-13
Original file line numberDiff line numberDiff line change
@@ -6,20 +6,44 @@
66
size_t LogStreamSse::write(uint8_t character) {
77
if (Box.webServer.subscriptionCount == 0 || _ssePaused)
88
return 0;
9-
9+
1010
for (uint8_t i = 0; i < SSE_MAX_CHANNELS; i++) {
1111
WrapperWebServer::SSESubscription* subscription = &Box.webServer.subscription[i];
1212
WiFiClient* client = &(subscription->client);
1313
if (!(subscription->clientIP) || !client->connected())
1414
continue;
1515

16-
if (_lineFinished) {
17-
client->print("data: { \"type\":\"");
18-
client->print("log");
19-
client->print("\", \"data\":\"");
20-
_lineFinished = false;
16+
bool tagIsOpen = _tagIsOpen;
17+
if (character == '\n') {
18+
if (_tagIsOpen) {
19+
client->print("\" }\n\n"); // Extra newline required by SSE standard
20+
tagIsOpen = false;
21+
}
22+
client->flush();
23+
} else {
24+
if (!_tagIsOpen) {
25+
client->print("data: { \"type\":\"");
26+
client->print("log");
27+
client->print("\", \"data\":\"");
28+
tagIsOpen = true;
29+
}
30+
switch (character) {
31+
case '\r':
32+
case '\b':
33+
case '\f':
34+
break;
35+
case '\t':
36+
break;
37+
client->print("\\t");
38+
case '\"':
39+
break;
40+
client->print("\\\"");
41+
default:
42+
client->print((char)character);
43+
break;
44+
}
2145
}
22-
client->print(character); //TODO escape ";
46+
_tagIsOpen = tagIsOpen;
2347
}
2448
return 1;
2549
}
@@ -28,12 +52,7 @@ size_t LogStreamSse::println() {
2852
if (Box.webServer.subscriptionCount == 0 || _ssePaused)
2953
return 0;
3054

31-
size_t result = print("\" }\n\n"); // Extra newline required by SSE standard
32-
_lineFinished = true;
33-
return result;
34-
}
35-
bool LogStreamSse::isLineFinished() {
36-
return _lineFinished;
55+
return print("\n");
3756
}
3857
void LogStreamSse::setSsePaused(bool paused) {
3958
_ssePaused = paused;

LogStreamSse.h

+1-2
Original file line numberDiff line numberDiff line change
@@ -13,12 +13,11 @@ class LogStreamSse : public Stream {
1313
int peek() { return 0; };
1414
void flush() { };
1515

16-
bool isLineFinished();
1716
void setSsePaused(bool paused);
1817

1918
private:
20-
bool _lineFinished = true;
2119
bool _ssePaused = true;
20+
bool _tagIsOpen = false;
2221
};
2322

2423
#endif

web/hackiebox.html

+2-2
Original file line numberDiff line numberDiff line change
@@ -410,7 +410,7 @@ <h2>Credits</h2>
410410
this._contentPage = new ContentPage();
411411
this._server = this._params.get("server");
412412
this._console = new WebConsole(this);
413-
//this._initSse();
413+
this._initSse();
414414

415415
$("input[type='checkbox']").bootstrapSwitch();
416416

@@ -703,4 +703,4 @@ <h2>Credits</h2>
703703
}
704704
</script>
705705
</body>
706-
</html>
706+
</html>

0 commit comments

Comments
 (0)