<template>
<div> <el-dialog title="命令" :visible.sync="dialogTableVisible" v-loading="loading"> <el-row class="box-row" style="width:780px; "> <el-card class="box-card" style="width:580px; background:#F5F5F5;height:400px;overflow-x:scroll;overflow-y:scroll; font-size:12px" >
<div id="terminal"></div>
</el-card> </el-row> </el-dialog> </div>
</template>
<script>
import { exec_socket } from '@/api/paasApi'
import "xterm/dist/xterm.css"
import { Terminal } from 'xterm';
//import {terminal}from 'terminal-kit' export default {
name: 'terminal', data() {
return {
dialogTableVisible: false,
dialogFormVisible: false,
formLabelWidth: '120px',
serviceid:null,
loading:false,
loginfo:'',
};
},
methods:{
terminal(id){ exec_socket(id).then(response=>{
let linkpath=response.url+'?token='+response.token
this.socket(linkpath)
console.log('linkpath',linkpath)
},function(err){ }) },
socket(linkpath){
let ws = new WebSocket(linkpath);
var that=this
var xterm = new Terminal({
cols: 100,
rows: 20,
cursorBlink: 5,
scrollback: 30,
tabStopWidth: 4
}); // Instantiate the terminal
xterm.open(document.getElementById('terminal'));
// xterm.write('Hello from \x1B[1;3;31mxterm.js\x1B[0m $ ')
//xterm.attach(ws); //xterm.fit(); ws.onerror = function () { showErrorMessage('connect error.') };
ws.onmessage = function(event) {
console.log('on message:',that.decodeBase64Content(event.data)) xterm.write(that.decodeBase64Content(event.data));
};
ws.onopen = function () {
console.log('ws onopen ') } console.log(xterm.element.classList); // Log the keyCode of every keyDown event
xterm.textarea.onkeydown = function (e) {
console.log('User pressed key with keyCode: ', e.keyCode);
//console.log('编码',)
//ws.send(that.encodeBase64Content(e.keyCode.toString()));
//ws.send('bHM=');
} xterm.attachCustomKeyEventHandler(function (e) {
if (e.keyCode == 13) {
console.log('enter')
ws.send('DQ==')
return false;
}
});
xterm.on('data',function(data){
console.log('data xterm=>',data)
//xterm.write(data);
ws.send(that.encodeBase64Content(data.toString()))
}) xterm.on('output', arrayBuffer => {
console.log('output===',arrayBuffer)
xterm.write(arrayBuffer);
}); xterm.on('blur', arrayBuffer => {
console.log('blur===',arrayBuffer)
xterm.write(arrayBuffer);
}); xterm.on('focus', arrayBuffer => {
console.log('focus===',arrayBuffer)
xterm.write(arrayBuffer);
}); /* xterm.on('key', arrayBuffer => {
console.log('key===',arrayBuffer)
xterm.write(arrayBuffer);
});*/
xterm.on('keydown', arrayBuffer => {
console.log('keydown===',arrayBuffer)
xterm.write(arrayBuffer);
}); xterm.on('lineFeed', arrayBuffer => {
console.log('lineFeed===',arrayBuffer)
xterm.write(arrayBuffer);
}); xterm.on('resize', size => {
ws.send('resize', [size.cols, size.rows]);
console.log('resize', [size.cols, size.rows]);
}) //xterm.on('data', data => socket.emit('input', data));
},
decodeBase64Content(base64Content) {
// base64 解码
let commonContent = base64Content.replace(/\s/g, '+');
commonContent = Buffer.from(commonContent, 'base64').toString();
return commonContent;
},
encodeBase64Content(commonContent) {
// base64 编码
let base64Content = Buffer.from(commonContent).toString('base64');
return base64Content;
}, },
created(){ }
};
</script> <style rel="stylesheet/scss" lang="scss" scoped>
.marin{
margin: 4px;
} .padding-left10{
padding-left: 10px;
} </style>

