Send ping/pong

This commit is contained in:
Iwasaki Yudai 2015-08-31 21:27:43 -07:00
parent b711de495b
commit 00ddf781de
3 changed files with 34 additions and 25 deletions

View File

@ -24,14 +24,16 @@ type clientContext struct {
const ( const (
Input = '0' Input = '0'
ResizeTerminal = '1' Ping = '1'
ResizeTerminal = '2'
) )
const ( const (
Output = '0' Output = '0'
SetWindowTitle = '1' Pong = '1'
SetPreferences = '2' SetWindowTitle = '2'
SetReconnect = '3' SetPreferences = '3'
SetReconnect = '4'
) )
type argResizeTerminal struct { type argResizeTerminal struct {
@ -161,6 +163,8 @@ func (context *clientContext) processReceive() {
return return
} }
case Ping:
context.connection.WriteMessage(websocket.TextMessage, []byte{Pong})
case ResizeTerminal: case ResizeTerminal:
var args argResizeTerminal var args argResizeTerminal
err = json.Unmarshal(data[1:], &args) err = json.Unmarshal(data[1:], &args)

File diff suppressed because one or more lines are too long

View File

@ -9,9 +9,13 @@
var term; var term;
var pingTimer;
ws.onopen = function(event) { ws.onopen = function(event) {
ws.send(gotty_auth_token); ws.send(gotty_auth_token);
pingTimer = setInterval(sendPing, 30 * 1000, ws);
hterm.defaultStorage = new lib.Storage.Local(); hterm.defaultStorage = new lib.Storage.Local();
hterm.defaultStorage.clear(); hterm.defaultStorage.clear();
@ -30,7 +34,7 @@
io.onTerminalResize = function(columns, rows) { io.onTerminalResize = function(columns, rows) {
ws.send( ws.send(
"1" + JSON.stringify( "2" + JSON.stringify(
{ {
columns: columns, columns: columns,
rows: rows, rows: rows,
@ -52,39 +56,40 @@
term.io.writeUTF16(data); term.io.writeUTF16(data);
break; break;
case '1': case '1':
// pong
case '2':
term.setWindowTitle(data); term.setWindowTitle(data);
break; break;
case '2': case '3':
preferences = JSON.parse(data); preferences = JSON.parse(data);
Object.keys(preferences).forEach(function(key) { Object.keys(preferences).forEach(function(key) {
console.log("Setting " + key + ": " + preferences[key]); console.log("Setting " + key + ": " + preferences[key]);
term.getPrefs().set(key, preferences[key]); term.getPrefs().set(key, preferences[key]);
}); });
break; break;
case '3': case '4':
autoReconnect = JSON.parse(data); autoReconnect = JSON.parse(data);
console.log("Enabling reconnect: " + autoReconnect + " seconds")
break; break;
} }
} };
ws.onclose = function(event) { ws.onclose = function(event) {
if (term) { if (term) {
term.uninstallKeyboard(); term.uninstallKeyboard();
term.io.showOverlay("Connection Closed", null); term.io.showOverlay("Connection Closed", null);
} }
tryReconnect(); clearInterval(pingTimer);
} if (autoReconnect > 0) {
setTimeout(openWs, autoReconnect * 1000);
}
};
}
ws.onerror = function(error) {
tryReconnect(); var sendPing = function(ws) {
} ws.send("1");
} }
openWs(); openWs();
var tryReconnect = function() {
if (autoReconnect >= 0) {
setTimeout(openWs, autoReconnect * 1000);
}
}
})() })()