Skip to content

Commit

Permalink
Use Object Stream; refactored Broadcast sample
Browse files Browse the repository at this point in the history
  • Loading branch information
ajlopez committed Jan 19, 2013
1 parent 4726034 commit 291b87d
Show file tree
Hide file tree
Showing 5 changed files with 43 additions and 111 deletions.
74 changes: 5 additions & 69 deletions lib/simplemessages.js
Original file line number Diff line number Diff line change
@@ -1,78 +1,14 @@

var net = require('net'),
util = require('util');

function Channel(sck)
{
var buffer = '';
var closed = false;
var channel = this;
var socket;

if (sck != null)
setSocket(sck);

this.connect = function(port, host) {
setSocket(net.connect(port,host));
}

function setSocket(sck) {
socket = sck;

socket.on('connect', function() {
channel.emit('connect');
});

socket.on('data', function(data) {
buffer += data;
for (var index = buffer.indexOf('\n'); index >= 0; index = buffer.indexOf('\n'))
{
var message = buffer.slice(0, index);
buffer = buffer.slice(index + 1);

if (message)
channel.emit('message', JSON.parse(message));
}
});

socket.on('end', function() {
closed = true;
channel.emit('end');
});

socket.on('close', function() {
closed = true;
channel.emit('close');
});
}

this.send = function(message) {
if (closed)
throw "socket is closed";
if (!socket)
throw "no connection";

socket.write(JSON.stringify(message) + '\n');
}

this.end = function() {
if (!socket)
return;

closed = true;
socket.end();
socket = null;
}
}

util.inherits(Channel, process.EventEmitter);
util = require('util'),
os = require('objectstream');

