summaryrefslogtreecommitdiff
path: root/src/server/api/streaming.ts
diff options
context:
space:
mode:
authorsyuilo <syuilotan@yahoo.co.jp>2018-10-11 18:09:41 +0900
committersyuilo <syuilotan@yahoo.co.jp>2018-10-11 18:09:41 +0900
commit05f9ad11bb51ca932cba7716302924dfaa7aafdd (patch)
tree1a0f914a589cf01d3f7b26919269725222ffaded /src/server/api/streaming.ts
parent10.7.2 (diff)
downloadsharkey-05f9ad11bb51ca932cba7716302924dfaa7aafdd.tar.gz
sharkey-05f9ad11bb51ca932cba7716302924dfaa7aafdd.tar.bz2
sharkey-05f9ad11bb51ca932cba7716302924dfaa7aafdd.zip
Redisがインストールされているときはイベントの共有にRedisのpub/subを使うように
Diffstat (limited to 'src/server/api/streaming.ts')
-rw-r--r--src/server/api/streaming.ts32
1 files changed, 30 insertions, 2 deletions
diff --git a/src/server/api/streaming.ts b/src/server/api/streaming.ts
index a0a219a317..249157e222 100644
--- a/src/server/api/streaming.ts
+++ b/src/server/api/streaming.ts
@@ -1,11 +1,14 @@
import * as http from 'http';
import * as websocket from 'websocket';
+import * as redis from 'redis';
import Xev from 'xev';
import MainStreamConnection from './stream';
import { ParsedUrlQuery } from 'querystring';
import authenticate from './authenticate';
import channels from './stream/channels';
+import { EventEmitter } from 'events';
+import config from '../../config';
module.exports = (server: http.Server) => {
// Init websocket server
@@ -16,11 +19,36 @@ module.exports = (server: http.Server) => {
ws.on('request', async (request) => {
const connection = request.accept();
- const ev = new Xev();
-
const q = request.resourceURL.query as ParsedUrlQuery;
const [user, app] = await authenticate(q.i as string);
+ let ev: EventEmitter;
+
+ if (config.redis) {
+ // Connect to Redis
+ const subscriber = redis.createClient(
+ config.redis.port, config.redis.host);
+
+ subscriber.subscribe('misskey');
+
+ ev = new EventEmitter();
+
+ subscriber.on('message', async (_, data) => {
+ const obj = JSON.parse(data);
+
+ console.log(obj);
+
+ ev.emit(obj.channel, obj.message);
+ });
+
+ connection.once('close', () => {
+ subscriber.unsubscribe();
+ subscriber.quit();
+ });
+ } else {
+ ev = new Xev();
+ }
+
const main = new MainStreamConnection(connection, ev, user, app);
// 後方互換性のため