]>
git.proxmox.com Git - pve-xtermjs.git/blob - src/www/main.js
a489937354f81af503fdc635278a1aee01ef2322
1 console
.log('xtermjs: starting');
21 function updateState(newState
, msg
) {
22 var timeout
, severity
, message
;
24 case states
.connecting
:
25 message
= "Connecting...";
27 severity
= severities
.warning
;
29 case states
.connected
:
30 message
= "Connected";
32 case states
.disconnecting
:
33 message
= "Disconnecting...";
35 severity
= severities
.warning
;
37 case states
.disconnected
:
40 case states
.connecting
:
41 message
= "Connection failed";
43 severity
= severities
.error
;
45 case states
.connected
:
46 case states
.disconnecting
:
47 message
= "Connection closed";
50 case states
.disconnected
:
54 throw "unknown state";
58 throw "unknown state";
61 message
+= " (" + msg
+ ")";
64 showMsg(message
, timeout
, severity
);
67 var terminalContainer
= document
.getElementById('terminal-container');
68 document
.getElementById('status_bar').addEventListener('click', hideMsg
);
72 function createTerminal() {
73 term
= new Terminal();
75 term
.on('resize', function (size
) {
76 if (state
=== states
.connected
) {
77 socket
.send("1:" + size
.cols
+ ":" + size
.rows
+ ":");
81 protocol
= (location
.protocol
=== 'https:') ? 'wss://' : 'ws://';
84 var type
= getQueryParameter('console');
85 var vmid
= getQueryParameter('vmid');
86 var vmname
= getQueryParameter('vmname');
87 var nodename
= getQueryParameter('node');
88 var url
= '/nodes/' + nodename
;
91 url
+= '/qemu/' + vmid
;
92 path
= '/vms/' + vmid
;
95 url
+= '/lxc/' + vmid
;
96 path
= '/vms/' + vmid
;
99 path
= '/nodes/' + nodename
;
103 path
= '/nodes/' + nodename
;
109 url
: url
+ '/termproxy',
110 success: function(result
) {
111 var port
= encodeURIComponent(result
.data
.port
);
112 ticket
= result
.data
.ticket
;
113 socketURL
= protocol
+ location
.hostname
+ ((location
.port
) ? (':' + location
.port
) : '') + '/api2/json' + url
+ '/vncwebsocket?port=' + port
+ '&vncticket=' + encodeURIComponent(ticket
);
115 term
.open(terminalContainer
, true);
116 socket
= new WebSocket(socketURL
, 'binary');
117 socket
.binaryType
= 'arraybuffer';
118 socket
.onopen
= runTerminal
;
119 socket
.onclose
= stopTerminal
;
120 socket
.onerror
= errorTerminal
;
121 window
.onbeforeunload
= stopTerminal
;
122 updateState(states
.connecting
);
124 failure: function(msg
) {
125 updateState(states
.disconnected
,msg
);
131 function runTerminal() {
132 socket
.onmessage = function(event
) {
133 var answer
= Utf8ArrayToStr(event
.data
);
134 if (state
=== states
.connected
) {
136 } else if(state
=== states
.connecting
) {
137 if (answer
.slice(0,2) === "OK") {
138 updateState(states
.connected
);
139 term
.write(answer
.slice(2));
146 term
.on('data', function(data
) {
147 if (state
=== states
.connected
) {
148 socket
.send("0:" + unescape(encodeURIComponent(data
)).length
.toString() + ":" + data
);
152 ping
= setInterval(function() {
156 window
.addEventListener('resize', function() {
157 clearTimeout(resize
);
158 resize
= setTimeout(function() {
164 socket
.send(PVE
.UserName
+ ':' + path
+ ':' + ticket
+ "\n");
166 setTimeout(function() {term
.fit();}, 250);
169 function stopTerminal(event
) {
174 updateState(states
.disconnected
, event
.msg
+ event
.code
);
177 function errorTerminal(event
) {
183 updateState(states
.disconnected
, event
.msg
+ event
.code
);