فهرست منبع

Added optional parameter to use a custom function to generate IDs.

The third parameter passed to PeerServer or ExpressPeerServer can
optionally be a function that returns any string value, which will be
used as the client ID. Checking whether the ID is already taken is not
to be handled by the function.

For instance:

ExpressPeerServer(,,() => {
  return 'abc';
})
Eden Tyler-Moss 5 سال پیش
والد
کامیت
2552e9d5f1
4فایلهای تغییر یافته به همراه16 افزوده شده و 13 حذف شده
  1. 2 2
      src/api/index.js
  2. 3 2
      src/api/v1/public/index.js
  3. 6 6
      src/index.js
  4. 5 3
      src/models/realm.js

+ 2 - 2
src/api/index.js

@@ -3,7 +3,7 @@ const cors = require('cors');
 const bodyParser = require('body-parser');
 const publicContent = require('../../app.json');
 
-module.exports = ({ config, realm, messageHandler }) => {
+module.exports = ({ config, realm, messageHandler, randomId }) => {
   const authMiddleware = require('./middleware/auth')({ config, realm });
 
   const app = express.Router();
@@ -16,7 +16,7 @@ module.exports = ({ config, realm, messageHandler }) => {
     res.send(publicContent);
   });
 
-  app.use('/:key', require('./v1/public')({ config, realm }));
+  app.use('/:key', require('./v1/public')({ config, realm, randomId }));
   app.use('/:key/:id/:token', authMiddleware, jsonParser, require('./v1/calls')({ realm, messageHandler }));
 
   return app;

+ 3 - 2
src/api/v1/public/index.js

@@ -1,12 +1,13 @@
 const express = require('express');
 
-module.exports = ({ config, realm }) => {
+module.exports = ({ config, realm, randomId }) => {
   const app = express.Router();
 
   // Retrieve guaranteed random ID.
   app.get('/id', (req, res) => {
     res.contentType = 'text/html';
-    res.send(realm.generateClientId());
+    console.error('src/api/v1/public/index.js', randomId);
+    res.send(realm.generateClientId(randomId));
   });
 
   // Get a list of all peers for a key, enabled by the `allowDiscovery` flag.

+ 6 - 6
src/index.js

@@ -6,11 +6,11 @@ const defaultConfig = require('../config');
 const WebSocketServer = require('./services/webSocketServer');
 const Realm = require('./models/realm');
 
-const init = ({ app, server, options }) => {
+const init = ({ app, server, options, randomId }) => {
   const config = options;
   const realm = new Realm();
   const messageHandler = require('./messageHandler')({ realm });
-  const api = require('./api')({ config, realm, messageHandler });
+  const api = require('./api')({ config, realm, messageHandler, randomId });
 
   const { startMessagesExpiration } = require('./services/messagesExpire')({ realm, config, messageHandler });
   const checkBrokenConnections = require('./services/checkBrokenConnections')({
@@ -62,7 +62,7 @@ const init = ({ app, server, options }) => {
   checkBrokenConnections.start();
 };
 
-function ExpressPeerServer(server, options) {
+function ExpressPeerServer(server, options, randomId) {
   const app = express();
 
   options = {
@@ -80,13 +80,13 @@ function ExpressPeerServer(server, options) {
         'can\'t start PeerServer');
     }
 
-    init({ app, server, options });
+    init({ app, server, options, randomId });
   });
 
   return app;
 }
 
-function PeerServer(options = {}, callback) {
+function PeerServer(options = {}, callback, randomId) {
   const app = express();
 
   options = {
@@ -114,7 +114,7 @@ function PeerServer(options = {}, callback) {
     server = http.createServer(app);
   }
 
-  const peerjs = ExpressPeerServer(server, options);
+  const peerjs = ExpressPeerServer(server, options, randomId);
   app.use(peerjs);
 
   if (callback) {

+ 5 - 3
src/models/realm.js

@@ -42,10 +42,12 @@ class Realm {
     this._messageQueues.delete(id);
   }
 
-  generateClientId () {
-    const randomId = () => (Math.random().toString(36) + '0000000000000000000').substr(2, 16);
+  generateClientId (_randomId) {
+    const randomId = typeof _randomId === 'function' ?
+      () => _randomId :
+      () => (Math.random().toString(36) + '0000000000000000000').substr(2, 16);
 
-    let clientId = randomId();
+    let clientId = randomId(randomId)();
 
     while (this.getClientById(clientId)) {
       clientId = randomId();