Redis必須に
This commit is contained in:
		
							parent
							
								
									186d7bbfd9
								
							
						
					
					
						commit
						e369031a28
					
				
					 12 changed files with 48 additions and 111 deletions
				
			
		|  | @ -65,10 +65,10 @@ db: | ||||||
| #   ┌─────────────────────┐ | #   ┌─────────────────────┐ | ||||||
| #───┘ Redis configuration └───────────────────────────────────── | #───┘ Redis configuration └───────────────────────────────────── | ||||||
| 
 | 
 | ||||||
| #redis: | redis: | ||||||
| #  host: localhost |   host: localhost | ||||||
| #  port: 6379 |   port: 6379 | ||||||
| #  pass: example-pass |   #pass: example-pass | ||||||
| 
 | 
 | ||||||
| #   ┌─────────────────────────────┐ | #   ┌─────────────────────────────┐ | ||||||
| #───┘ Elasticsearch configuration └───────────────────────────── | #───┘ Elasticsearch configuration └───────────────────────────── | ||||||
|  |  | ||||||
|  | @ -7,7 +7,8 @@ If you encounter any problems with updating, please try the following: | ||||||
| 
 | 
 | ||||||
| 11.0.0 | 11.0.0 | ||||||
| ---------- | ---------- | ||||||
| * データベースがMongoDBからPostgreSQLに変更されました | * **データベースがMongoDBからPostgreSQLに変更されました** | ||||||
|  | * **Redisが必須に** | ||||||
| * アカウントを完全に削除できるように | * アカウントを完全に削除できるように | ||||||
| * ミュート/ブロック時にそのユーザーの投稿のウォッチをすべて解除するように | * ミュート/ブロック時にそのユーザーの投稿のウォッチをすべて解除するように | ||||||
| * フォロー申請数が実際より1すくなくなる問題を修正 | * フォロー申請数が実際より1すくなくなる問題を修正 | ||||||
|  |  | ||||||
|  | @ -24,18 +24,13 @@ Please install and setup these softwares: | ||||||
| #### Dependencies :package: | #### Dependencies :package: | ||||||
| * **[Node.js](https://nodejs.org/en/)** >= 11.7.0 | * **[Node.js](https://nodejs.org/en/)** >= 11.7.0 | ||||||
| * **[PostgreSQL](https://www.postgresql.org/)** >= 10 | * **[PostgreSQL](https://www.postgresql.org/)** >= 10 | ||||||
|  | * **[Redis](https://redis.io/)** | ||||||
| 
 | 
 | ||||||
| ##### Optional | ##### Optional | ||||||
| * [Redis](https://redis.io/) |  | ||||||
|   * Redis is optional, but we strongly recommended to install it |  | ||||||
| * [Elasticsearch](https://www.elastic.co/) - required to enable the search feature | * [Elasticsearch](https://www.elastic.co/) - required to enable the search feature | ||||||
| * [FFmpeg](https://www.ffmpeg.org/) | * [FFmpeg](https://www.ffmpeg.org/) | ||||||
| 
 | 
 | ||||||
| *3.* Setup PostgreSQL | *3.* Install Misskey | ||||||
| ---------------------------------------------------------------- |  | ||||||
| :) |  | ||||||
| 
 |  | ||||||
| *4.* Install Misskey |  | ||||||
| ---------------------------------------------------------------- | ---------------------------------------------------------------- | ||||||
| 1. `su - misskey` Connect to misskey user. | 1. `su - misskey` Connect to misskey user. | ||||||
| 2. `git clone -b master git://github.com/syuilo/misskey.git` Clone the misskey repo from master branch. | 2. `git clone -b master git://github.com/syuilo/misskey.git` Clone the misskey repo from master branch. | ||||||
|  | @ -43,12 +38,12 @@ Please install and setup these softwares: | ||||||
| 4. `git checkout $(git tag -l | grep -Ev -- '-(rc|alpha)\.[0-9]+$' | sort -V | tail -n 1)` Checkout to the [latest release](https://github.com/syuilo/misskey/releases/latest) | 4. `git checkout $(git tag -l | grep -Ev -- '-(rc|alpha)\.[0-9]+$' | sort -V | tail -n 1)` Checkout to the [latest release](https://github.com/syuilo/misskey/releases/latest) | ||||||
| 5. `npm install` Install misskey dependencies. | 5. `npm install` Install misskey dependencies. | ||||||
| 
 | 
 | ||||||
| *5.* Configure Misskey | *4.* Configure Misskey | ||||||
| ---------------------------------------------------------------- | ---------------------------------------------------------------- | ||||||
| 1. `cp .config/example.yml .config/default.yml` Copy the `.config/example.yml` and rename it to `default.yml`. | 1. `cp .config/example.yml .config/default.yml` Copy the `.config/example.yml` and rename it to `default.yml`. | ||||||
| 2. Edit `default.yml` | 2. Edit `default.yml` | ||||||
| 
 | 
 | ||||||
| *6.* Build Misskey | *5.* Build Misskey | ||||||
| ---------------------------------------------------------------- | ---------------------------------------------------------------- | ||||||
| 
 | 
 | ||||||
| Build misskey with the following: | Build misskey with the following: | ||||||
|  | @ -64,13 +59,13 @@ If you're still encountering errors about some modules, use node-gyp: | ||||||
| 3. `node-gyp build` | 3. `node-gyp build` | ||||||
| 4. `NODE_ENV=production npm run build` | 4. `NODE_ENV=production npm run build` | ||||||
| 
 | 
 | ||||||
| *7.* Init DB | *6.* Init DB | ||||||
| ---------------------------------------------------------------- | ---------------------------------------------------------------- | ||||||
| ``` shell | ``` shell | ||||||
| npm run init | npm run init | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| *8.* That is it. | *7.* That is it. | ||||||
| ---------------------------------------------------------------- | ---------------------------------------------------------------- | ||||||
| Well done! Now, you have an environment that run to Misskey. | Well done! Now, you have an environment that run to Misskey. | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -24,18 +24,13 @@ Installez les paquets suivants : | ||||||
| #### Dépendences :package: | #### Dépendences :package: | ||||||
| * **[Node.js](https://nodejs.org/en/)** >= 11.7.0 | * **[Node.js](https://nodejs.org/en/)** >= 11.7.0 | ||||||
| * **[PostgreSQL](https://www.postgresql.org/)** >= 10 | * **[PostgreSQL](https://www.postgresql.org/)** >= 10 | ||||||
|  | * **[Redis](https://redis.io/)** | ||||||
| 
 | 
 | ||||||
| ##### Optionnels | ##### Optionnels | ||||||
| * [Redis](https://redis.io/) |  | ||||||
|   * Redis est optionnel mais nous vous recommandons vivement de l'installer |  | ||||||
| * [Elasticsearch](https://www.elastic.co/) - requis pour pouvoir activer la fonctionnalité de recherche | * [Elasticsearch](https://www.elastic.co/) - requis pour pouvoir activer la fonctionnalité de recherche | ||||||
| * [FFmpeg](https://www.ffmpeg.org/) | * [FFmpeg](https://www.ffmpeg.org/) | ||||||
| 
 | 
 | ||||||
| *3.* Paramètrage de PostgreSQL | *3.* Installation de Misskey | ||||||
| ---------------------------------------------------------------- |  | ||||||
| :) |  | ||||||
| 
 |  | ||||||
| *4.* Installation de Misskey |  | ||||||
| ---------------------------------------------------------------- | ---------------------------------------------------------------- | ||||||
| 1. `su - misskey` Basculez vers l'utilisateur misskey. | 1. `su - misskey` Basculez vers l'utilisateur misskey. | ||||||
| 2. `git clone -b master git://github.com/syuilo/misskey.git` Clonez la branche master du dépôt misskey. | 2. `git clone -b master git://github.com/syuilo/misskey.git` Clonez la branche master du dépôt misskey. | ||||||
|  | @ -43,12 +38,12 @@ Installez les paquets suivants : | ||||||
| 4. `git checkout $(git tag -l | grep -Ev -- '-(rc|alpha)\.[0-9]+$' | sort -V | tail -n 1)` Checkout sur le tag de la [version la plus récente](https://github.com/syuilo/misskey/releases/latest) | 4. `git checkout $(git tag -l | grep -Ev -- '-(rc|alpha)\.[0-9]+$' | sort -V | tail -n 1)` Checkout sur le tag de la [version la plus récente](https://github.com/syuilo/misskey/releases/latest) | ||||||
| 5. `npm install` Installez les dépendances de misskey. | 5. `npm install` Installez les dépendances de misskey. | ||||||
| 
 | 
 | ||||||
| *5.* Création du fichier de configuration | *4.* Création du fichier de configuration | ||||||
| ---------------------------------------------------------------- | ---------------------------------------------------------------- | ||||||
| 1. `cp .config/example.yml .config/default.yml` Copiez le fichier `.config/example.yml` et renommez-le`default.yml`. | 1. `cp .config/example.yml .config/default.yml` Copiez le fichier `.config/example.yml` et renommez-le`default.yml`. | ||||||
| 2. Editez le fichier `default.yml` | 2. Editez le fichier `default.yml` | ||||||
| 
 | 
 | ||||||
| *6.* Construction de Misskey | *5.* Construction de Misskey | ||||||
| ---------------------------------------------------------------- | ---------------------------------------------------------------- | ||||||
| 
 | 
 | ||||||
| Construisez Misskey comme ceci : | Construisez Misskey comme ceci : | ||||||
|  | @ -64,7 +59,7 @@ Si vous rencontrez des erreurs concernant certains modules, utilisez node-gyp: | ||||||
| 3. `node-gyp build` | 3. `node-gyp build` | ||||||
| 4. `NODE_ENV=production npm run build` | 4. `NODE_ENV=production npm run build` | ||||||
| 
 | 
 | ||||||
| *7.* C'est tout. | *6.* C'est tout. | ||||||
| ---------------------------------------------------------------- | ---------------------------------------------------------------- | ||||||
| Excellent ! Maintenant, vous avez un environnement prêt pour lancer Misskey | Excellent ! Maintenant, vous avez un environnement prêt pour lancer Misskey | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -24,25 +24,14 @@ adduser --disabled-password --disabled-login misskey | ||||||
| #### 依存関係 :package: | #### 依存関係 :package: | ||||||
| * **[Node.js](https://nodejs.org/en/)** (11.7.0以上) | * **[Node.js](https://nodejs.org/en/)** (11.7.0以上) | ||||||
| * **[PostgreSQL](https://www.postgresql.org/)** (10以上) | * **[PostgreSQL](https://www.postgresql.org/)** (10以上) | ||||||
|  | * **[Redis](https://redis.io/)** | ||||||
| 
 | 
 | ||||||
| ##### オプション | ##### オプション | ||||||
| * [Redis](https://redis.io/) |  | ||||||
| 	* Redisはオプションですが、インストールすることを強く推奨します。 |  | ||||||
| 	* インストールしなくていいのは、あなたのインスタンスが自分専用のときだけとお考えください。 |  | ||||||
| 	* 具体的には、Redisをインストールしないと、次の事が出来なくなります: |  | ||||||
| 		* Misskeyプロセスを複数起動しての負荷分散 |  | ||||||
| 		* レートリミット |  | ||||||
| 		* ジョブキュー |  | ||||||
| 		* Twitter連携 |  | ||||||
| * [Elasticsearch](https://www.elastic.co/) | * [Elasticsearch](https://www.elastic.co/) | ||||||
| 	* 検索機能を有効にするためにはインストールが必要です。 | 	* 検索機能を有効にするためにはインストールが必要です。 | ||||||
| * [FFmpeg](https://www.ffmpeg.org/) | * [FFmpeg](https://www.ffmpeg.org/) | ||||||
| 
 | 
 | ||||||
| *3.* PostgreSQLの設定 | *3.* Misskeyのインストール | ||||||
| ---------------------------------------------------------------- |  | ||||||
| :) |  | ||||||
| 
 |  | ||||||
| *4.* Misskeyのインストール |  | ||||||
| ---------------------------------------------------------------- | ---------------------------------------------------------------- | ||||||
| 1. `su - misskey` misskeyユーザーを使用 | 1. `su - misskey` misskeyユーザーを使用 | ||||||
| 2. `git clone -b master git://github.com/syuilo/misskey.git` masterブランチからMisskeyレポジトリをクローン | 2. `git clone -b master git://github.com/syuilo/misskey.git` masterブランチからMisskeyレポジトリをクローン | ||||||
|  | @ -50,12 +39,12 @@ adduser --disabled-password --disabled-login misskey | ||||||
| 4. `git checkout $(git tag -l | grep -Ev -- '-(rc|alpha)\.[0-9]+$' | sort -V | tail -n 1)` [最新のリリース](https://github.com/syuilo/misskey/releases/latest)を確認 | 4. `git checkout $(git tag -l | grep -Ev -- '-(rc|alpha)\.[0-9]+$' | sort -V | tail -n 1)` [最新のリリース](https://github.com/syuilo/misskey/releases/latest)を確認 | ||||||
| 5. `npm install` Misskeyの依存パッケージをインストール | 5. `npm install` Misskeyの依存パッケージをインストール | ||||||
| 
 | 
 | ||||||
| *5.* 設定ファイルを作成する | *4.* 設定ファイルを作成する | ||||||
| ---------------------------------------------------------------- | ---------------------------------------------------------------- | ||||||
| 1. `cp .config/example.yml .config/default.yml` `.config/example.yml`をコピーし名前を`default.yml`にする。 | 1. `cp .config/example.yml .config/default.yml` `.config/example.yml`をコピーし名前を`default.yml`にする。 | ||||||
| 2. `default.yml` を編集する。 | 2. `default.yml` を編集する。 | ||||||
| 
 | 
 | ||||||
| *6.* Misskeyのビルド | *5.* Misskeyのビルド | ||||||
| ---------------------------------------------------------------- | ---------------------------------------------------------------- | ||||||
| 
 | 
 | ||||||
| 次のコマンドでMisskeyをビルドしてください: | 次のコマンドでMisskeyをビルドしてください: | ||||||
|  | @ -70,13 +59,13 @@ Debianをお使いであれば、`build-essential`パッケージをインスト | ||||||
| 3. `node-gyp build` | 3. `node-gyp build` | ||||||
| 4. `NODE_ENV=production npm run build` | 4. `NODE_ENV=production npm run build` | ||||||
| 
 | 
 | ||||||
| *7.* データベースを初期化 | *6.* データベースを初期化 | ||||||
| ---------------------------------------------------------------- | ---------------------------------------------------------------- | ||||||
| ``` shell | ``` shell | ||||||
| npm run init | npm run init | ||||||
| ``` | ``` | ||||||
| 
 | 
 | ||||||
| *8.* 以上です! | *7.* 以上です! | ||||||
| ---------------------------------------------------------------- | ---------------------------------------------------------------- | ||||||
| お疲れ様でした。これでMisskeyを動かす準備は整いました。 | お疲れ様でした。これでMisskeyを動かす準備は整いました。 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,7 +1,7 @@ | ||||||
| import * as redis from 'redis'; | import * as redis from 'redis'; | ||||||
| import config from '../config'; | import config from '../config'; | ||||||
| 
 | 
 | ||||||
| export default config.redis ? redis.createClient( | export default redis.createClient( | ||||||
| 	config.redis.port, | 	config.redis.port, | ||||||
| 	config.redis.host, | 	config.redis.host, | ||||||
| 	{ | 	{ | ||||||
|  | @ -9,4 +9,4 @@ export default config.redis ? redis.createClient( | ||||||
| 		prefix: config.redis.prefix, | 		prefix: config.redis.prefix, | ||||||
| 		db: config.redis.db || 0 | 		db: config.redis.db || 0 | ||||||
| 	} | 	} | ||||||
| ) : null; | ); | ||||||
|  |  | ||||||
|  | @ -8,12 +8,6 @@ import Logger from '../../services/logger'; | ||||||
| const logger = new Logger('limiter'); | const logger = new Logger('limiter'); | ||||||
| 
 | 
 | ||||||
| export default (endpoint: IEndpoint, user: User) => new Promise((ok, reject) => { | export default (endpoint: IEndpoint, user: User) => new Promise((ok, reject) => { | ||||||
| 	// Redisがインストールされてない場合は常に許可
 |  | ||||||
| 	if (limiterDB == null) { |  | ||||||
| 		ok(); |  | ||||||
| 		return; |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	const limitation = endpoint.meta.limit!; | 	const limitation = endpoint.meta.limit!; | ||||||
| 
 | 
 | ||||||
| 	const key = limitation.hasOwnProperty('key') | 	const key = limitation.hasOwnProperty('key') | ||||||
|  |  | ||||||
|  | @ -83,8 +83,6 @@ async function getOAuth2() { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| router.get('/connect/discord', async ctx => { | router.get('/connect/discord', async ctx => { | ||||||
| 	if (redis == null) return; |  | ||||||
| 
 |  | ||||||
| 	if (!compareOrigin(ctx)) { | 	if (!compareOrigin(ctx)) { | ||||||
| 		ctx.throw(400, 'invalid origin'); | 		ctx.throw(400, 'invalid origin'); | ||||||
| 		return; | 		return; | ||||||
|  | @ -110,8 +108,6 @@ router.get('/connect/discord', async ctx => { | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| router.get('/signin/discord', async ctx => { | router.get('/signin/discord', async ctx => { | ||||||
| 	if (redis == null) return; |  | ||||||
| 
 |  | ||||||
| 	const sessid = uuid(); | 	const sessid = uuid(); | ||||||
| 
 | 
 | ||||||
| 	const params = { | 	const params = { | ||||||
|  | @ -138,8 +134,6 @@ router.get('/signin/discord', async ctx => { | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| router.get('/dc/cb', async ctx => { | router.get('/dc/cb', async ctx => { | ||||||
| 	if (redis == null) return; |  | ||||||
| 
 |  | ||||||
| 	const userToken = getUserToken(ctx); | 	const userToken = getUserToken(ctx); | ||||||
| 
 | 
 | ||||||
| 	const oauth2 = await getOAuth2(); | 	const oauth2 = await getOAuth2(); | ||||||
|  | @ -160,7 +154,7 @@ router.get('/dc/cb', async ctx => { | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		const { redirect_uri, state } = await new Promise<any>((res, rej) => { | 		const { redirect_uri, state } = await new Promise<any>((res, rej) => { | ||||||
| 			redis!.get(sessid, async (_, state) => { | 			redis.get(sessid, async (_, state) => { | ||||||
| 				res(JSON.parse(state)); | 				res(JSON.parse(state)); | ||||||
| 			}); | 			}); | ||||||
| 		}); | 		}); | ||||||
|  | @ -241,7 +235,7 @@ router.get('/dc/cb', async ctx => { | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		const { redirect_uri, state } = await new Promise<any>((res, rej) => { | 		const { redirect_uri, state } = await new Promise<any>((res, rej) => { | ||||||
| 			redis!.get(userToken, async (_, state) => { | 			redis.get(userToken, async (_, state) => { | ||||||
| 				res(JSON.parse(state)); | 				res(JSON.parse(state)); | ||||||
| 			}); | 			}); | ||||||
| 		}); | 		}); | ||||||
|  |  | ||||||
|  | @ -80,8 +80,6 @@ async function getOath2() { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| router.get('/connect/github', async ctx => { | router.get('/connect/github', async ctx => { | ||||||
| 	if (redis == null) return; |  | ||||||
| 
 |  | ||||||
| 	if (!compareOrigin(ctx)) { | 	if (!compareOrigin(ctx)) { | ||||||
| 		ctx.throw(400, 'invalid origin'); | 		ctx.throw(400, 'invalid origin'); | ||||||
| 		return; | 		return; | ||||||
|  | @ -106,8 +104,6 @@ router.get('/connect/github', async ctx => { | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| router.get('/signin/github', async ctx => { | router.get('/signin/github', async ctx => { | ||||||
| 	if (redis == null) return; |  | ||||||
| 
 |  | ||||||
| 	const sessid = uuid(); | 	const sessid = uuid(); | ||||||
| 
 | 
 | ||||||
| 	const params = { | 	const params = { | ||||||
|  | @ -133,8 +129,6 @@ router.get('/signin/github', async ctx => { | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| router.get('/gh/cb', async ctx => { | router.get('/gh/cb', async ctx => { | ||||||
| 	if (redis == null) return; |  | ||||||
| 
 |  | ||||||
| 	const userToken = getUserToken(ctx); | 	const userToken = getUserToken(ctx); | ||||||
| 
 | 
 | ||||||
| 	const oauth2 = await getOath2(); | 	const oauth2 = await getOath2(); | ||||||
|  | @ -155,7 +149,7 @@ router.get('/gh/cb', async ctx => { | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		const { redirect_uri, state } = await new Promise<any>((res, rej) => { | 		const { redirect_uri, state } = await new Promise<any>((res, rej) => { | ||||||
| 			redis!.get(sessid, async (_, state) => { | 			redis.get(sessid, async (_, state) => { | ||||||
| 				res(JSON.parse(state)); | 				res(JSON.parse(state)); | ||||||
| 			}); | 			}); | ||||||
| 		}); | 		}); | ||||||
|  | @ -222,7 +216,7 @@ router.get('/gh/cb', async ctx => { | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		const { redirect_uri, state } = await new Promise<any>((res, rej) => { | 		const { redirect_uri, state } = await new Promise<any>((res, rej) => { | ||||||
| 			redis!.get(userToken, async (_, state) => { | 			redis.get(userToken, async (_, state) => { | ||||||
| 				res(JSON.parse(state)); | 				res(JSON.parse(state)); | ||||||
| 			}); | 			}); | ||||||
| 		}); | 		}); | ||||||
|  |  | ||||||
|  | @ -79,8 +79,6 @@ async function getTwAuth() { | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| router.get('/connect/twitter', async ctx => { | router.get('/connect/twitter', async ctx => { | ||||||
| 	if (redis == null) return; |  | ||||||
| 
 |  | ||||||
| 	if (!compareOrigin(ctx)) { | 	if (!compareOrigin(ctx)) { | ||||||
| 		ctx.throw(400, 'invalid origin'); | 		ctx.throw(400, 'invalid origin'); | ||||||
| 		return; | 		return; | ||||||
|  | @ -99,8 +97,6 @@ router.get('/connect/twitter', async ctx => { | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| router.get('/signin/twitter', async ctx => { | router.get('/signin/twitter', async ctx => { | ||||||
| 	if (redis == null) return; |  | ||||||
| 
 |  | ||||||
| 	const twAuth = await getTwAuth(); | 	const twAuth = await getTwAuth(); | ||||||
| 	const twCtx = await twAuth!.begin(); | 	const twCtx = await twAuth!.begin(); | ||||||
| 
 | 
 | ||||||
|  | @ -122,8 +118,6 @@ router.get('/signin/twitter', async ctx => { | ||||||
| }); | }); | ||||||
| 
 | 
 | ||||||
| router.get('/tw/cb', async ctx => { | router.get('/tw/cb', async ctx => { | ||||||
| 	if (redis == null) return; |  | ||||||
| 
 |  | ||||||
| 	const userToken = getUserToken(ctx); | 	const userToken = getUserToken(ctx); | ||||||
| 
 | 
 | ||||||
| 	const twAuth = await getTwAuth(); | 	const twAuth = await getTwAuth(); | ||||||
|  | @ -137,7 +131,7 @@ router.get('/tw/cb', async ctx => { | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		const get = new Promise<any>((res, rej) => { | 		const get = new Promise<any>((res, rej) => { | ||||||
| 			redis!.get(sessid, async (_, twCtx) => { | 			redis.get(sessid, async (_, twCtx) => { | ||||||
| 				res(twCtx); | 				res(twCtx); | ||||||
| 			}); | 			}); | ||||||
| 		}); | 		}); | ||||||
|  | @ -170,7 +164,7 @@ router.get('/tw/cb', async ctx => { | ||||||
| 		} | 		} | ||||||
| 
 | 
 | ||||||
| 		const get = new Promise<any>((res, rej) => { | 		const get = new Promise<any>((res, rej) => { | ||||||
| 			redis!.get(userToken, async (_, twCtx) => { | 			redis.get(userToken, async (_, twCtx) => { | ||||||
| 				res(twCtx); | 				res(twCtx); | ||||||
| 			}); | 			}); | ||||||
| 		}); | 		}); | ||||||
|  |  | ||||||
|  | @ -1,7 +1,6 @@ | ||||||
| import * as http from 'http'; | import * as http from 'http'; | ||||||
| import * as websocket from 'websocket'; | import * as websocket from 'websocket'; | ||||||
| import * as redis from 'redis'; | import * as redis from 'redis'; | ||||||
| import Xev from 'xev'; |  | ||||||
| 
 | 
 | ||||||
| import MainStreamConnection from './stream'; | import MainStreamConnection from './stream'; | ||||||
| import { ParsedUrlQuery } from 'querystring'; | import { ParsedUrlQuery } from 'querystring'; | ||||||
|  | @ -23,7 +22,6 @@ module.exports = (server: http.Server) => { | ||||||
| 
 | 
 | ||||||
| 		let ev: EventEmitter; | 		let ev: EventEmitter; | ||||||
| 
 | 
 | ||||||
| 		if (config.redis) { |  | ||||||
| 		// Connect to Redis
 | 		// Connect to Redis
 | ||||||
| 		const subscriber = redis.createClient( | 		const subscriber = redis.createClient( | ||||||
| 			config.redis.port, config.redis.host); | 			config.redis.port, config.redis.host); | ||||||
|  | @ -42,9 +40,6 @@ module.exports = (server: http.Server) => { | ||||||
| 			subscriber.unsubscribe(); | 			subscriber.unsubscribe(); | ||||||
| 			subscriber.quit(); | 			subscriber.quit(); | ||||||
| 		}); | 		}); | ||||||
| 		} else { |  | ||||||
| 			ev = new Xev(); |  | ||||||
| 		} |  | ||||||
| 
 | 
 | ||||||
| 		const main = new MainStreamConnection(connection, ev, user, app); | 		const main = new MainStreamConnection(connection, ev, user, app); | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,34 +1,20 @@ | ||||||
| import redis from '../db/redis'; | import redis from '../db/redis'; | ||||||
| import Xev from 'xev'; |  | ||||||
| import { User } from '../models/entities/user'; | import { User } from '../models/entities/user'; | ||||||
| import { Note } from '../models/entities/note'; | import { Note } from '../models/entities/note'; | ||||||
| import { UserList } from '../models/entities/user-list'; | import { UserList } from '../models/entities/user-list'; | ||||||
| import { ReversiGame } from '../models/entities/games/reversi/game'; | import { ReversiGame } from '../models/entities/games/reversi/game'; | ||||||
| 
 | 
 | ||||||
| class Publisher { | class Publisher { | ||||||
| 	private ev: Xev | null = null; |  | ||||||
| 
 |  | ||||||
| 	constructor() { |  | ||||||
| 		// Redisがインストールされてないときはプロセス間通信を使う
 |  | ||||||
| 		if (redis == null) { |  | ||||||
| 			this.ev = new Xev(); |  | ||||||
| 		} |  | ||||||
| 	} |  | ||||||
| 
 |  | ||||||
| 	private publish = (channel: string, type: string | null, value?: any): void => { | 	private publish = (channel: string, type: string | null, value?: any): void => { | ||||||
| 		const message = type == null ? value : value == null ? | 		const message = type == null ? value : value == null ? | ||||||
| 			{ type: type, body: null } : | 			{ type: type, body: null } : | ||||||
| 			{ type: type, body: value }; | 			{ type: type, body: value }; | ||||||
| 
 | 
 | ||||||
| 		if (this.ev) { | 		redis.publish('misskey', JSON.stringify({ | ||||||
| 			this.ev.emit(channel, message); |  | ||||||
| 		} else { |  | ||||||
| 			redis!.publish('misskey', JSON.stringify({ |  | ||||||
| 			channel: channel, | 			channel: channel, | ||||||
| 			message: message | 			message: message | ||||||
| 		})); | 		})); | ||||||
| 	} | 	} | ||||||
| 	} |  | ||||||
| 
 | 
 | ||||||
| 	public publishMainStream = (userId: User['id'], type: string, value?: any): void => { | 	public publishMainStream = (userId: User['id'], type: string, value?: any): void => { | ||||||
| 		this.publish(`mainStream:${userId}`, type, typeof value === 'undefined' ? null : value); | 		this.publish(`mainStream:${userId}`, type, typeof value === 'undefined' ? null : value); | ||||||
|  |  | ||||||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue