From e9649a7a0722aaf26a3ce33901c0498d25457d5b Mon Sep 17 00:00:00 2001 From: Arunoda Susiripala Date: Sun, 31 Mar 2013 17:31:25 +0530 Subject: [PATCH] peer directory added --- conf/config.json | 12 ++++++++++++ lib/clientManager.js | 6 +++++- lib/handlers/directory.js | 20 ++++++++++++-------- lib/models/directory.js | 4 ++++ start-server.js | 40 +++++++++++++++++++++++++++++++++++++++ 5 files changed, 73 insertions(+), 9 deletions(-) create mode 100644 conf/config.json diff --git a/conf/config.json b/conf/config.json new file mode 100644 index 0000000..b2fa349 --- /dev/null +++ b/conf/config.json @@ -0,0 +1,12 @@ +{ + "port": 5005, + "mongo": { + "url": "mongodb://localhost/peerman", + "collections": { + "directory": "directory" + } + }, + "logger": { + "level": "debug" + } +} \ No newline at end of file diff --git a/lib/clientManager.js b/lib/clientManager.js index 0bbfda1..9530a2f 100644 --- a/lib/clientManager.js +++ b/lib/clientManager.js @@ -7,10 +7,14 @@ var ConnectionHandler = require('./handlers/connection'); function ClientManager(sockets, models) { + if(!(this instanceof ClientManager)) { + return new ClientManager(sockets, models); + } + var SERVER_ID = uuid.v4(); var clients = {}; - var directoryHandler = new DirectoryHandler(SERVER_ID, clients, model.directory); + var directoryHandler = new DirectoryHandler(SERVER_ID, clients, models.directory); var connectionHandler = new ConnectionHandler(SERVER_ID, clients); sockets.on('connection', function(socket) { diff --git a/lib/handlers/directory.js b/lib/handlers/directory.js index 78d4e7d..bf116a8 100644 --- a/lib/handlers/directory.js +++ b/lib/handlers/directory.js @@ -10,8 +10,8 @@ function DirectoryHandler(serverId, clients, model) { var name; client.once('init', onInit); - client.on('connect-with', onConnectWith); - client.on('disconnect-with', onDisconnectWith); + client.on('add-peer', onAddPeer); + client.on('remove-peer', onRemovePeer); client.on('add-resource', onAddResource); client.on('remove-resource', onRemoveResource); client.on('request-peer', onRequestPeer); @@ -25,6 +25,10 @@ function DirectoryHandler(serverId, clients, model) { interestedResources: interestedResources }); + totalInterested = totalInterested || 5; + existingPeerList = existingPeerList || []; + interestedResources = interestedResources || []; + name = myId; model.save(name, { online: true, @@ -36,16 +40,16 @@ function DirectoryHandler(serverId, clients, model) { }, onModelError('onInit')); } - function onConnectWith(peerId) { + function onAddPeer(peerId) { logger.info('connect with peer', {client: name, peer: peerId}); - model.addPeer(name, peerId, onModelError('onConnectWith')); + model.addPeer(name, peerId, onModelError('onAddPeer')); } - function onDisconnectWith(peerId) { + function onRemovePeer(peerId) { logger.info('disconnect with peer', {client: name, peer: peerId}); - model.removePeer(name, peerId, onModelError('onDisconnectWith')); + model.removePeer(name, peerId, onModelError('onRemovePeer')); } function onAddResource(resource) { @@ -70,8 +74,8 @@ function DirectoryHandler(serverId, clients, model) { logger.info('disconnecting client', {client: name}); - client.removeListener('connect-with', onConnectWith); - client.removeListener('disconnect-with', onDisconnectWith); + client.removeListener('add-peer', onAddPeer); + client.removeListener('remove-peer', onRemovePeer); client.removeListener('add-resource', onAddResource); client.removeListener('remove-resource', onRemoveResource); client.removeListener('request-peer', onRequestPeer); diff --git a/lib/models/directory.js b/lib/models/directory.js index 6ebaed7..9982de1 100644 --- a/lib/models/directory.js +++ b/lib/models/directory.js @@ -1,5 +1,9 @@ function DirectoryModel(collection) { + if(!(this instanceof DirectoryModel)) { + return new DirectoryModel(collection); + } + var self = this; /* diff --git a/start-server.js b/start-server.js index e69de29..e4c117d 100644 --- a/start-server.js +++ b/start-server.js @@ -0,0 +1,40 @@ +//config +var config = require('./conf/config.json'); +var http = require('http'); +var express = require('express'); +var mongo = require('mongodb'); +var socketIo = require('socket.io'); + +// better logging +var winstoon = require('winstoon'); +var logger = winstoon.createLogger('/'); +winstoon.add(winstoon.transports.Console); +winstoon.setRootLevel(config.logger.level); + +//app +var app = express(); +var server = http.createServer(app); +var io = socketIo.listen(server); +io.set('log level', 1); +io.set('browser client minification', 1); + +//db and models +mongo.MongoClient.connect(config.mongo.url, afterMongoConnected); + +var port = parseInt(process.argv[2]) || config.port; +logger.info('starting peerman server', {port: port}); +server.listen(port); + +function afterMongoConnected (err, db) { + + if(err) throw err; + + //models + var models = {}; + var collection = db.collection(config.mongo.collections.directory); + models.directory = require('./lib/models/directory')(collection); + + //clientManager + var clientManager = require('./lib/clientManager')(io.sockets, models); +} +