xterm.js 基于websocket 链接容器 命令行工具
<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 链接容器 命令行工具的更多相关文章
- 让你如绅士般基于描述编写 Python 命令行工具的开源项目:docopt
		
作者:HelloGitHub-Prodesire HelloGitHub 的<讲解开源项目>系列,项目地址:https://github.com/HelloGitHub-Team/Arti ...
 - 用 shell 脚本做命令行工具扩展
		
问题的提出 公司开发机与远程服务器之间有严格的隔离策略,不能直接使用 ssh 登录,而必需通过跳板机.这样一来,本地与服务器之间的一些文件传输变得非常不便.经过咨询,运维教了我一招: $ nc -l ...
 - Nodejs 如何制作命令行工具
		
# 全局安装,安装报错是需要前面加上sudo $ sudo npm install -g xxxb # 输出帮助 $ xxxb -h Usage: xxxb 这里是我私人玩耍的命令哦 1.选择 "File-->New-->Dy ...
 - java面试题之谈谈你对java的理解
			
平台无关性:一处编译到处运行 GC:不用像c++那样手动释放堆内容 语言特性:泛型.反射.lamda表达式 面向对象:封装.继承.多态 类库:集合.并发库.网络库.IO库 异常处理
 - 【前端学习笔记】2015-09-06 ~~~~ setAttribute()、slice()
			
所遇记录: 1.setAttribute("属性",value),相同的还有addAttribute("属性名",value),getAttribute(“属性 ...
 - C语言第三题
			
1.完成char *p,char *q 的字符串比较,相等返回1,错误返回-1 2.用户需要计算的2个20位数数字的加法,写程序实现让用户输入两个20位以上的数字并且相加,输出结果
 - jQuery控件之分页控件-- kkpager v1.3使用简介
			
js分页展示控件,传入简单参数就能使用的分页效果控件 在线测试链接: http://pgkk.github.io/kkpager/example/pager_test.html http://pgkk ...
 - 52深入理解C指针之---不透明指针
			
该系列文章源于<深入理解C指针>的阅读与理解,由于本人的见识和知识的欠缺可能有误,还望大家批评指教.一.size_t:用于安全表示长度,所有平台和系统都会解析成自己对应的长度 1.定义:s ...