| 162 | //TODO reload function that replaces API with virgin one. |
| 163 | //TODO server/client API tracker in RPC |
| 164 | function load() { |
| 165 | if (!loaded) { |
| 166 | var addons = [], skipped = []; |
| 167 | |
| 168 | // load addon modules |
| 169 | api.require.forEach(['socketstream-*','socketstream.*'],function(mod,id) { |
| 170 | if (typeof mod === 'function') { |
| 171 | try { |
| 172 | mod(api); |
| 173 | addons.push(id); |
| 174 | } catch(ex) { |
| 175 | debug('Failed to load '+id+'. ',ex); |
| 176 | } |
| 177 | } else { |
| 178 | skipped.push(id); |
| 179 | } |
| 180 | }); |
| 181 | debug('Addons: '+ |
| 182 | addons.length? addons.join(' + ') + ' Loaded. ':' None. '+ |
| 183 | skipped.length? skipped.join(' + ') + ' Skipped. ':''); |
| 184 | |
| 185 | // load assets in cache |
| 186 | http.load(); |
| 187 | |
| 188 | // Load Client Asset Manager |
| 189 | client.load(); |
| 190 | |
| 191 | // Load internal and project responders |
| 192 | api.server.responders = exports.responders.load(); |
| 193 | |
| 194 | api.server.eventTransport = publish.transport.load(); |
| 195 | |
| 196 | // Extend the internal API with a publish object you can call from your own server-side code |
| 197 | api.publish = publish.api(api.server.eventTransport); |
| 198 | |
| 199 | // Bind responders to websocket |
| 200 | ws.load(api.server.responders, api.server.eventTransport); |
| 201 | |
| 202 | debug('API loaded.'); |
| 203 | } |
| 204 | loaded = true; |
| 205 | } |
| 206 | |
| 207 | function unload() { |
| 208 | loaded = false; |