arnaucube
arnaucube/raspberryGPIOhtmlserverPublic Self-hosted repository
raspberryGPIOhtmlserver/node_modules/ws/bin/wscat
node_modules/ws/bin/wscatRaw
  1#!/usr/bin/env node
  2
  3/*!
  4 * ws: a node.js websocket client
  5 * Copyright(c) 2011 Einar Otto Stangvik <einaros@gmail.com>
  6 * MIT Licensed
  7 */
  8
  9/**
 10 * Module dependencies.
 11 */
 12
 13var WebSocket = require('../')
 14  , fs = require('fs')
 15  , program = require('commander')
 16  , util = require('util')
 17  , events = require('events')
 18  , readline = require('readline');
 19
 20/**
 21 * InputReader - processes console input
 22 */
 23
 24function Console() {
 25  this.stdin = process.stdin;
 26  this.stdout = process.stdout;
 27
 28  this.readlineInterface = readline.createInterface(this.stdin, this.stdout);
 29
 30  var self = this;
 31  this.readlineInterface.on('line', function(data) {
 32    self.emit('line', data);
 33  });
 34  this.readlineInterface.on('close', function() {
 35    self.emit('close');
 36  });
 37
 38  this._resetInput = function() {
 39    self.clear();
 40  }
 41}
 42util.inherits(Console, events.EventEmitter);
 43
 44Console.Colors = {
 45  Red: '\033[31m',
 46  Green: '\033[32m',
 47  Yellow: '\033[33m',
 48  Blue: '\033[34m',
 49  Default: '\033[39m'
 50};
 51
 52Console.prototype.prompt = function() {
 53  this.readlineInterface.prompt();
 54}
 55
 56Console.prototype.print = function(msg, color) {
 57  this.clear();
 58  color = color || Console.Colors.Default;
 59  this.stdout.write(color + msg + Console.Colors.Default + '\n');
 60  this.prompt();
 61}
 62
 63Console.prototype.clear = function() {
 64  this.stdout.write('\033[2K\033[E');
 65}
 66
 67Console.prototype.pause = function() {
 68  this.stdin.on('keypress', this._resetInput);
 69}
 70
 71Console.prototype.resume = function() {
 72  this.stdin.removeListener('keypress', this._resetInput);
 73}
 74
 75/**
 76 * The actual application
 77 */
 78
 79var version = JSON.parse(fs.readFileSync(__dirname + '/../package.json', 'utf8')).version;
 80program
 81  .version(version)
 82  .usage('[options] <url>')
 83  .option('-l, --listen <port>', 'listen on port')
 84  .option('-c, --connect <url>', 'connect to a websocket server')
 85  .option('-p, --protocol <version>', 'optional protocol version')
 86  .option('-o, --origin <origin>', 'optional origin')
 87  .option('--host <host>', 'optional host')
 88  .option('-s, --subprotocol <protocol>', 'optional subprotocol')
 89  .parse(process.argv);
 90
 91if (program.listen && program.connect) {
 92  console.error('\033[33merror: use either --listen or --connect\033[39m');
 93  process.exit(-1);
 94}
 95else if (program.listen) {
 96  var wsConsole = new Console();
 97  wsConsole.pause();
 98  var options = {};
 99  if (program.protocol) options.protocolVersion = program.protocol;
100  if (program.origin) options.origin = program.origin;
101  if (program.subprotocol) options.protocol = program.subprotocol;
102  var ws = null;
103  var wss = new WebSocket.Server({port: program.listen}, function() {
104    wsConsole.print('listening on port ' + program.listen + ' (press CTRL+C to quit)', Console.Colors.Green);
105    wsConsole.clear();
106  });
107  wsConsole.on('close', function() {
108    if (ws) {
109      try {
110        ws.close();
111      }
112      catch (e) {}
113    }
114    process.exit(0);
115  });
116  wsConsole.on('line', function(data) {
117    if (ws) {
118      ws.send(data, {mask: false});
119      wsConsole.prompt();
120    }
121  });
122  wss.on('connection', function(newClient) {
123    if (ws) {
124      // limit to one client
125      newClient.terminate();
126      return;
127    };
128    ws = newClient;
129    wsConsole.resume();
130    wsConsole.prompt();
131    wsConsole.print('client connected', Console.Colors.Green);
132    ws.on('close', function() {
133      wsConsole.print('disconnected', Console.Colors.Green);
134      wsConsole.clear();
135      wsConsole.pause();
136      ws = null;
137    });
138    ws.on('error', function(code, description) {
139      wsConsole.print('error: ' + code + (description ? ' ' + description : ''), Console.Colors.Yellow);
140    });
141    ws.on('message', function(data, flags) {
142      wsConsole.print('< ' + data, Console.Colors.Blue);
143    });
144  });
145  wss.on('error', function(error) {
146    wsConsole.print('error: ' + error.toString(), Console.Colors.Yellow);
147    process.exit(-1);
148  });
149}
150else if (program.connect) {
151  var wsConsole = new Console();
152  var options = {};
153  if (program.protocol) options.protocolVersion = program.protocol;
154  if (program.origin) options.origin = program.origin;
155  if (program.subprotocol) options.protocol = program.subprotocol;
156  if (program.host) options.host = program.host;
157  var ws = new WebSocket(program.connect, options);
158  ws.on('open', function() {
159    wsConsole.print('connected (press CTRL+C to quit)', Console.Colors.Green);
160    wsConsole.on('line', function(data) {
161      ws.send(data, {mask: true});
162      wsConsole.prompt();
163    });
164  });
165  ws.on('close', function() {
166    wsConsole.print('disconnected', Console.Colors.Green);
167    wsConsole.clear();
168    process.exit();
169  });
170  ws.on('error', function(code, description) {
171    wsConsole.print('error: ' + code + (description ? ' ' + description : ''), Console.Colors.Yellow);
172    process.exit(-1);
173  });
174  ws.on('message', function(data, flags) {
175    wsConsole.print('< ' + data, Console.Colors.Blue);
176  });
177  wsConsole.on('close', function() {
178    if (ws) {
179      try {
180        ws.close();
181      }
182      catch(e) {}
183      process.exit();
184    }
185  });
186}
187else {
188  console.error('\033[33merror: use either --listen or --connect\033[39m');
189  process.exit(-1);
190}