From cc7bbb4a57b3df43435a45e4b816d9f64382d718 Mon Sep 17 00:00:00 2001 From: coderaiser Date: Fri, 12 Sep 2014 08:36:14 -0400 Subject: [PATCH] feature(terminal) add room /terminal --- lib/client/socket.js | 23 +++++++------------- lib/client/terminal.js | 49 +++++++++++++++++++++--------------------- lib/server/terminal.js | 28 ++++++++++++------------ 3 files changed, 46 insertions(+), 54 deletions(-) diff --git a/lib/client/socket.js b/lib/client/socket.js index cc9255f1..bf958a4a 100644 --- a/lib/client/socket.js +++ b/lib/client/socket.js @@ -15,6 +15,7 @@ var CloudCmd, Util, DOM, io; DISCONNECTED = 'terminal: socket disconnected\n'; Socket.on = addListener; + Socket.connect = connect; Socket.addListener = addListener; Socket.removeListener = removeListener; Socket.send = send; @@ -26,9 +27,6 @@ var CloudCmd, Util, DOM, io; function init(callback) { DOM.loadSocket(function() { Util.exec(callback); - - if (!socket) - connect(); }); } @@ -63,25 +61,22 @@ var CloudCmd, Util, DOM, io; }); } - function connect() { - var FIVE_SECONDS = 5000; + function connect(room) { + var href = location.origin, + FIVE_SECONDS = 5000; - socket = io.connect({ + if (room) + href += '/' + room; + + socket = io.connect(href, { 'max reconnection attempts' : Math.pow(2, 32), 'reconnection limit' : FIVE_SECONDS }); - if (socket.connected && AllListeners.connect) - AllListeners.connect.forEach(function(func) { - func(); - }); - socket.on('connect', function () { log(CONNECTED); }); - setListeners(AllListeners, socket); - socket.on('disconnect', function () { log(DISCONNECTED); }); @@ -91,8 +86,6 @@ var CloudCmd, Util, DOM, io; }); } - init(callback); - return Socket; } diff --git a/lib/client/terminal.js b/lib/client/terminal.js index 4b7187de..0a049bf3 100644 --- a/lib/client/terminal.js +++ b/lib/client/terminal.js @@ -1,4 +1,4 @@ -var CloudCmd, Util, DOM, CloudFunc, Terminal; +var CloudCmd, Util, DOM, CloudFunc, Terminal, io; (function(CloudCmd, Util, DOM, CloudFunc) { 'use strict'; @@ -10,7 +10,6 @@ var CloudCmd, Util, DOM, CloudFunc, Terminal; Element, Term, Cell, - Socket = CloudCmd.Socket, Images = DOM.Images, Size = { cols: 0, @@ -29,13 +28,7 @@ var CloudCmd, Util, DOM, CloudFunc, Terminal; DOM.loadJquery, CloudCmd.View, load, - CloudCmd.Socket, - /* rm view keys, it ruin terminal */ - function(callback) { - Socket = CloudCmd.Socket; - - Util.exec(callback); - }, + DOM.loadSocket, CloudTerm.show, addListeners ]); @@ -73,7 +66,7 @@ var CloudCmd, Util, DOM, CloudFunc, Terminal; DOM.load.style({ id : 'terminal-css', - inner : '.view {' + + inner : '.view, .terminal {' + 'height' + ': 100%;' + '}' + '.terminal-cursor {' + @@ -101,28 +94,34 @@ var CloudCmd, Util, DOM, CloudFunc, Terminal; } function addListeners(callback) { - var options = { - 'connect': function() { - write(Socket.CONNECTED + '\r'); - }, - 'disconnect': function() { - write(Socket.DISCONNECTED +'\r'); - }, - }; + var href = location.origin, + FIVE_SECONDS = 5000, - options[CHANNEL] = write; - options[CHANNEL_RESIZE] = function(size) { + socket = io.connect(href + '/terminal', { + 'max reconnection attempts' : Math.pow(2, 32), + 'reconnection limit' : FIVE_SECONDS + }); + + socket.on('connect', function() { + write('socket connected' + '\r'); + }); + + socket.on('disconnect', function() { + write('socket disconnected' +'\r'); + }); + + socket.on(CHANNEL, write); + + socket.on(CHANNEL_RESIZE, function(size) { Term.resize(size.cols, size.rows); - }; - - Socket.on(options); + }); Term.on('data', function(data) { - Socket.emit(CHANNEL, data); + socket.emit(CHANNEL, data); }); Term.on('resize', function(size) { - Socket.emit(CHANNEL_RESIZE, size); + socket.emit(CHANNEL_RESIZE, size); }); Util.exec(callback); diff --git a/lib/server/terminal.js b/lib/server/terminal.js index 2e52b1dd..d4c21b0c 100644 --- a/lib/server/terminal.js +++ b/lib/server/terminal.js @@ -3,8 +3,6 @@ var DIR = __dirname + '/../../', DIR_LIB = DIR + 'lib/', - - socket = require('./socket'), Util = require(DIR_LIB + 'util'), CloudFunc = require(DIR_LIB + 'cloudfunc'), @@ -22,18 +20,20 @@ ConNum = 0; - module.exports = function(io) { - var makePty = function(clientSocket) { - onConnection(clientSocket, function(channel, data) { - socket.emit(channel, data, clientSocket); + module.exports = function(socket) { + var makePty = function(socket) { + onConnection(socket, function(channel, data) { + socket.emit(channel, data); }); }; if (pty) - socket.on('connection', io, makePty); + socket + .of('/terminal') + .on('connection', makePty); }; - function onConnection(clientSocket, callback) { + function onConnection(socket, callback) { var onDisconnect, resizeFunc, dataFunc, term; ++ConNum; @@ -50,16 +50,16 @@ log(conNum, 'terminal disconnected'); - socket.removeListener(CHANNEL, clientSocket, dataFunc); - socket.removeListener(CHANNEL_RESIZE, clientSocket, resizeFunc); - socket.removeListener('disconnect', clientSocket, onDisconnect); + socket.removeListener(CHANNEL, dataFunc); + socket.removeListener(CHANNEL_RESIZE, resizeFunc); + socket.removeListener('disconnect', onDisconnect); term.destroy(); }.bind(null, ConNum, term); - socket.on(CHANNEL, clientSocket, dataFunc); - socket.on(CHANNEL_RESIZE, clientSocket, resizeFunc); - socket.on('disconnect', clientSocket, onDisconnect); + socket.on(CHANNEL, dataFunc); + socket.on(CHANNEL_RESIZE, resizeFunc); + socket.on('disconnect', onDisconnect); } else { log(ConNum, ' in use. Reconnecting...\n'); socket.disconnect();