Warning: session_start(): open(/var/lib/php/sessions/sess_4goe945b1q0klsd8dq31biko8s, O_RDWR) failed: No space left on device (28) in /var/www/tb-usercake/models/config.php on line 51
Warning: session_start(): Failed to read session data: files (path: /var/lib/php/sessions) in /var/www/tb-usercake/models/config.php on line 51
!7
static Map wsToState = weakHashMap();
static int interval = 200, initialChars = 65536;
static long timeout = 10*60000L; // larger timeout since we have no idle mechanism yet (todo)
static File fileToLog() { ret mechVersionsLog(); }
p {
webSocketManager = new WebSocketManager {
void onNewWebSocket(O ws, S uri) {
super.onNewWebSocket(ws, uri);
set(ws, 'timeout, timeout);
}
void onWebSocketMessage(O ws, S s) {
File f = fileToLog();
long len = fileSize(f);
new Matches m;
if "look back * chars pw *"
if (neq(masterPW(), $2)) {
call(ws, 'send, "bad pw");
call(ws, 'close);
} else
wsToState.put(ws, max(0, len-parseLong($1)));
}
};
doEvery(interval, f update);
}
html { ret "Use WebSocket: " + subBot_myWebSocketURI(); }
svoid update {
if (webSocketManager.isEmpty()) ret;
File f = fileToLog();
long len = fileSize(f);
for (O ws : webSocketManager.webSockets()) {
Long l = wsToState.get(ws);
if (l != null && len > l) { // no cmd yet? ignore
S newStuff = unquoteAllLines(loadTextFilePart(f, l, len));
wsToState.put(ws, len);
call(ws, 'send, "+" + newStuff);
}
}
}