avoid dispatching channel events to all clients
This commit is contained in:
parent
6a6cc1aafd
commit
94192979a8
4 changed files with 20 additions and 11 deletions
|
@ -10,7 +10,7 @@ export default async function databaseInit() {
|
||||||
|
|
||||||
CREATE TABLE IF NOT EXISTS channels(
|
CREATE TABLE IF NOT EXISTS channels(
|
||||||
id SERIAL PRIMARY KEY,
|
id SERIAL PRIMARY KEY,
|
||||||
name VARCHAR(32) UNIQUE NOT NULL,
|
name VARCHAR(32) NOT NULL,
|
||||||
owner_id SERIAL REFERENCES users ON DELETE CASCADE
|
owner_id SERIAL REFERENCES users ON DELETE CASCADE
|
||||||
);
|
);
|
||||||
|
|
||||||
|
|
|
@ -36,6 +36,15 @@ function clientUnsubscribe(ws: WebSocket, dispatchChannel: string) {
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
export function dispatchChannelSubscribe(target: string, dispatchChannel: string) {
|
||||||
|
const set = dispatchChannels.get(target);
|
||||||
|
if (!set) return;
|
||||||
|
|
||||||
|
set.forEach(c => {
|
||||||
|
clientSubscribe(c, dispatchChannel);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
function clientUnsubscribeAll(ws: WebSocket) {
|
function clientUnsubscribeAll(ws: WebSocket) {
|
||||||
if (!ws.state) return;
|
if (!ws.state) return;
|
||||||
|
|
||||||
|
|
|
@ -3,7 +3,7 @@ import { body, param, validationResult } from "express-validator";
|
||||||
import { authenticateRoute } from "../../../auth";
|
import { authenticateRoute } from "../../../auth";
|
||||||
import { query } from "../../../database";
|
import { query } from "../../../database";
|
||||||
import { errors } from "../../../errors";
|
import { errors } from "../../../errors";
|
||||||
import { dispatch } from "../../../gateway";
|
import { dispatch, dispatchChannelSubscribe } from "../../../gateway";
|
||||||
import { GatewayPayloadType } from "../../../gateway/gatewaypayloadtype";
|
import { GatewayPayloadType } from "../../../gateway/gatewaypayloadtype";
|
||||||
|
|
||||||
const router = express.Router();
|
const router = express.Router();
|
||||||
|
@ -31,6 +31,10 @@ router.post(
|
||||||
d: result.rows[0]
|
d: result.rows[0]
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// When a new channel is created, we will currently subscribe every client
|
||||||
|
// on the gateway (this will be changed when the concept of "communities" is added)
|
||||||
|
dispatchChannelSubscribe("*", `channel:${result.rows[0].id}`);
|
||||||
|
|
||||||
res.status(201).send(result.rows[0]);
|
res.status(201).send(result.rows[0]);
|
||||||
}
|
}
|
||||||
);
|
);
|
||||||
|
@ -74,9 +78,7 @@ router.put(
|
||||||
owner_id: permissionCheckResult.rows[0].owner_id
|
owner_id: permissionCheckResult.rows[0].owner_id
|
||||||
};
|
};
|
||||||
|
|
||||||
// TODO: implement per-user channel joining and communities
|
dispatch(`channel:${id}`, {
|
||||||
//dispatch(`channel:${id}`, {
|
|
||||||
dispatch("*", {
|
|
||||||
t: GatewayPayloadType.ChannelUpdate,
|
t: GatewayPayloadType.ChannelUpdate,
|
||||||
d: updatePayload
|
d: updatePayload
|
||||||
});
|
});
|
||||||
|
@ -116,9 +118,7 @@ router.delete(
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// TODO: implement per-user channel joining and communities
|
dispatch(`channel:${id}`, {
|
||||||
//dispatch(`channel:${id}`, {
|
|
||||||
dispatch("*", {
|
|
||||||
t: GatewayPayloadType.ChannelDelete,
|
t: GatewayPayloadType.ChannelDelete,
|
||||||
d: {
|
d: {
|
||||||
id
|
id
|
||||||
|
|
|
@ -28,18 +28,18 @@ content-type: application/json
|
||||||
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MiwidHlwZSI6MSwiaWF0IjoxNjQ5NzAwMTE0LCJleHAiOjE2NDk4NzI5MTR9.EOn8MBHZLCxfU5fHc0ZY2x9p3y-_RdD7X915L1B6Ftc
|
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MiwidHlwZSI6MSwiaWF0IjoxNjQ5NzAwMTE0LCJleHAiOjE2NDk4NzI5MTR9.EOn8MBHZLCxfU5fHc0ZY2x9p3y-_RdD7X915L1B6Ftc
|
||||||
|
|
||||||
{
|
{
|
||||||
"name": "yet another channel"
|
"name": "yet another channelllll"
|
||||||
}
|
}
|
||||||
|
|
||||||
###
|
###
|
||||||
|
|
||||||
PUT http://localhost:3000/api/v1/channels/5 HTTP/1.1
|
PUT http://localhost:3000/api/v1/channels/8 HTTP/1.1
|
||||||
content-type: application/json
|
content-type: application/json
|
||||||
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MiwidHlwZSI6MSwiaWF0IjoxNjQ5NzAwMTE0LCJleHAiOjE2NDk4NzI5MTR9.EOn8MBHZLCxfU5fHc0ZY2x9p3y-_RdD7X915L1B6Ftc
|
Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MiwidHlwZSI6MSwiaWF0IjoxNjQ5NzAwMTE0LCJleHAiOjE2NDk4NzI5MTR9.EOn8MBHZLCxfU5fHc0ZY2x9p3y-_RdD7X915L1B6Ftc
|
||||||
#Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MiwidHlwZSI6MSwiaWF0IjoxNjQ5MjU5NDUwLCJleHAiOjE2NDk0MzIyNTB9.JmF9NujFZnln7A-ynNpeyayGBqmR5poAyACYV6RnSQY
|
#Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpZCI6MiwidHlwZSI6MSwiaWF0IjoxNjQ5MjU5NDUwLCJleHAiOjE2NDk0MzIyNTB9.JmF9NujFZnln7A-ynNpeyayGBqmR5poAyACYV6RnSQY
|
||||||
|
|
||||||
{
|
{
|
||||||
"name": "this is my channel"
|
"name": "this is my channelaaaaaa"
|
||||||
}
|
}
|
||||||
|
|
||||||
###
|
###
|
||||||
|
|
Loading…
Reference in a new issue