Changeset View
Changeset View
Standalone View
Standalone View
support/aphlict/server/lib/AphlictClientServer.js
| 'use strict'; | 'use strict'; | ||||
| var JX = require('./javelin').JX; | var JX = require('./javelin').JX; | ||||
| require('./AphlictListenerList'); | require('./AphlictListenerList'); | ||||
| require('./AphlictLog'); | require('./AphlictLog'); | ||||
| var url = require('url'); | |||||
| var util = require('util'); | var util = require('util'); | ||||
| var WebSocket = require('ws'); | var WebSocket = require('ws'); | ||||
| JX.install('AphlictClientServer', { | JX.install('AphlictClientServer', { | ||||
| construct: function(server) { | construct: function(server) { | ||||
| this.setListenerList(new JX.AphlictListenerList()); | |||||
| this.setLogger(new JX.AphlictLog()); | this.setLogger(new JX.AphlictLog()); | ||||
| this._server = server; | this._server = server; | ||||
| this._lists = {}; | |||||
| }, | }, | ||||
| members: { | members: { | ||||
| _server: null, | _server: null, | ||||
| _lists: null, | |||||
| getListenerList: function(path) { | |||||
| if (!this._lists[path]) { | |||||
| this._lists[path] = new JX.AphlictListenerList(path); | |||||
| } | |||||
| return this._lists[path]; | |||||
| }, | |||||
| listen: function() { | listen: function() { | ||||
| var self = this; | var self = this; | ||||
| var server = this._server.listen.apply(this._server, arguments); | var server = this._server.listen.apply(this._server, arguments); | ||||
| var wss = new WebSocket.Server({server: server}); | var wss = new WebSocket.Server({server: server}); | ||||
| wss.on('connection', function(ws) { | wss.on('connection', function(ws) { | ||||
| var listener = self.getListenerList().addListener(ws); | var path = url.parse(ws.upgradeReq.url).pathname; | ||||
| var listener = self.getListenerList(path).addListener(ws); | |||||
| function log() { | function log() { | ||||
| self.getLogger().log( | self.getLogger().log( | ||||
| util.format('<%s>', listener.getDescription()) + | util.format('<%s>', listener.getDescription()) + | ||||
| ' ' + | ' ' + | ||||
| util.format.apply(null, arguments)); | util.format.apply(null, arguments)); | ||||
| } | } | ||||
| Show All 28 Lines | listen: function() { | ||||
| default: | default: | ||||
| log( | log( | ||||
| 'Unrecognized command "%s".', | 'Unrecognized command "%s".', | ||||
| message.command || '<undefined>'); | message.command || '<undefined>'); | ||||
| } | } | ||||
| }); | }); | ||||
| ws.on('close', function() { | ws.on('close', function() { | ||||
| self.getListenerList().removeListener(listener); | self.getListenerList(path).removeListener(listener); | ||||
| log('Disconnected.'); | log('Disconnected.'); | ||||
| }); | }); | ||||
| wss.on('close', function() { | wss.on('close', function() { | ||||
| self.getListenerList().removeListener(listener); | self.getListenerList(path).removeListener(listener); | ||||
| log('Disconnected.'); | log('Disconnected.'); | ||||
| }); | }); | ||||
| wss.on('error', function(err) { | wss.on('error', function(err) { | ||||
| log('Error: %s', err.message); | log('Error: %s', err.message); | ||||
| }); | }); | ||||
| }); | }); | ||||
| }, | }, | ||||
| }, | }, | ||||
| properties: { | properties: { | ||||
| listenerList: null, | |||||
| logger: null, | logger: null, | ||||
| } | } | ||||
| }); | }); | ||||