56 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			56 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict';
 | |
| 
 | |
| var Devices = module.exports;
 | |
| Devices.add = function (store, servername, newDevice) {
 | |
|   var devices = store[servername] || [];
 | |
|   devices.push(newDevice);
 | |
|   store[servername] = devices;
 | |
| };
 | |
| Devices.remove = function (store, servername, device) {
 | |
|   var devices = store[servername] || [];
 | |
|   var index = devices.indexOf(device);
 | |
| 
 | |
|   if (index < 0) {
 | |
|     console.warn('attempted to remove non-present device', device.deviceId, 'from', servername);
 | |
|     return null;
 | |
|   }
 | |
|   return devices.splice(index, 1)[0];
 | |
| };
 | |
| Devices.list = function (store, servername) {
 | |
|   if (store[servername] && store[servername].length) {
 | |
|     return store[servername];
 | |
|   }
 | |
|   // There wasn't an exact match so check any of the wildcard domains, sorted longest
 | |
|   // first so the one with the biggest natural match with be found first.
 | |
|   var deviceList = [];
 | |
|   Object.keys(store).filter(function (pattern) {
 | |
|     return pattern[0] === '*' && store[pattern].length;
 | |
|   }).sort(function (a, b) {
 | |
|     return b.length - a.length;
 | |
|   }).some(function (pattern) {
 | |
|     var subPiece = pattern.slice(1);
 | |
|     if (subPiece === servername.slice(-subPiece.length)) {
 | |
|       console.log('"'+servername+'" matches "'+pattern+'"');
 | |
|       deviceList = store[pattern];
 | |
|       return true;
 | |
|     }
 | |
|   });
 | |
| 
 | |
|   return deviceList;
 | |
| };
 | |
| Devices.exist = function (store, servername) {
 | |
|   return !!(Devices.list(store, servername).length);
 | |
| };
 | |
| Devices.next = function (store, servername) {
 | |
|   var devices = Devices.list(store, servername);
 | |
|   var device;
 | |
| 
 | |
|   if (devices._index >= devices.length) {
 | |
|     devices._index = 0;
 | |
|   }
 | |
|   device = devices[devices._index || 0];
 | |
|   devices._index = (devices._index || 0) + 1;
 | |
| 
 | |
|   return device;
 | |
| };
 |