Skip to content

Commit

Permalink
Channel connect, with test
Browse files Browse the repository at this point in the history
  • Loading branch information
ajlopez committed Jun 9, 2012
1 parent 766f097 commit 9ba810d
Show file tree
Hide file tree
Showing 3 changed files with 64 additions and 36 deletions.
72 changes: 45 additions & 27 deletions lib/simplemessages.js
Expand Up @@ -2,48 +2,66 @@
var net = require('net'),
util = require('util');

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

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');
});
if (sck != null)
setSocket(sck);

socket.on('close', function() {
closed = true;
channel.emit('close');
});
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.write = 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;
}
}

Expand All @@ -68,8 +86,8 @@ exports.createServer = function(fn) {
return new Server(fn);
}

exports.createClient = function(port, domain)
exports.createClient = function()
{
return new Channel(net.connect(port, domain));
return new Channel();
}

4 changes: 3 additions & 1 deletion samples/Broadcast/client.js
Expand Up @@ -11,7 +11,7 @@ sargs.define('p', 'port', 3000, 'Server port')
// Process arguments
var options = sargs.process(process.argv);

var client = simplemessages.createClient(options.port, options.host);
var client = simplemessages.createClient();

client.on('connect', function() {
run(client);
Expand All @@ -21,6 +21,8 @@ client.on('message', function(msg) {
console.log(msg);
});

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

function run(client) {
var msg = (new Date()).toString() + ": " + options.message;
console.log(msg);
Expand Down
24 changes: 16 additions & 8 deletions test/createClient.js
Expand Up @@ -14,14 +14,16 @@ exports['Connect to Server and Write Message'] = function(test) {
});
});

server.listen(4000, 'localhost');
server.listen(5000, 'localhost');

var client = simplemessages.createClient(4000, 'localhost');
var client = simplemessages.createClient();

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

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

exports['Connect to Server and Write Ten Messages'] = function(test) {
Expand All @@ -43,16 +45,18 @@ exports['Connect to Server and Write Ten Messages'] = function(test) {
});
});

server.listen(4001, 'localhost');
server.listen(5000, 'localhost');

var client = simplemessages.createClient(4001, 'localhost');
var client = simplemessages.createClient();

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

client.end();
});

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

exports['Connect to Server and Receive Message'] = function(test) {
Expand All @@ -63,9 +67,9 @@ exports['Connect to Server and Receive Message'] = function(test) {
channel.write({ name: "test"});
});

server.listen(4000, 'localhost');
server.listen(5000, 'localhost');

var client = simplemessages.createClient(4000, 'localhost');
var client = simplemessages.createClient();

client.on('message', function(msg) {
test.ok(msg);
Expand All @@ -74,6 +78,8 @@ exports['Connect to Server and Receive Message'] = function(test) {
client.end();
server.close();
});

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

exports['Connect to Server and Receive Ten Messages'] = function(test) {
Expand All @@ -85,9 +91,9 @@ exports['Connect to Server and Receive Ten Messages'] = function(test) {
channel.write({ name: "test", number: k });
});

server.listen(4000, 'localhost');
server.listen(5000, 'localhost');

var client = simplemessages.createClient(4000, 'localhost');
var client = simplemessages.createClient();
var nmsg = 0;

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

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

0 comments on commit 9ba810d

Please sign in to comment.