Ver código fonte

- Moved handling alerts to Queue

Parad0x 5 anos atrás
pai
commit
a00d211bed
2 arquivos alterados com 72 adições e 10 exclusões
  1. 41 0
      app/src/web/AlertQueue.ts
  2. 31 10
      app/src/web/preload.ts

+ 41 - 0
app/src/web/AlertQueue.ts

@@ -0,0 +1,41 @@
+import { PointsRedeemed } from "./TwitchPubSug";
+import { EventEmitter } from "events";
+
+export type AlertElement = {
+    filepath: string,
+    id: string,
+    rewardEvent: PointsRedeemed,
+}
+
+interface Queue<T> {
+    on(event: "add", listener: (element: T)=>void): this;
+    on(event: "remove", listener: (element: T)=>void): this;
+
+    emit(event: "add", element: T): boolean;
+    emit(event: "remove", element: T): boolean;
+}
+
+class Queue<T> extends EventEmitter {
+    private arr: T[] = [];
+
+    first(): T{
+        return this.arr[0];
+    }
+
+    add(el: T){
+        this.arr.push(el);
+        this.emit("add", el);
+    }
+
+    remove(): T{
+        let el = this.arr.shift();
+        this.emit("remove", el)
+        return el;
+    }
+
+    len(){
+        return this.arr.length;
+    }
+}
+
+export default Queue;

+ 31 - 10
app/src/web/preload.ts

@@ -3,6 +3,8 @@ import Twitch from "./TwitchPubSug"
 import { ipcRenderer } from "electron"
 import WebSocketServer from "./WSServer";
 import AlertFront from "./AlertFront";
+import Queue, { AlertElement } from "./AlertQueue";
+import generateID from "./utils/generateid";
 
 let settings = window.settings = new Settings()
 
@@ -11,6 +13,26 @@ const wss = new WebSocketServer();
 
 wss.start();
 
+
+const AlertQueue = new Queue<AlertElement>();
+
+function sendPath(path: string){
+  wss.sendToAll(JSON.stringify([
+    {
+      cmd: "src",
+      src: path
+    },
+    {
+      cmd: "start"
+    }
+  ]));
+}
+
+AlertQueue.on("add", ()=>{
+  let el = AlertQueue.remove();
+  sendPath(el.filepath);
+})
+
 let Alerts: AlertFront | undefined;
 
 // TODO Write validator
@@ -61,16 +83,15 @@ window.addEventListener("DOMContentLoaded", () => {
     for(let key in al){
       if(al.hasOwnProperty(key)){
         if(al[key].rewardtitle === reward.redemption.reward.title){
-          console.log("Trigering:", al[key].rewardtitle);
-          wss.sendToAll(JSON.stringify([
-            {
-              cmd: "src",
-              src: al[key].filepath
-            },
-            {
-              cmd: "start"
-            }
-          ]));
+          let newid = generateID(12);
+          AlertQueue.add({
+            filepath: al[key].filepath,
+            id: newid,
+            rewardEvent: reward
+          })
+
+          // console.log("Trigering:", al[key].rewardtitle);
+          // sendPath(al[key].filepath);
         }
       }
     }