<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. Leetcode39--->Combination Sum(在数组中找出和为target的组合)

    题目: 给定一个数组candidates和一个目标值target,求出数组中相加结果为target的数字组合: 举例: For example, given candidate set [2, 3, ...

  2. SDOJ 3696 Tree

    描述 给你一个无向带权连通图,每条边是黑色或白色.让你求一棵最小权的恰好有need条白色边的生成树. 题目保证有解. 输入 第一行V,E,need分别表示点数,边数和需要的白色边数. 接下来E行 每行 ...

  3. 聊聊、Nginx 安装启动

    首先说下安装 Nginx 的步骤: (1)window 下安装 进入 http://nginx.org/en/download.html 下载版本 Mainline version 或者 Stable ...

  4. BZOJ4817 [Sdoi2017]树点涂色 【LCT + 线段树】

    题目 Bob有一棵n个点的有根树,其中1号点是根节点.Bob在每个点上涂了颜色,并且每个点上的颜色不同.定义一条路 径的权值是:这条路径上的点(包括起点和终点)共有多少种不同的颜色.Bob可能会进行这 ...

  5. 刷题总结——运输计划(bzoj4326)

    题目: 题目背景 NOIP2015 提高组 Day2 T3 题目描述 公元2044年,人类进入了宇宙纪元. L国有 n 个星球,还有 n-1 条双向航道,每条航道建立在两个星球之间,这 n-1 条航道 ...

  6. vs nuget package control.

    关于nuget,貌似使用nuget获取的package会在项目解决方案根目录下面将所有download下来的依赖包存储下来,所以这里的package会是最后所有的引用所在,既然不自己维护dll库的位置 ...

  7. Scrapy学习-17-暂停和重启

    Scrapy爬虫暂停和重启 在当前项目下新建一个用于存储中间过程变量的目录 注意不同的spider不能共用一个目录 同一个spider每次运行时也必须使用新的目录 mkdir <spider_p ...

  8. Day 21 三元表达式、生成器函数、列表解析

    知识点程序: #! /usr/bin/env python # -*- coding: utf-8 -*- # __author__ = "DaChao" # Date: 2017 ...

  9. hdu 4183(网络流)

    Pahom on Water Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)To ...

  10. hdu 1565&hdu 1569(网络流--最小点权值覆盖)

    方格取数(1) Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Su ...