Merge pull request #157 from ajmar/master

(feat): Allow passing in custom client ID generation function.
This commit is contained in:
Alex Sosnovskiy 2020-03-19 23:11:46 +03:00 committed by GitHub
commit f3bb222609
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
4 changed files with 40 additions and 14 deletions

View File

@ -36,8 +36,13 @@ $> peerjs --port 9000 --key peerjs --path /myapp
Or, create a custom server:
```bash
$> npm install peerjs-server
```
```javascript
const { PeerServer } = require('peer');
import {PeerServer} from 'peerjs-server';
const server = PeerServer({port: 9000, path: '/myapp'});
```
@ -54,8 +59,8 @@ const server = PeerServer({port: 9000, path: '/myapp'});
### Using HTTPS: Simply pass in PEM-encoded certificate and key.
```javascript
const fs = require('fs');
const { PeerServer } = require('peer');
import fs from 'fs';
import {PeerServer} from 'peerjs-server';
const server = PeerServer({
port: 9000,
@ -74,17 +79,32 @@ The option is passed verbatim to the
if it is truthy.
```javascript
const { PeerServer } = require('peer');
import {PeerServer} from 'peerjs-server';
const server = PeerServer({port: 9000, path: '/myapp', proxied: true});
```
### Custom client ID generation
You can specify a custom function to use to generate client IDs.
```javascript
const genRandomId = () => {
// Original generation algorithm
return (Math.random().toString(36) + '0000000000000000000').substr(2, 16);
}
const server = PeerServer({port: 9000, path: '/myapp', proxied: true, genRandomId: genRandomId });
```
### Combining with existing express app
```javascript
const express = require('express');
const app = express();
const { ExpressPeerServer } = require('peer');
import express from 'express';
import {ExpressPeerServer} from 'peerjs-server';
const app = express();
app.get('/', (req, res, next) => { res.send('Hello world!'); });
// =======
@ -102,7 +122,9 @@ app.use(options.path, peerserver);
// == OR ==
const server = require('http').createServer(app);
import http from 'http';
const server = http.createServer(app);
const peerserver = ExpressPeerServer(server, options);
app.use(options.path, peerserver);

View File

@ -10,7 +10,7 @@ export default ({ config, realm }: {
// Retrieve guaranteed random ID.
app.get("/id", (_, res: express.Response) => {
res.contentType("html");
res.send(realm.generateClientId());
res.send(realm.generateClientId(config.genRandomId));
});
// Get a list of all peers for a key, enabled by the `allowDiscovery` flag.

View File

@ -20,7 +20,7 @@ export interface IRealm {
clearMessageQueue(id: string): void;
generateClientId(): string;
generateClientId(genRandomId?: () => string): string;
}
export class Realm implements IRealm {
@ -69,11 +69,14 @@ export class Realm implements IRealm {
this.messageQueues.delete(id);
}
public generateClientId(): string {
let clientId = uuidv4();
public generateClientId(genRandomId?: () => string): string {
const _genRandomId = genRandomId ? genRandomId : uuidv4;
let clientId = _genRandomId();
while (this.getClientById(clientId)) {
clientId = uuidv4();
clientId = _genRandomId();
}
return clientId;

View File

@ -4,9 +4,10 @@ import { Client } from '../../src/models/client';
describe('Realm', () => {
describe('#generateClientId', () => {
it('should generate a 36-character UUID', () => {
it('should generate a 36-character UUID, or return function value', () => {
const realm = new Realm();
expect(realm.generateClientId().length).to.eq(36);
expect(realm.generateClientId(() => 'abcd')).to.eq('abcd');
});
});