summaryrefslogtreecommitdiff
path: root/src/server/web/app/common/scripts/streaming/home.ts
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/web/app/common/scripts/streaming/home.ts')
-rw-r--r--src/server/web/app/common/scripts/streaming/home.ts57
1 files changed, 57 insertions, 0 deletions
diff --git a/src/server/web/app/common/scripts/streaming/home.ts b/src/server/web/app/common/scripts/streaming/home.ts
new file mode 100644
index 0000000000..ffcf6e5360
--- /dev/null
+++ b/src/server/web/app/common/scripts/streaming/home.ts
@@ -0,0 +1,57 @@
+import * as merge from 'object-assign-deep';
+
+import Stream from './stream';
+import StreamManager from './stream-manager';
+import MiOS from '../../mios';
+
+/**
+ * Home stream connection
+ */
+export class HomeStream extends Stream {
+ constructor(os: MiOS, me) {
+ super(os, '', {
+ i: me.account.token
+ });
+
+ // 最終利用日時を更新するため定期的にaliveメッセージを送信
+ setInterval(() => {
+ this.send({ type: 'alive' });
+ me.account.last_used_at = new Date();
+ }, 1000 * 60);
+
+ // 自分の情報が更新されたとき
+ this.on('i_updated', i => {
+ if (os.debug) {
+ console.log('I updated:', i);
+ }
+ merge(me, i);
+ });
+
+ // トークンが再生成されたとき
+ // このままではAPIが利用できないので強制的にサインアウトさせる
+ this.on('my_token_regenerated', () => {
+ alert('%i18n:common.my-token-regenerated%');
+ os.signout();
+ });
+ }
+}
+
+export class HomeStreamManager extends StreamManager<HomeStream> {
+ private me;
+ private os: MiOS;
+
+ constructor(os: MiOS, me) {
+ super();
+
+ this.me = me;
+ this.os = os;
+ }
+
+ public getConnection() {
+ if (this.connection == null) {
+ this.connection = new HomeStream(this.os, this.me);
+ }
+
+ return this.connection;
+ }
+}