summaryrefslogtreecommitdiff
path: root/packages/backend/src/server/api/stream/channel.ts
diff options
context:
space:
mode:
Diffstat (limited to 'packages/backend/src/server/api/stream/channel.ts')
-rw-r--r--packages/backend/src/server/api/stream/channel.ts62
1 files changed, 62 insertions, 0 deletions
diff --git a/packages/backend/src/server/api/stream/channel.ts b/packages/backend/src/server/api/stream/channel.ts
new file mode 100644
index 0000000000..2824d7d1b8
--- /dev/null
+++ b/packages/backend/src/server/api/stream/channel.ts
@@ -0,0 +1,62 @@
+import autobind from 'autobind-decorator';
+import Connection from '.';
+
+/**
+ * Stream channel
+ */
+export default abstract class Channel {
+ protected connection: Connection;
+ public id: string;
+ public abstract readonly chName: string;
+ public static readonly shouldShare: boolean;
+ public static readonly requireCredential: boolean;
+
+ protected get user() {
+ return this.connection.user;
+ }
+
+ protected get userProfile() {
+ return this.connection.userProfile;
+ }
+
+ protected get following() {
+ return this.connection.following;
+ }
+
+ protected get muting() {
+ return this.connection.muting;
+ }
+
+ protected get blocking() {
+ return this.connection.blocking;
+ }
+
+ protected get followingChannels() {
+ return this.connection.followingChannels;
+ }
+
+ protected get subscriber() {
+ return this.connection.subscriber;
+ }
+
+ constructor(id: string, connection: Connection) {
+ this.id = id;
+ this.connection = connection;
+ }
+
+ @autobind
+ public send(typeOrPayload: any, payload?: any) {
+ const type = payload === undefined ? typeOrPayload.type : typeOrPayload;
+ const body = payload === undefined ? typeOrPayload.body : payload;
+
+ this.connection.sendMessageToWs('channel', {
+ id: this.id,
+ type: type,
+ body: body
+ });
+ }
+
+ public abstract init(params: any): void;
+ public dispose?(): void;
+ public onMessage?(type: string, body: any): void;
+}