Merge pull request #157 from ajmar/master
(feat): Allow passing in custom client ID generation function.
This commit is contained in:
commit
f3bb222609
38
README.md
38
README.md
@ -36,8 +36,13 @@ $> peerjs --port 9000 --key peerjs --path /myapp
|
|||||||
|
|
||||||
Or, create a custom server:
|
Or, create a custom server:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
$> npm install peerjs-server
|
||||||
|
```
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
const { PeerServer } = require('peer');
|
import {PeerServer} from 'peerjs-server';
|
||||||
|
|
||||||
const server = PeerServer({port: 9000, path: '/myapp'});
|
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.
|
### Using HTTPS: Simply pass in PEM-encoded certificate and key.
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
const fs = require('fs');
|
import fs from 'fs';
|
||||||
const { PeerServer } = require('peer');
|
import {PeerServer} from 'peerjs-server';
|
||||||
|
|
||||||
const server = PeerServer({
|
const server = PeerServer({
|
||||||
port: 9000,
|
port: 9000,
|
||||||
@ -74,17 +79,32 @@ The option is passed verbatim to the
|
|||||||
if it is truthy.
|
if it is truthy.
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
const { PeerServer } = require('peer');
|
import {PeerServer} from 'peerjs-server';
|
||||||
|
|
||||||
const server = PeerServer({port: 9000, path: '/myapp', proxied: true});
|
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
|
### Combining with existing express app
|
||||||
|
|
||||||
```javascript
|
```javascript
|
||||||
const express = require('express');
|
import express from 'express';
|
||||||
const app = express();
|
import {ExpressPeerServer} from 'peerjs-server';
|
||||||
const { ExpressPeerServer } = require('peer');
|
|
||||||
|
|
||||||
|
const app = express();
|
||||||
app.get('/', (req, res, next) => { res.send('Hello world!'); });
|
app.get('/', (req, res, next) => { res.send('Hello world!'); });
|
||||||
|
|
||||||
// =======
|
// =======
|
||||||
@ -102,7 +122,9 @@ app.use(options.path, peerserver);
|
|||||||
|
|
||||||
// == OR ==
|
// == OR ==
|
||||||
|
|
||||||
const server = require('http').createServer(app);
|
import http from 'http';
|
||||||
|
|
||||||
|
const server = http.createServer(app);
|
||||||
const peerserver = ExpressPeerServer(server, options);
|
const peerserver = ExpressPeerServer(server, options);
|
||||||
|
|
||||||
app.use(options.path, peerserver);
|
app.use(options.path, peerserver);
|
||||||
|
@ -10,7 +10,7 @@ export default ({ config, realm }: {
|
|||||||
// Retrieve guaranteed random ID.
|
// Retrieve guaranteed random ID.
|
||||||
app.get("/id", (_, res: express.Response) => {
|
app.get("/id", (_, res: express.Response) => {
|
||||||
res.contentType("html");
|
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.
|
// Get a list of all peers for a key, enabled by the `allowDiscovery` flag.
|
||||||
|
@ -20,7 +20,7 @@ export interface IRealm {
|
|||||||
|
|
||||||
clearMessageQueue(id: string): void;
|
clearMessageQueue(id: string): void;
|
||||||
|
|
||||||
generateClientId(): string;
|
generateClientId(genRandomId?: () => string): string;
|
||||||
}
|
}
|
||||||
|
|
||||||
export class Realm implements IRealm {
|
export class Realm implements IRealm {
|
||||||
@ -69,11 +69,14 @@ export class Realm implements IRealm {
|
|||||||
this.messageQueues.delete(id);
|
this.messageQueues.delete(id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public generateClientId(): string {
|
public generateClientId(genRandomId?: () => string): string {
|
||||||
let clientId = uuidv4();
|
|
||||||
|
const _genRandomId = genRandomId ? genRandomId : uuidv4;
|
||||||
|
|
||||||
|
let clientId = _genRandomId();
|
||||||
|
|
||||||
while (this.getClientById(clientId)) {
|
while (this.getClientById(clientId)) {
|
||||||
clientId = uuidv4();
|
clientId = _genRandomId();
|
||||||
}
|
}
|
||||||
|
|
||||||
return clientId;
|
return clientId;
|
||||||
|
@ -4,9 +4,10 @@ import { Client } from '../../src/models/client';
|
|||||||
|
|
||||||
describe('Realm', () => {
|
describe('Realm', () => {
|
||||||
describe('#generateClientId', () => {
|
describe('#generateClientId', () => {
|
||||||
it('should generate a 36-character UUID', () => {
|
it('should generate a 36-character UUID, or return function value', () => {
|
||||||
const realm = new Realm();
|
const realm = new Realm();
|
||||||
expect(realm.generateClientId().length).to.eq(36);
|
expect(realm.generateClientId().length).to.eq(36);
|
||||||
|
expect(realm.generateClientId(() => 'abcd')).to.eq('abcd');
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user