function Server(fn)
{
var server;

server = net.createServer(function(socket) {
fn(new Channel(socket));
fn(os.createStream(socket));
});

this.listen = function(port, domain) {
Expand All @@ -86,8 +22,8 @@ exports.createServer = function(fn) {
return new Server(fn);
}

exports.createClient = function()
exports.createClient = function(socket)
{
return new Channel();
return os.createStream(socket);
}

16 changes: 8 additions & 8 deletions samples/Broadcast/client.js
Original file line number Diff line number Diff line change
@@ -1,32 +1,32 @@

var simplemessages = require('../../'),
net = require('net'),
sargs = require('simpleargs');

// Define command line arguments
sargs.define('p', 'port', 3000, 'Server port')
.define('h', 'host', 'localhost', 'Server name')
.define('t', 'timeout', 1000, 'Timeout')
.defineValue('message', 'Hello, world', 'Message to send');
.defineValue('message', 'Hello world', 'Message to send');

// Process arguments
var options = sargs.process(process.argv);

var client = simplemessages.createClient();

client.on('connect', function() {
var socket = net.connect(options.port, options.host);
var client = simplemessages.createClient(socket);

socket.on('connect', function() {
run(client);
});

client.on('message', function(msg) {
client.on('data', function(msg) {
console.log(msg);
});

client.connect(options.port, options.host);

function run(client) {
var msg = (new Date()).toString() + ": " + options.message;
console.log(msg);
client.send(msg);
client.write(msg);
setTimeout(function() { run(client); }, options.timeout);
}

4 changes: 2 additions & 2 deletions samples/Broadcast/server.js
Original file line number Diff line number Diff line change
Expand Up @@ -12,7 +12,7 @@ function Broadcaster()
console.log("New Client");
client.nclient = nclients++;
clients[client.nclient] = client;
client.on('message', function(msg) { broadcaster.broadcast(client, msg); });
client.on('data', function(msg) { broadcaster.broadcast(client, msg); });
client.on('end', function() { broadcaster.removeClient(client); });
client.on('close', function() { broadcaster.removeClient(client); });
}
Expand All @@ -29,7 +29,7 @@ function Broadcaster()
if (client == source)
continue;
try {
client.send(msg);
client.write(msg);
}
catch (ex) {
console.log(ex.toString());
Expand Down
52 changes: 24 additions & 28 deletions test/createClient.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ var simplemessages = require('../'),
exports['Connect to Server and Write Message'] = function(test) {
test.expect(2);

var server = simplemessages.createServer(function(channel) {
channel.on('message', function(msg) {
var server = simplemessages.createServer(function(client) {
client.on('data', function(msg) {
test.ok(msg);
test.equal(msg.name, 'test');
test.done();
Expand All @@ -16,23 +16,22 @@ exports['Connect to Server and Write Message'] = function(test) {

server.listen(5000, 'localhost');

var client = simplemessages.createClient();
var socket = net.connect(5000, 'localhost');
var client = simplemessages.createClient(socket);

client.on('connect', function() {
client.send({ name: "test" });
socket.on('connect', function() {
client.write({ name: "test" });
client.end();
});

client.connect(5000, 'localhost');
}

exports['Connect to Server and Write Ten Messages'] = function(test) {
test.expect(30);

var nmsg = 0;

var server = simplemessages.createServer(function(channel) {
channel.on('message', function(msg) {
var server = simplemessages.createServer(function(client) {
client.on('data', function(msg) {
test.ok(msg);
test.equal(msg.name, 'test');
nmsg++;
Expand All @@ -47,56 +46,55 @@ exports['Connect to Server and Write Ten Messages'] = function(test) {

server.listen(5000, 'localhost');

var client = simplemessages.createClient();
var socket = net.connect(5000, 'localhost');
var client = simplemessages.createClient(socket);

client.on('connect', function() {
socket.on('connect', function() {
for (var k = 1; k <= 10; k++)
client.send({ name: "test", number: k });
client.write({ name: "test", number: k });

client.end();
});

client.connect(5000, 'localhost');
}

exports['Connect to Server and Receive Message'] = function(test) {
test.expect(3);

var server = simplemessages.createServer(function(channel) {
test.ok(channel);
channel.send({ name: "test"});
var server = simplemessages.createServer(function(client) {
test.ok(client);
client.write({ name: "test"});
});

server.listen(5000, 'localhost');

var client = simplemessages.createClient();
var socket = net.connect(5000, 'localhost');
var client = simplemessages.createClient(socket);

client.on('message', function(msg) {
client.on('data', function(msg) {
test.ok(msg);
test.equal(msg.name, "test");
test.done();
client.end();
server.close();
});

client.connect(5000, 'localhost');
}

exports['Connect to Server and Receive Ten Messages'] = function(test) {
test.expect(31);

var server = simplemessages.createServer(function(channel) {
test.ok(channel);
var server = simplemessages.createServer(function(client) {
test.ok(client);
for (var k = 1; k <= 10; k++)
channel.send({ name: "test", number: k });
client.write({ name: "test", number: k });
});

server.listen(5000, 'localhost');

var client = simplemessages.createClient();
var socket = net.connect(5000, 'localhost');
var client = simplemessages.createClient(socket);
var nmsg = 0;

client.on('message', function(msg) {
client.on('data', function(msg) {
test.ok(msg);
test.equal(msg.name, 'test');
nmsg++;
Expand All @@ -108,6 +106,4 @@ exports['Connect to Server and Receive Ten Messages'] = function(test) {
server.close();
}
});

client.connect(5000, 'localhost');
}
8 changes: 4 additions & 4 deletions test/createServer.js
Original file line number Diff line number Diff line change
Expand Up @@ -5,8 +5,8 @@ var simplemessages = require('../'),
exports['Create Server and Write Message'] = function(test) {
test.expect(2);

var server = simplemessages.createServer(function(channel) {
channel.on('message', function(msg) {
var server = simplemessages.createServer(function(client) {
client.on('data', function(msg) {
test.ok(msg);
test.equal(msg.name, 'test');
test.done();
Expand All @@ -27,8 +27,8 @@ exports['Create Server and Write Ten Messages'] = function(test) {

var nmsg = 0;

var server = simplemessages.createServer(function(channel) {
channel.on('message', function(msg) {
var server = simplemessages.createServer(function(client) {
client.on('data', function(msg) {
test.ok(msg);
test.equal(msg.name, 'test');
nmsg++;
Expand Down

0 comments on commit 291b87d

Please sign in to comment.