kopia lustrzana https://github.com/c9/core
Added missing files
rodzic
0a86081af0
commit
c78aba36b7
|
@ -618,7 +618,6 @@ module.exports = function(options) {
|
|||
},
|
||||
{
|
||||
packagePath: "plugins/c9.cli.bridge/bridge",
|
||||
port: 17123,
|
||||
startBridge: options.startBridge
|
||||
},
|
||||
{
|
||||
|
|
|
@ -13,27 +13,59 @@ define(function(require, exports, module) {
|
|||
var c9 = imports.c9;
|
||||
var net = imports.net;
|
||||
|
||||
var JSONStream = require("./json-stream");
|
||||
|
||||
/***** Initialization *****/
|
||||
|
||||
var plugin = new Plugin("Ajax.org", main.consumes);
|
||||
// var emit = plugin.getEmitter();
|
||||
|
||||
var PORT = options.port || 17123;
|
||||
var counter = 0;
|
||||
var SOCKET = c9.home + "/.c9/bridge.socket";
|
||||
|
||||
/***** Methods *****/
|
||||
|
||||
function send(message, callback) {
|
||||
net.connect(PORT, {}, function(err, stream) {
|
||||
net.connect(SOCKET, {}, function(err, stream) {
|
||||
if (err)
|
||||
return callback(err);
|
||||
|
||||
stream.write(JSON.stringify(message));
|
||||
stream.end();
|
||||
var jstream = new JSONStream(stream);
|
||||
var msgId = generateMessageId();
|
||||
var done;
|
||||
|
||||
callback();
|
||||
stream.write(JSON.stringify({
|
||||
id: msgId,
|
||||
message: message
|
||||
}));
|
||||
|
||||
jstream.on("data", function(payload){
|
||||
if (payload.id == msgId && !done) {
|
||||
done = true;
|
||||
callback(null, payload.message);
|
||||
stream.end();
|
||||
}
|
||||
});
|
||||
|
||||
jstream.on("error", function(err){
|
||||
if (done) return;
|
||||
callback(err);
|
||||
done = true;
|
||||
});
|
||||
|
||||
jstream.on("close", function(){
|
||||
if (done) return;
|
||||
callback(new Error("No Response"));
|
||||
done = true;
|
||||
})
|
||||
});
|
||||
}
|
||||
|
||||
function generateMessageId(){
|
||||
// Use vfs token
|
||||
return Math.random() + "-" + ++counter;
|
||||
}
|
||||
|
||||
/***** Lifecycle *****/
|
||||
|
||||
plugin.on("load", function(){
|
||||
|
|
|
@ -1,37 +1,114 @@
|
|||
module.exports = function (vfs, options, register) {
|
||||
var stream;
|
||||
|
||||
var net = require("net");
|
||||
var Stream = require('stream');
|
||||
var stream, server;
|
||||
|
||||
var SOCKET = process.env.HOME + "/.c9/bridge.socket";
|
||||
|
||||
function createListenClient(api){
|
||||
var client = net.connect(SOCKET, function(data){
|
||||
if (data) api.onData(data);
|
||||
});
|
||||
client.setEncoding("utf8");
|
||||
client.unref();
|
||||
|
||||
client.on("data", function(data){
|
||||
if (data) api.onData(data);
|
||||
});
|
||||
|
||||
client.on("error", function(err){
|
||||
if (err.code == "ECONNREFUSED") {
|
||||
require("fs").unlink(SOCKET, function(){
|
||||
createListenServer(api);
|
||||
});
|
||||
}
|
||||
else
|
||||
api.onError(err);
|
||||
});
|
||||
|
||||
client.on("end", function(){
|
||||
createListenServer(api);
|
||||
});
|
||||
|
||||
api.onConnect(client);
|
||||
|
||||
api.disconnect = function(){
|
||||
client.end();
|
||||
};
|
||||
|
||||
return client;
|
||||
}
|
||||
|
||||
function createListenServer(api){
|
||||
var unixServer = net.createServer(function(client) {
|
||||
client.setEncoding("utf8");
|
||||
|
||||
client.on("data", function(data){
|
||||
if (data) api.onData(data);
|
||||
});
|
||||
|
||||
client.on("error", function(data){
|
||||
// console.error("ERROR", api.id, data);
|
||||
});
|
||||
|
||||
api.onConnect(client);
|
||||
});
|
||||
unixServer.listen(SOCKET);
|
||||
|
||||
unixServer.on("error", function(err){
|
||||
if (err.code == "EADDRINUSE") {
|
||||
createListenClient(api);
|
||||
}
|
||||
else
|
||||
api.onError(err);
|
||||
});
|
||||
|
||||
api.disconnect = function(){
|
||||
unixServer.close();
|
||||
};
|
||||
}
|
||||
|
||||
register(null, {
|
||||
connect: function (port, callback) {
|
||||
connect: function (callback) {
|
||||
if (stream) return callback(null, { stream: stream });
|
||||
|
||||
server = require('net').createServer(function(c) {
|
||||
var buffer = "";
|
||||
c.on("data", function(chunk) {
|
||||
buffer += chunk;
|
||||
});
|
||||
c.on("end", function(){
|
||||
stream.emit("data", buffer);
|
||||
});
|
||||
});
|
||||
server.on("error", function(err) {
|
||||
callback(err);
|
||||
});
|
||||
server.listen(port, process.env.OPENSHIFT_DIY_IP || "localhost", function(err) {
|
||||
if (err) return callback(err);
|
||||
callback(null, { stream: stream });
|
||||
});
|
||||
|
||||
stream = new Stream();
|
||||
stream.readable = true;
|
||||
stream.writable = true;
|
||||
|
||||
var client;
|
||||
var sent = false;
|
||||
var api = this.api = {
|
||||
id: Math.random(),
|
||||
onConnect: function(c){
|
||||
client = c;
|
||||
if (sent) return;
|
||||
|
||||
callback(null, { stream: stream });
|
||||
sent = true;
|
||||
},
|
||||
onData: function(data){
|
||||
stream.emit("data", data);
|
||||
},
|
||||
onError: function(err){
|
||||
stream.emit("error", err);
|
||||
}
|
||||
};
|
||||
|
||||
createListenServer(api);
|
||||
|
||||
stream.on("data", function(data){
|
||||
if (client) client.write(data);
|
||||
});
|
||||
},
|
||||
|
||||
disconnect: function(){
|
||||
try { server && server.close(); }
|
||||
try { this.api && this.api.disconnect(); }
|
||||
catch (e) {}
|
||||
|
||||
stream = null;
|
||||
server = null;
|
||||
delete this.api;
|
||||
}
|
||||
});
|
||||
};
|
|
@ -1,4 +1,3 @@
|
|||
|
||||
define(function(require, exports, module) {
|
||||
main.consumes = ["c9", "Plugin", "ext"];
|
||||
main.provides = ["bridge"];
|
||||
|
@ -8,6 +7,8 @@ define(function(require, exports, module) {
|
|||
var Plugin = imports.Plugin;
|
||||
var c9 = imports.c9;
|
||||
var ext = imports.ext;
|
||||
|
||||
var JSONStream = require("./json-stream");
|
||||
|
||||
/***** Initialization *****/
|
||||
|
||||
|
@ -15,15 +16,10 @@ define(function(require, exports, module) {
|
|||
var emit = plugin.getEmitter();
|
||||
|
||||
var ENABLED = options.startBridge !== false;
|
||||
var PORT = options.port || 17123;
|
||||
|
||||
var stream, api;
|
||||
|
||||
var loaded = false;
|
||||
function load(){
|
||||
if (loaded) return;
|
||||
loaded = true;
|
||||
|
||||
if (!ENABLED) return;
|
||||
|
||||
ext.loadRemotePlugin("bridge", {
|
||||
|
@ -35,58 +31,52 @@ define(function(require, exports, module) {
|
|||
|
||||
api = remote;
|
||||
|
||||
api.connect(PORT, function(err, meta) {
|
||||
if (err) {
|
||||
loaded = false;
|
||||
api.connect(function(err, meta) {
|
||||
if (err)
|
||||
return console.error(err); // this should never happen
|
||||
|
||||
if (err.code == "EADDRINUSE") {
|
||||
console.warn("Another Application is using port "
|
||||
+ PORT + ". CLI client interface disabled. Restart Cloud9 to retry connecting.");
|
||||
}
|
||||
else
|
||||
console.error(err);
|
||||
|
||||
return;
|
||||
}
|
||||
|
||||
stream = meta.stream;
|
||||
|
||||
stream.on("data", function(chunk) {
|
||||
try { var message = JSON.parse(chunk); }
|
||||
catch (e) {
|
||||
setTimeout(function(){
|
||||
loaded = false;
|
||||
load();
|
||||
}, 60000);
|
||||
return;
|
||||
}
|
||||
emit("message", { message: message });
|
||||
stream = new JSONStream(meta.stream);
|
||||
|
||||
stream.on("error", function(err) {
|
||||
console.error(err);
|
||||
});
|
||||
|
||||
stream.on("data", function(payload) {
|
||||
var response = emit("message", { message: payload.message });
|
||||
|
||||
stream.write({
|
||||
id: payload.id,
|
||||
message: response
|
||||
});
|
||||
});
|
||||
|
||||
stream.on("close", function(){
|
||||
loaded = false;
|
||||
load();
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
window.addEventListener("unload", unload);
|
||||
window.addEventListener("unload", function(){
|
||||
api && api.disconnect();
|
||||
});
|
||||
}
|
||||
|
||||
function unload() {
|
||||
api && api.disconnect();
|
||||
api = stream = null;
|
||||
loaded = false;
|
||||
function write(json){
|
||||
if (!stream) return false;
|
||||
stream.write(JSON.stringify(json));
|
||||
return true;
|
||||
}
|
||||
|
||||
|
||||
/***** Methods *****/
|
||||
|
||||
plugin.on("load", function(){
|
||||
c9.on("connect", load, plugin);
|
||||
c9.on("disconnect", unload, plugin);
|
||||
});
|
||||
|
||||
plugin.on("unload", function(){
|
||||
api && api.disconnect();
|
||||
stream = null;
|
||||
api = null;
|
||||
});
|
||||
|
||||
/***** Register and define API *****/
|
||||
|
@ -94,7 +84,12 @@ define(function(require, exports, module) {
|
|||
/**
|
||||
* Bridge To Communicate from CLI to IDE
|
||||
**/
|
||||
plugin.freezePublicAPI({ });
|
||||
plugin.freezePublicAPI({
|
||||
/**
|
||||
*
|
||||
*/
|
||||
write: write
|
||||
});
|
||||
|
||||
register(null, {
|
||||
bridge: plugin
|
||||
|
|
|
@ -23,22 +23,20 @@ define(function(require, exports, module) {
|
|||
|
||||
var BASEPATH = options.basePath;
|
||||
|
||||
var loaded = false;
|
||||
function load(){
|
||||
if (loaded) return;
|
||||
loaded = true;
|
||||
|
||||
bridge.on("message", function(e) {
|
||||
var message = e.message;
|
||||
|
||||
switch (message.type) {
|
||||
case "open":
|
||||
open(message);
|
||||
break;
|
||||
return true;
|
||||
case "ping":
|
||||
break;
|
||||
return true;
|
||||
default:
|
||||
return false;
|
||||
}
|
||||
});
|
||||
}, plugin);
|
||||
}
|
||||
|
||||
/***** Methods *****/
|
||||
|
@ -61,7 +59,7 @@ define(function(require, exports, module) {
|
|||
|
||||
var node = favs.addFavorite(path);
|
||||
|
||||
tree.expand(path, function(err) {
|
||||
tree.expand(path, function() {
|
||||
tree.select(node); //path || "/");
|
||||
tree.scrollToSelection();
|
||||
});
|
||||
|
|
|
@ -90,7 +90,7 @@ define(function(require, exports, module) {
|
|||
paths: paths
|
||||
};
|
||||
|
||||
bridge.send(message, function cb(err) {
|
||||
bridge.send(message, function cb(err, response) {
|
||||
if (err) {
|
||||
if (err.code == "ECONNREFUSED") {
|
||||
// Seems Cloud9 is not running, lets start it up
|
||||
|
@ -111,6 +111,9 @@ define(function(require, exports, module) {
|
|||
console.log(err.message);
|
||||
}
|
||||
|
||||
if (response !== true)
|
||||
console.log("Could not open ", paths);
|
||||
|
||||
process.exit(); // I don't get why this is needed
|
||||
});
|
||||
}
|
||||
|
@ -129,13 +132,16 @@ define(function(require, exports, module) {
|
|||
|
||||
var timed = Date.now();
|
||||
(function retry(){
|
||||
bridge.send({ type: "ping" }, function(err) {
|
||||
bridge.send({ type: "ping" }, function(err, message) {
|
||||
if (!err)
|
||||
return callback(true);
|
||||
|
||||
if (Date.now() - timed > 10000)
|
||||
return callback(false);
|
||||
|
||||
if (message !== true)
|
||||
return callback(false);
|
||||
|
||||
setTimeout(retry, 100);
|
||||
});
|
||||
})();
|
||||
|
|
Ładowanie…
Reference in New Issue