<template>
<div class="console" id="terminal"></div>
</template>
<script>
import SockJS from 'sockjs-client';
// import Terminal from './term';
import { Terminal } from 'xterm'
import * as fit from 'xterm/lib/addons/fit/fit'
import * as attach from 'xterm/lib/addons/attach/attach'
export default {
name: 'term',
props: {
res: (Object,String)
},
data () {
return {
term: null,
terminalSocket: null
}
},
methods: {
runRealTerminal () {
console.log('webSocket is finished')
},
errorRealTerminal () {
console.log('error')
},
closeRealTerminal () {
console.log('close')
}
},
beforeMount (){
Terminal.applyAddon(fit)
Terminal.applyAddon(attach)
},
mounted () {
let that = this;
let terminalContainer = document.getElementById('terminal')
that.term = new Terminal({
fontSize: 14,
fontFamily: 'Consolas, "Courier New", monospace',
bellStyle: 'sound',
cursorBlink: true,
})
that.term.open(terminalContainer)
that.term.focus();
that.term.fit();
// setTimeout(() => {
// that.term.fit();
// }, 100);
fetch('/devopsApi/createPodAttachSession/5d134c4f7cb0322f6049c785/devops-api-1-0-d5dc659cc-jd7d5').then(res =>{
res.json().then(result => {
that.terminalSocket = new SockJS('/devopsApi/api/sockjs?' + result.sessionId);
that.terminalSocket.onopen = function() {
const startData = {Op: 'bind', SessionID: result.sessionId};
that.terminalSocket.send(JSON.stringify(startData));
};
that.terminalSocket.onmessage = function(e) {
const frame = JSON.parse(e.data);
if (frame.Op === 'stdout') {
that.term.write(frame.Data);
}
};
that.terminalSocket.onclose = function() {
console.log('close');
};
that.term.on('resize', () => {
that.terminalSocket.send(JSON.stringify({
Op: 'resize',
Cols: term.cols,
Rows: term.rows,
}));
});
that.term.on('data', (data) => {
that.terminalSocket.send(JSON.stringify({
Op: 'stdin',
Data: data,
Cols: term.cols,
Rows: term.rows,
}));
});
});
});
},
beforeDestroy () {
this.terminalSocket.close()
this.term.destroy()
}
}
</script>
<style lang="less" scoped>
</style>