Commit 16e03cd3 authored by Jonathan Wilkes's avatar Jonathan Wilkes
Browse files

abstract out the socket client so that the GUI can be the server when it needs to spawn Pd itself

parent b48bd127
"use strict";
var gui = require("nw.gui");
console.log("foo is foo");
console.log("gurgle is " + gui.App.argv);
var pdgui = require("./pdgui.js");
var port_no = gui.App.argv[0]; // fed to us by the Pd process
var gui_dir = gui.App.argv[3];
// we're using pwd in fileDialog
var pwd = process.env.PWD;
pdgui.set_port(port_no);
pdgui.set_pwd(pwd);
pdgui.set_gui_dir(gui_dir);
pdgui.set_pd_window(this);
pdgui.set_app_quitfn(app_quit);
pdgui.set_open_html_fn(open_html);
pdgui.set_open_textfile_fn(open_textfile);
pdgui.set_open_external_doc_fn(open_external_doc);
// gui preset
pdgui.skin.apply(this);
......@@ -21,7 +11,49 @@ pdgui.skin.apply(this);
// For translations
var l = pdgui.get_local_string;
function app_quit () {
// Set up the Pd Window
set_vars(this);
add_events();
nw_create_pd_window_menus();
gui.Window.get().setMinimumSize(350,250);
// This part depends on whether the GUI is starting Pd, or whether it's
// the other way around.
connect();
function have_args() {
return !!gui.App.argv.length;
}
function set_vars(global) {
var port_no, gui_dir;
// If the GUI was started by Pd, our port number is going to be
// the first argument. If the GUI is supposed to start Pd, we won't
// have any arguments and need to set it here.
if (have_args()) {
port_no = gui.App.argv[0]; // fed to us by the Pd process
// looks like this is the same as pwd below
gui_dir = gui.App.argv[3];
} else {
// If we're starting Pd, this is the first port number to try. (We'll
// increment it if that port happens to be taken.
port_no = 5400;
gui_dir = pwd;
}
pdgui.set_port(port_no);
pdgui.set_pwd(pwd);
pdgui.set_gui_dir(gui_dir);
pdgui.set_pd_window(global);
pdgui.set_app_quitfn(app_quit);
pdgui.set_open_html_fn(open_html);
pdgui.set_open_textfile_fn(open_textfile);
pdgui.set_open_external_doc_fn(open_external_doc);
// nw context callbacks (mostly just creating/destroying windows)
pdgui.set_new_window_fn(nw_create_window);
pdgui.set_close_window_fn(nw_close_window);
}
function app_quit() {
console.log("quitting Pd...");
gui.App.quit();
}
......@@ -38,51 +70,53 @@ function open_external_doc(target) {
gui.Shell.openExternal(target);
}
document.getElementById("dsp_control").addEventListener("click",
function(evt) {
var dsp_state = this.checked ? 1 : 0;
pdgui.pdsend("pd dsp", dsp_state);
}
);
var find_bar = document.getElementById("console_find_text");
find_bar.addEventListener("keydown",
function(e) {
return console_find_keydown(this, e);
}, false
);
find_bar.addEventListener("keypress",
function(e) {
console_find_keypress(this, e);
}, false
);
find_bar.defaultValue = "Search in Console";
console_find_set_default(find_bar);
// Invoke some functions to create main menus, etc.
gui.Window.get().on("close", function() {
pdgui.menu_quit();
});
console.log(gui.App.argv);
document.getElementById("fileDialog").setAttribute("nwworkingdir", pwd);
document.getElementById("fileDialog").setAttribute("accept",
Object.keys(pdgui.pd_filetypes).toString());
nw_create_pd_window_menus();
gui.Window.get().setMinimumSize(350,250);
pdgui.connect();
pdgui.init_socket_events();
function add_events() {
// Find bar
var find_bar = document.getElementById("console_find_text");
find_bar.defaultValue = "Search in Console";
console_find_set_default(find_bar);
find_bar.addEventListener("keydown",
function(e) {
return console_find_keydown(this, e);
}, false
);
find_bar.addEventListener("keypress",
function(e) {
console_find_keypress(this, e);
}, false
);
// DSP toggle
document.getElementById("dsp_control").addEventListener("click",
function(evt) {
var dsp_state = this.checked ? 1 : 0;
pdgui.pdsend("pd dsp", dsp_state);
}
);
// Browser Window Close
gui.Window.get().on("close", function() {
pdgui.menu_quit();
});
// Open dialog
document.getElementById("fileDialog").setAttribute("nwworkingdir", pwd);
document.getElementById("fileDialog").setAttribute("accept",
Object.keys(pdgui.pd_filetypes).toString());
}
// nw context callbacks (mostly just creating/destroying windows)
pdgui.set_new_window_fn(nw_create_window);
pdgui.set_close_window_fn(nw_close_window);
function connect() {
// When the GUI is started by core Pd, it gives it some command
// line args. In that case we just need to create a client and
// connect to Pd on the port it gave us as an arg.
// If we have no command line args, it means we need to create a
// server, and also create the Pd process with the command line
// arg -guiport and providing the port we are listening on.
if (have_args()) {
pdgui.create_client();
} else {
pdgui.post("creating server");
pdgui.create_server();
}
pdgui.init_socket_events();
}
function console_find_check_default(e) {
if (e.value === e.defaultValue) {
......@@ -717,7 +751,3 @@ function nw_create_window(cid, type, width, height, xpos, ypos, menu_flag,
});
return new_win;
}
function canvasNew(args) {
console.log(args);
}
......@@ -931,23 +931,35 @@ var net = require("net");
var HOST = "127.0.0.1";
var PORT;
var client;
var socket;
exports.set_port = function (port_no) {
PORT = port_no;
}
function connect () {
client = new net.Socket();
function create_client() {
var client = new net.Socket();
client.setNoDelay(true);
// uncomment the next line to use fast_parser (then set its callback below)
//client.setEncoding("utf8");
client.connect(PORT, HOST, function() {
console.log("CONNECTED TO: " + HOST + ":" + PORT);
});
socket = client;
}
exports.connect = connect;
exports.create_client = create_client;
function create_server() {
var server = net.createServer(function(c) {
console.log("server connected");
});
server.listen(PORT, HOST);
console.log("listening on port " + PORT + " on host " + HOST);
socket = server;
}
exports.create_server= create_server;
// Add a 'data' event handler for the client socket
// data parameter is what the server sent to this socket
......@@ -1019,12 +1031,12 @@ function init_socket_events () {
}
};
client.on("data", perfect_parser);
socket.on("data", perfect_parser);
// Add a "close" event handler for the client socket
client.on("close", function() {
// Add a "close" event handler for the socket
socket.on("close", function() {
//console.log("Connection closed");
//client.destroy();
//socket.destroy();
nw_app_quit(); // set a timeout here if you need to debug
});
}
......@@ -1037,7 +1049,7 @@ function pdsend() {
// some reason. But it doesn't look like it makes that much
// of a difference
var string = Array.prototype.join.call(arguments, " ");
client.write(string + ";");
socket.write(string + ";");
// reprint the outgoing string to the pdwindow
//post(string + ";", "red");
}
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment