Skip to content

Commit

Permalink
Uses event emitters instead of that stupid hash
Browse files Browse the repository at this point in the history
  • Loading branch information
Steve Gattuso committed Aug 18, 2013
1 parent 852b4b1 commit 286718a
Show file tree
Hide file tree
Showing 3 changed files with 68 additions and 27 deletions.
32 changes: 28 additions & 4 deletions clientmanager.js
Original file line number Diff line number Diff line change
@@ -1,14 +1,38 @@
var EventEmitter = require("events").EventEmitter;

var ClientManager = function(pin_to_client) {
var ClientManager = function() {
var self = this;
self.pin_to_client = pin_to_client;

self.passPhoneEvent = function(name, connection) {
return function(e) {
connection.sendEvent(name, { v: e.v });
}
}

self.on("bindPin", function(connection, data) {
console.log("pin bound");
self.pin_to_client[data.pin] = connection;
data.pin = parseInt(data.pin);
console.log("[" + data.pin + "] Bound by client");

// Listen for the phone doing things
self.phone_manager.on(data.pin + ":keyUp", self.passPhoneEvent("keyUp", connection));
self.phone_manager.on(data.pin + ":keyDown", self.passPhoneEvent("keyDown", connection));
self.phone_manager.on(data.pin + ":tilt", self.passPhoneEvent("tilt", connection));

self.phone_manager.on(data.pin + ":phoneReady", function() {
connection.sendEvent("phoneReady");
});

self.phone_manager.on(data.pin + ":phoneClose", function() {
connection.sendEvent("phoneClose");
});

connection.sendEvent("pinBound", { pin: data.pin });

console.log(self.phone_manager.bound_pins);
if(self.phone_manager.bound_pins.indexOf(data.pin) != -1) {
console.log("Phone connected");
connection.sendEvent("phoneReady");
}
});
}

Expand Down
44 changes: 28 additions & 16 deletions phonemanager.js
Original file line number Diff line number Diff line change
@@ -1,36 +1,48 @@
var EventEmitter = require("events").EventEmitter;

var PhoneManager = function(pin_to_client) {
var PhoneManager = function() {
var self = this;
self.pin_to_client = pin_to_client;
self.bound_pins = [];

self.on("getPin", function(connection, data) {
connection.pin = (Math.random(1) * 1000).toFixed(0);
connection.sendEvent("setPin", { pin: connection.pin });
connection.pin = (Math.random(1) * 1000).toFixed(0);
connection.sendEvent("setPin", { pin: connection.pin });
self.emit(connection.pin + ":phoneReady");

self.bound_pins.push(parseInt(connection.pin));
});

self.on("keyDown", function(connection, data){
console.log("[pin:" + connection.pin + "] Event keyDown on " + data.v);
if(self.pin_to_client[connection.pin] == undefined) {
self.on("close", function(connection, data) {
if(!connection.pin) {
return;
}
self.pin_to_client[connection.pin].sendEvent("keyDown", { v: data.v });

console.log("[" + connection.pin +"] Closed");
self.emit(connection.pin + ":phoneClose");
self.bound_pins.splice(self.bound_pins.indexOf(connection.pin), 1);
});

self.on("restorePin", function(connection, data) {
connection.pin = data.pin;
connection.sendEvent("setPin", { pin: connection.pin });
self.emit(connection.pin + ":phoneReady");

console.log("[" +connection.pin + "] Restored pin");
});

self.on("keyDown", function(connection, data){
console.log("[pin:" + connection.pin + "] Event keyDown on " + data.v);
self.emit(connection.pin + ":keyDown", { v: data.v });
});

self.on("keyUp", function(connection, data){
console.log("[pin:" + connection.pin + "] Event keyUp on " + data.v);
if(self.pin_to_client[connection.pin] == undefined) {
return;
}
self.pin_to_client[connection.pin].sendEvent("keyUp", { v: data.v });
self.emit(connection.pin + ":keyUp", { v: data.v });
});

self.on("tilt", function(connection, data) {
console.log("[pin:" + connection.pin + "] Event tilt on " + data.v);
if(self.pin_to_client[connection.pin] == undefined) {
return;
}
self.pin_to_client[connection.pin].sendEvent("tilt", { v: data.v });
self.emit(connection.pin + ":tilt", { v: data.v });
});
}

Expand Down
19 changes: 12 additions & 7 deletions server.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,13 +10,13 @@ var server = http.createServer(function(request, response) {
response.end();
});

var pin_to_client = {};

var phone_manager = new PhoneManager(pin_to_client);
var client_manager = new ClientManager(pin_to_client);
var phone_manager = new PhoneManager();
var client_manager = new ClientManager();
phone_manager.client_manager = client_manager;
client_manager.phone_manager = phone_manager;

server.listen(8080, function() {
console.log((new Date()) + " server is listening on port 8080");
console.log("[http] Server is listening on port 8080");
});

wsServer = new WebSocketServer({
Expand All @@ -34,9 +34,13 @@ function handleRequest(protocol, manager) {
} catch(e) {
return;
}
console.log((new Date()) + 'Connection accepted.');
console.log("[ws] Connection accepted.");

conn.sendEvent = function(event, data) {
if(!data) {
data = {};
}

data['e'] = event;
conn.send(JSON.stringify(data));
}
Expand All @@ -48,11 +52,12 @@ function handleRequest(protocol, manager) {
console.log("Invalid JSON from client");
return;
}
console.log("msg:" + msg.e);
manager.emit(msg.e, conn, msg);
});

conn.on('close', function(reasonCode, description) {
console.log((new Date()) + ' Peer ' + conn.remoteAddress + ' disconnected');
manager.emit("close", conn);
});
};
}
Expand Down

0 comments on commit 286718a

Please sign in to comment.