Changing the way Requests work

This commit is contained in:
Fabian Stamm
2019-10-11 09:12:24 +02:00
parent 8b6767c5f9
commit 715b392629
2 changed files with 36 additions and 15 deletions

View File

@ -33,7 +33,7 @@ export class ConnectionManager {
private static async onConnection(socket: WebSocket, req: IncomingMessage) {
Logging.log("New Connection:");
const sendError = (msg: string) => socket.send(JSON.stringify({ ns: "error_msg", args: [msg] }));
const sendError = (error: string) => socket.send(JSON.stringify({ ns: "error_msg", data: { error } }));
const session = new Session();
@ -78,12 +78,14 @@ export class ConnectionManager {
}
const stored = new Map<string, Query>();
const answer = (id: string, data: any, err: boolean = false) => {
socket.send(JSON.stringify({ ns: "message", args: [id, err, data] }));
const answer = (id: string, data: any, error: boolean = false) => {
socket.send(JSON.stringify({ ns: "message", data: { id, error, data } }));
}
const handler = new Map<string, ((...args: any[]) => void)>();
handler.set("query", async (id: string, type: QueryTypes, path: string[], data: any) => {
const handler = new Map<string, ((data: any) => void)>();
type QueryData = { id: string, type: QueryTypes, path: string[], data: any };
handler.set("query", async ({ id, type, path, data }: QueryData) => {
//TODO: Handle case with no id, type, path
Logging.debug(`Request with id '${id}' from type '${type}' and path '${path}' with data`, data)
try {
const perms = db.rules.hasPermission(path, session);
@ -116,7 +118,7 @@ export class ConnectionManager {
let subscriptionID = shortid.generate();
query.subscribe(data, (data) => {
socket.send(JSON.stringify({ ns: "event", args: [subscriptionID, data] }));
socket.send(JSON.stringify({ ns: "event", data: { id: subscriptionID, data } }));
});
stored.set(id, query);
answer(id, subscriptionID);
@ -136,11 +138,16 @@ export class ConnectionManager {
}
})
socket.on("message", (rawData: string) => {
let data: { ns: string, args: any[] } = JSON.parse(rawData);
let h = handler.get(data.ns);
if (h) {
h(...data.args);
socket.on("message", async (rawData: string) => {
try {
let message: { ns: string, data: any } = JSON.parse(rawData);
let h = handler.get(message.ns);
if (h) {
h(message.data);
}
} catch (err) {
Logging.errorMessage("Unknown Error:");
Logging.error(err);
}
})