Skip to content
This repository was archived by the owner on Apr 6, 2021. It is now read-only.

move bridge to its own plugin #295

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 5 additions & 2 deletions configs/cli.js
Original file line number Diff line number Diff line change
@@ -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",
{
9 changes: 7 additions & 2 deletions configs/client-default.js
Original file line number Diff line number Diff line change
@@ -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;
};
95 changes: 0 additions & 95 deletions plugins/c9.cli.bridge/bridge-client.js

This file was deleted.

109 changes: 0 additions & 109 deletions plugins/c9.cli.bridge/bridge.js

This file was deleted.

46 changes: 46 additions & 0 deletions plugins/c9.cli.bridge/clibridge-client.js
Original file line number Diff line number Diff line change
@@ -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
});
}
});
56 changes: 56 additions & 0 deletions plugins/c9.cli.bridge/clibridge.js
Original file line number Diff line number Diff line change
@@ -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
});
}
});
Original file line number Diff line number Diff line change
@@ -1,15 +1,15 @@

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"];
return main;

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;
Original file line number Diff line number Diff line change
@@ -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);
4 changes: 2 additions & 2 deletions plugins/c9.cli.exec/exec.js
Original file line number Diff line number Diff line change
@@ -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 *****/

4 changes: 2 additions & 2 deletions plugins/c9.cli.open/open.js
Original file line number Diff line number Diff line change
@@ -1,13 +1,13 @@
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;

function main(options, imports, register) {
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");
101 changes: 101 additions & 0 deletions plugins/c9.ide.bridge/bridge-client.js
Original file line number Diff line number Diff line change
@@ -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
});
}
});
Original file line number Diff line number Diff line change
@@ -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 });

111 changes: 111 additions & 0 deletions plugins/c9.ide.bridge/bridge.js
Original file line number Diff line number Diff line change
@@ -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
});
}
});
File renamed without changes.