From 170c52eefa3d234da0d69d7f4ddc26a342f978c6 Mon Sep 17 00:00:00 2001 From: Jerko Steiner Date: Fri, 13 Mar 2020 22:03:46 +0100 Subject: [PATCH] Add store factory --- README.md | 2 +- src/server/config.ts | 10 ++++++++++ src/server/store/factory.ts | 17 +++++++++++++++++ 3 files changed, 28 insertions(+), 1 deletion(-) create mode 100644 src/server/store/factory.ts diff --git a/README.md b/README.md index 543de5a..8633139 100644 --- a/README.md +++ b/README.md @@ -187,7 +187,7 @@ For more details, see here: - [x] Reduce production build size by removing Pug. (Fixed in 2d14e5f c743f19) - [x] Add ability to share files (Fixed in 3877893) - [ ] Enable node cluster support (to scale vertically). -- [ ] Add Socket.IO support for Redis (to scale horizontally). +- [x] Add Socket.IO support for Redis (to scale horizontally). - [ ] Generate public keys for each client, and allow each client to accept, deny, and remember allowed/denied connections to specific peers. - [ ] Add support for browser push notifications diff --git a/src/server/config.ts b/src/server/config.ts index f2cafae..38b319e 100644 --- a/src/server/config.ts +++ b/src/server/config.ts @@ -21,6 +21,16 @@ export interface Config { cert: string key: string } + store?: StoreConfig +} + +export type StoreConfig = { + host: string + port: number + prefix: string + type: 'redis' +} | { + type: 'memory' } const cfg = readConfig() diff --git a/src/server/store/factory.ts b/src/server/store/factory.ts new file mode 100644 index 0000000..d85f3af --- /dev/null +++ b/src/server/store/factory.ts @@ -0,0 +1,17 @@ +import { MemoryStore } from './memory' +import { RedisStore } from './redis' +import Redis from 'ioredis' +import { StoreConfig } from '../config' +import { Store } from './store' + +export function createStore(config: StoreConfig = { type: 'memory'}): Store { + switch (config.type) { + case 'redis': + return new RedisStore(new Redis({ + host: config.host, + port: config.port, + }), config.prefix) + default: + return new MemoryStore() + } +}