xterm.js 基于websocket 链接容器 命令行工具的更多相关文章

  1. 让你如绅士般基于描述编写 Python 命令行工具的开源项目:docopt

    作者:HelloGitHub-Prodesire HelloGitHub 的<讲解开源项目>系列,项目地址:https://github.com/HelloGitHub-Team/Arti ...

  2. 用 shell 脚本做命令行工具扩展

    问题的提出 公司开发机与远程服务器之间有严格的隔离策略,不能直接使用 ssh 登录,而必需通过跳板机.这样一来,本地与服务器之间的一些文件传输变得非常不便.经过咨询,运维教了我一招: $ nc -l ...

  3. Nodejs 如何制作命令行工具

    # 全局安装,安装报错是需要前面加上sudo $ sudo npm install -g xxxb # 输出帮助 $ xxxb -h Usage: xxxb 这里是我私人玩耍的命令哦![options ...

  4. 微软开放技术发布针对 Mac 和 Linux 的更新版 Azure Node.JS SDK 和命令行工具

    发布于 2013-12-04 作者 Eduard Koller 这次为我们使用Linux 的朋友带来了更多关于部署云上虚拟机的消息.今天,微软开放技术有限公司 (MS Open Tech),想与大家分 ...

  5. react.js 之 create-react-app 命令行工具系统讲解

    react.js 教程之 create-react-app 命令行工具系统讲解 快速开始 npm install -g create-react-app create-react-app my-app ...

  6. Node.js躬行记(3)——命令行工具

    一.自定义 创建一个空目录,然后通过npm init命令初始化package.json文件,并按提示输入相关信息或直接回车使用默认信息,生成的内容如下所示. { "name": & ...

  7. 基于node和npm的命令行工具——tive-cli

    前端开发过程中经常会用到各种各样的脚手架工具.npm全局工具包等命令行工具,如:Vue脚手架@vue/cli.React脚手架create-react-app.node进程守卫工具pm2.本地静态服务 ...

  8. GitBook是一个命令行工具(Node.js库),我们可以借用该工具使用Github/Git和Markdown来制作精美的图书,但它并不是一本关于Git的教程哟。

    GitBook是一个命令行工具(Node.js库),我们可以借用该工具使用Github/Git和Markdown来制作精美的图书,但它并不是一本关于Git的教程哟. 支持输出多种格式 GitBook支 ...

  9. Node.js 命令行工具的编写

    日常开发中,编写 Node.js 命令行工具来完成一些小任务是很常见的操作.其编写也不难,和日常编写 Node.js 代码并无二致. package.json 中的 bin 字段 一个 npm 模块, ...

随机推荐

  1. Selenium WebDriver的多浏览器测试

    1. IE浏览器,需要配合下载IEDriverSever.exe的驱动程序,目前selenium支持IE9以上. (驱动程序下载链接:https://pan.baidu.com/s/1YpaUsIs1 ...

  2. python - 字符串的格式化输出

    # -*- coding:utf-8 -*- '''@project: jiaxy@author: Jimmy@file: study_2_str.py@ide: PyCharm Community ...

  3. day04_07 while循环01

    while循环结构: #while 条件: print("any") print("any") 死循环案例 num = 1 while num<=10 : ...

  4. SCOI 2010 滑雪

    题目描述 a180285非常喜欢滑雪.他来到一座雪山,这里分布着 MM 条供滑行的轨道和 NN 个轨道之间的交点(同时也是景点),而且每个景点都有一编号 ii ( 1 \le i \le N1≤i≤N ...

  5. 常用类--Date日期类,SimpleDateFormat日期格式类,Calendar日历类,Math数学工具类,Random随机数类

    Date日期类 Date表示特定的时间,精确到毫秒; 构造方法: public Data() public Date(long date) 常用方法: public long getTime() pu ...

  6. 九度oj 题目1391:顺时针打印矩阵

    题目描述: 输入一个矩阵,按照从外向里以顺时针的顺序依次打印出每一个数字,例如,如果输入如下矩阵: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 则依次打印出数字1,2 ...

  7. 九度oj 题目1513:二进制中1的个数

    题目描述: 输入一个整数,输出该数二进制表示中1的个数.其中负数用补码表示. 输入: 输入可能包含多个测试样例. 对于每个输入文件,第一行输入一个整数T,代表测试样例的数量.对于每个测试样例输入为一个 ...

  8. Spring 依赖注入(二、注入参数)

    注入参数基本分7类: 1.基本类型值 2.注入bean 3.内部bean 4.注入null值 5.级联属性 6.List,Set,Map集合的注入 7.properties文件的注入(和集合注入基本是 ...

  9. Welcome-to-Swift-12附属脚本(Subscripts)

    附属脚本 可以定义在类(Class).结构体(structure)和枚举(enumeration)这些目标中,可以认为是访问对象.集合或序列的快捷方式,不需要再调用实例的特定的赋值和访问方法.举例来说 ...

  10. 刷题总结——棘手的操作(bzoj2333)

    题目: 题目背景 SCOI2011 DAY2 T1 题目描述 有 N 个节点,标号从 1 到 N ,这 N 个节点一开始相互不连通.第i个节点的初始权值为 a[i] ,接下来有如下一些操作:U x y ...