diff --git a/configs/cli.js b/configs/cli.js index e3fd34116..a80241139 100644 --- a/configs/cli.js +++ b/configs/cli.js @@ -72,8 +72,11 @@ return [ // debug: !options.packed }, { - packagePath: "./c9.cli.bridge/bridge-client", - port: 17123 + packagePath: "./c9.ide.bridge/bridge-client" + }, + { + packagePath: "./c9.cli.bridge/clibridge-client" + //port: 17123 }, // "./c9.cli.mount/mount", { diff --git a/configs/client-default.js b/configs/client-default.js index f532d9e72..ff6a2281d 100644 --- a/configs/client-default.js +++ b/configs/client-default.js @@ -714,11 +714,11 @@ module.exports = function(options) { checkOS: true }, { - packagePath: "plugins/c9.cli.bridge/bridge", + packagePath: "plugins/c9.cli.bridge/clibridge", startBridge: options.startBridge }, { - packagePath: "plugins/c9.cli.bridge/bridge_commands", + packagePath: "plugins/c9.cli.bridge/clibridge_commands", basePath: workspaceDir }, { @@ -921,6 +921,11 @@ module.exports = function(options) { preinstalled: hosted && !options.ssh, }); } + + plugins.push({ + packagePath: "plugins/c9.ide.bridge/bridge", + startBridge: options.startBridge + }); return plugins; }; diff --git a/plugins/c9.cli.bridge/bridge-client.js b/plugins/c9.cli.bridge/bridge-client.js deleted file mode 100644 index c53255420..000000000 --- a/plugins/c9.cli.bridge/bridge-client.js +++ /dev/null @@ -1,95 +0,0 @@ -/** - * File Finder module for the Cloud9 that uses nak - * - * @copyright 2013, Ajax.org B.V. - */ -define(function(require, exports, module) { - main.consumes = ["c9", "Plugin", "net"]; - main.provides = ["bridge.client"]; - return main; - - function main(options, imports, register) { - var Plugin = imports.Plugin; - 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 counter = 0; - var SOCKET = c9.platform == "win32" - ? "\\\\.\\pipe\\.c9\\bridge.socket" - : c9.home + "/.c9/bridge.socket"; - - /***** Methods *****/ - - function send(message, callback) { - net.connect(SOCKET, {}, function(err, stream) { - if (err) - return callback(err); - - var jstream = new JSONStream(stream); - var msgId = generateMessageId(); - var done; - - jstream.write({ - 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(){ - }); - - plugin.on("unload", function(){ - }); - - /***** Register and define API *****/ - - /** - * Bridge To Communicate from CLI to IDE - **/ - plugin.freezePublicAPI({ - /** - * - */ - send: send - }); - - register(null, { - "bridge.client": plugin - }); - } -}); \ No newline at end of file diff --git a/plugins/c9.cli.bridge/bridge.js b/plugins/c9.cli.bridge/bridge.js deleted file mode 100644 index 7819c56ca..000000000 --- a/plugins/c9.cli.bridge/bridge.js +++ /dev/null @@ -1,109 +0,0 @@ -define(function(require, exports, module) { - main.consumes = ["c9", "Plugin", "ext"]; - main.provides = ["bridge"]; - return main; - - function main(options, imports, register) { - var Plugin = imports.Plugin; - var c9 = imports.c9; - var ext = imports.ext; - - var JSONStream = require("./json-stream"); - - /***** Initialization *****/ - - var plugin = new Plugin("Ajax.org", main.consumes); - var emit = plugin.getEmitter(); - - var ENABLED = options.startBridge !== false; - - var stream, api; - - function load(){ - if (!ENABLED) return; - - ext.loadRemotePlugin("bridge", { - code: c9.standalone ? undefined : require("text!./bridge-service.js"), - file: c9.standalone ? "c9.cli.bridge/bridge-service.js" : undefined, - redefine: true - }, function(err, remote) { - if (err) - return console.error(err); - - api = remote; - - api.connect(function(err, meta) { - if (err) - return console.error(err); // this should never happen - - stream = new JSONStream(meta.stream); - - stream.on("error", function(err) { - console.error(err); - }); - - stream.on("data", function(payload) { - emit("message", { - message: payload.message, - respond: function(err, message){ - stream.write({ - id: payload.id, - message: message, - error: err - }); - } - }); - - }); - - stream.on("close", function(){ - load(); - }); - - emit.sticky("ready"); - }); - }); - - window.addEventListener("unload", function(){ - api && api.disconnect(); - }); - } - - function write(json){ - if (!stream) { - plugin.once("ready", function(){ write(json); }); - return; - } - - stream.write(json); - } - - /***** Methods *****/ - - plugin.on("load", function(){ - c9.on("connect", load, plugin); - }); - - plugin.on("unload", function(){ - api && api.disconnect(); - stream = null; - api = null; - }); - - /***** Register and define API *****/ - - /** - * Bridge To Communicate from CLI to IDE - **/ - plugin.freezePublicAPI({ - /** - * - */ - write: write - }); - - register(null, { - bridge: plugin - }); - } -}); diff --git a/plugins/c9.cli.bridge/clibridge-client.js b/plugins/c9.cli.bridge/clibridge-client.js new file mode 100644 index 000000000..68401386a --- /dev/null +++ b/plugins/c9.cli.bridge/clibridge-client.js @@ -0,0 +1,46 @@ +/** + * File Finder module for the Cloud9 that uses nak + * + * @copyright 2013, Ajax.org B.V. + */ +define(function(require, exports, module) { + main.consumes = ["c9", "Plugin", "net", "bridge.client"]; + main.provides = ["bridge.cli.client"]; + return main; + + function main(options, imports, register) { + var Plugin = imports.Plugin; + var bridgeClient = imports["bridge.client"]; + + /***** Initialization *****/ + + var plugin = new Plugin("Ajax.org", main.consumes); + // var emit = plugin.getEmitter(); + + var send = bridgeClient.setup("cli"); + + /***** Lifecycle *****/ + + plugin.on("load", function(){ + }); + + plugin.on("unload", function(){ + }); + + /***** Register and define API *****/ + + /** + * Bridge To Communicate from CLI to IDE + **/ + plugin.freezePublicAPI({ + /** + * + */ + send: send + }); + + register(null, { + "bridge.cli.client": plugin + }); + } +}); \ No newline at end of file diff --git a/plugins/c9.cli.bridge/clibridge.js b/plugins/c9.cli.bridge/clibridge.js new file mode 100644 index 000000000..c27d8acbd --- /dev/null +++ b/plugins/c9.cli.bridge/clibridge.js @@ -0,0 +1,56 @@ +define(function(require, exports, module) { + main.consumes = ["c9", "Plugin", "ext", "bridge"]; + main.provides = ["clibridge"]; + return main; + + function main(options, imports, register) { + var Plugin = imports.Plugin; + var c9 = imports.c9; + var ext = imports.ext; + var bridge = imports.bridge; + + //var JSONStream = require("./json-stream"); + + /***** Initialization *****/ + + var plugin = new Plugin("Ajax.org", main.consumes); + var emit = plugin.getEmitter(); + + var ENABLED = options.startBridge !== false; + + /***** Methods *****/ + + var cliBridge = bridge.setup("cli"); + + cliBridge.on("message",function(payload){ + emit("message",payload); + }); + + plugin.on("load", function(){ + c9.on("connect", function(){ + if (!ENABLED) return; + cliBridge.load(function(){ + emit.sticky("ready"); + }); + }, plugin); + }); + + plugin.on("unload", cliBridge.unload); + + /***** Register and define API *****/ + + /** + * Bridge To Communicate from CLI to IDE + **/ + plugin.freezePublicAPI({ + /** + * + */ + write: cliBridge.write + }); + + register(null, { + clibridge: plugin + }); + } +}); diff --git a/plugins/c9.cli.bridge/bridge_commands.js b/plugins/c9.cli.bridge/clibridge_commands.js similarity index 98% rename from plugins/c9.cli.bridge/bridge_commands.js rename to plugins/c9.cli.bridge/clibridge_commands.js index f078cece2..5acb8a43d 100644 --- a/plugins/c9.cli.bridge/bridge_commands.js +++ b/plugins/c9.cli.bridge/clibridge_commands.js @@ -1,7 +1,7 @@ define(function(require, exports, module) { main.consumes = [ - "Plugin", "bridge", "tabManager", "panels", "tree.favorites", "tree", + "Plugin", "clibridge", "tabManager", "panels", "tree.favorites", "tree", "fs", "preferences", "settings", "c9", "commands" ]; main.provides = ["bridge.commands"]; @@ -9,7 +9,7 @@ define(function(require, exports, module) { function main(options, imports, register) { var Plugin = imports.Plugin; - var bridge = imports.bridge; + var bridge = imports.clibridge; var tabManager = imports.tabManager; var panels = imports.panels; var tree = imports.tree; diff --git a/plugins/c9.cli.bridge/bridge_test.js b/plugins/c9.cli.bridge/clibridge_test.js similarity index 94% rename from plugins/c9.cli.bridge/bridge_test.js rename to plugins/c9.cli.bridge/clibridge_test.js index ccb93842b..a7931cc8f 100644 --- a/plugins/c9.cli.bridge/bridge_test.js +++ b/plugins/c9.cli.bridge/clibridge_test.js @@ -49,15 +49,15 @@ require(["lib/architect/architect", "lib/chai/chai", "/vfs-root", "/vfs-home"], setup: expect.html.mocked }, { - consumes: ["bridge", "bridge.client"], + consumes: ["clibridge", "clibridge.client"], provides: [], setup: main } ], architect); function main(options, imports, register) { - var bridge = imports.bridge; - var client = imports["bridge.client"]; + var bridge = imports.clibridge; + var client = imports["clibridge.client"]; describe('bridge', function() { // this.timeout(10000); diff --git a/plugins/c9.cli.exec/exec.js b/plugins/c9.cli.exec/exec.js index e8a48f4b7..df2fefdd4 100644 --- a/plugins/c9.cli.exec/exec.js +++ b/plugins/c9.cli.exec/exec.js @@ -1,12 +1,12 @@ define(function(require, exports, module) { - main.consumes = ["Plugin", "cli_commands", "bridge.client"]; + main.consumes = ["Plugin", "cli_commands", "bridge.cli.client"]; main.provides = ["exec"]; return main; function main(options, imports, register) { var Plugin = imports.Plugin; var cmd = imports.cli_commands; - var bridge = imports["bridge.client"]; + var bridge = imports["bridge.cli.client"]; /***** Initialization *****/ diff --git a/plugins/c9.cli.open/open.js b/plugins/c9.cli.open/open.js index 5b8b68da8..27b4bddcb 100755 --- a/plugins/c9.cli.open/open.js +++ b/plugins/c9.cli.open/open.js @@ -1,5 +1,5 @@ define(function(require, exports, module) { - main.consumes = ["Plugin", "cli_commands", "proc", "bridge.client"]; + main.consumes = ["Plugin", "cli_commands", "proc", "bridge.cli.client"]; main.provides = ["open"]; return main; @@ -7,7 +7,7 @@ define(function(require, exports, module) { var Plugin = imports.Plugin; var cmd = imports.cli_commands; var proc = imports.proc; - var bridge = imports["bridge.client"]; + var bridge = imports["bridge.cli.client"]; var fs = require("fs"); var PATH = require("path"); diff --git a/plugins/c9.ide.bridge/bridge-client.js b/plugins/c9.ide.bridge/bridge-client.js new file mode 100644 index 000000000..bf15845e8 --- /dev/null +++ b/plugins/c9.ide.bridge/bridge-client.js @@ -0,0 +1,101 @@ +/** + * File Finder module for the Cloud9 that uses nak + * + * @copyright 2013, Ajax.org B.V. + */ +define(function(require, exports, module) { + main.consumes = ["c9", "Plugin", "net"]; + main.provides = ["bridge.client"]; + return main; + + function main(options, imports, register) { + var Plugin = imports.Plugin; + 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(); + + function setup(socketName){ + if(!socketName) return; + + var counter = 0; + var SOCKET = c9.platform == "win32" + ? "\\\\.\\pipe\\.c9\\bridge."+socketName+".socket" + : c9.home + "/.c9/bridge."+socketName+".socket"; + + /***** Methods *****/ + + function send(message, callback) { + net.connect(SOCKET, {}, function(err, stream) { + if (err) + return callback(err); + + var jstream = new JSONStream(stream); + var msgId = generateMessageId(); + var done; + + jstream.write({ + 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; + } + + return send; + } + /***** Lifecycle *****/ + + plugin.on("load", function(){ + }); + + plugin.on("unload", function(){ + }); + + /***** Register and define API *****/ + + /** + * Bridge To Communicate from CLI to IDE + **/ + plugin.freezePublicAPI({ + /** + * + */ + setup: setup + }); + + register(null, { + "bridge.client": plugin + }); + } +}); \ No newline at end of file diff --git a/plugins/c9.cli.bridge/bridge-service.js b/plugins/c9.ide.bridge/bridge-service.js similarity index 89% rename from plugins/c9.cli.bridge/bridge-service.js rename to plugins/c9.ide.bridge/bridge-service.js index d4ef726c2..d8b712e57 100644 --- a/plugins/c9.cli.bridge/bridge-service.js +++ b/plugins/c9.ide.bridge/bridge-service.js @@ -5,10 +5,11 @@ module.exports = function (vfs, options, register) { var Stream = require('stream'); var SOCKET = process.platform == "win32" - ? "\\\\.\\pipe\\.c9\\bridge.socket" - : process.env.HOME + "/.c9/bridge.socket"; + ? "\\\\.\\pipe\\.c9\\bridge.default.socket" + : process.env.HOME + "/.c9/bridge.default.socket"; function createListenClient(api){ + console.log(SOCKET) var client = net.connect(SOCKET, function(data){ api.onConnect(client); }); @@ -103,6 +104,15 @@ module.exports = function (vfs, options, register) { } register(null, { + genSocket:function(socketKey,callback){ + if(!socketKey || !callback) return; + + SOCKET = process.platform == "win32" + ? "\\\\.\\pipe\\.c9\\bridge."+socketKey+".socket" + : process.env.HOME + "/.c9/bridge."+socketKey+".socket"; + + callback(); + }, connect: function (callback) { if (stream) return callback(null, { stream: stream }); diff --git a/plugins/c9.ide.bridge/bridge.js b/plugins/c9.ide.bridge/bridge.js new file mode 100644 index 000000000..bf3f5f609 --- /dev/null +++ b/plugins/c9.ide.bridge/bridge.js @@ -0,0 +1,111 @@ +define(function(require, exports, module) { + main.consumes = ["c9", "Plugin", "ext"]; + main.provides = ["bridge"]; + return main; + + function main(options, imports, register) { + var Plugin = imports.Plugin; + var c9 = imports.c9; + var ext = imports.ext; + var Eventemitter = require("events").EventEmitter; + + var JSONStream = require("./json-stream"); + + /***** Initialization *****/ + + var plugin = new Plugin("Ajax.org", main.consumes); + //var emit = plugin.getEmitter(); + + function setup(SOCKET){ + var bridge = new Eventemitter(); + var stream, api; + + function load(callback){ + ext.loadRemotePlugin("bridge", { + code: c9.standalone ? undefined : require("text!./bridge-service.js"), + file: c9.standalone ? "c9.ide.bridge/bridge-service.js" : undefined, + redefine: true + }, function(err, remote) { + if (err) + return console.error(err); + + api = remote; + + api.genSocket(SOCKET, function(){ + api.connect(function(err, meta) { + if (err) + return console.error(err); // this should never happen + + stream = new JSONStream(meta.stream); + + stream.on("error", function(err) { + console.error(err); + }); + + stream.on("data", function(payload) { + bridge.emit("message", { + message: payload.message, + respond: function(err, message){ + stream.write({ + id: payload.id, + message: message, + error: err + }); + } + }); + + }); + + stream.on("close", function(){ + load(); + }); + + callback(); + }); + }); + }); + + window.addEventListener("unload", function(){ + api && api.disconnect(); + }); + } + + function write(json){ + if (!stream) { + plugin.once("ready", function(){ write(json); }); + return; + } + + stream.write(json); + } + + /***** Methods *****/ + bridge.load = load; + + bridge.unload = function(){ + api && api.disconnect(); + stream = null; + api = null; + }; + + bridge.write = write; + + + return bridge; + } + + /** + * Bridge for plugins Communicate + **/ + plugin.freezePublicAPI({ + /** + * + */ + setup:setup + }); + + register(null, { + bridge: plugin + }); + } +}); diff --git a/plugins/c9.cli.bridge/json-stream.js b/plugins/c9.ide.bridge/json-stream.js similarity index 100% rename from plugins/c9.cli.bridge/json-stream.js rename to plugins/c9.ide.bridge/json-stream.js