Skip to content

Commit 164bcd2

Browse files
committed
Add packet un canceling
1 parent b349c14 commit 164bcd2

File tree

2 files changed

+18
-13
lines changed

2 files changed

+18
-13
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -60,6 +60,7 @@ A function to interact with send packets between a connected client and the serv
6060

6161
- Changing packets: Return the new packet data
6262
- Canceling the packet: Return `false`
63+
- Un-Cancel a packet that was canceled by a previous packet: Return `true`
6364
- Do nothing: Return `undefined`
6465

6566
The returned value can also be wrapped in a promise. The middleware will await the promise result before continuing to process the packet.

src/conn.ts

+17-13
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,6 @@ export class ConnOptions {
2727
toServerMiddleware?: PacketMiddleware[] = [];
2828
}
2929

30-
export interface PacketCanceler {
31-
/** Has property .isCanceled: boolean indicating if the packet has been canceled by another middleware.
32-
* Use `cancel(false)` to un-cancel the packet again.
33-
*/
34-
(unCancel?: boolean): void;
35-
isCanceled: boolean;
36-
}
37-
3830
export interface packetUpdater {
3931
(update?: boolean): void;
4032
isUpdated: boolean;
@@ -61,7 +53,7 @@ export interface PacketMiddleware {
6153
(packetData: PacketData): PacketMiddlewareReturnValue | Promise<PacketMiddlewareReturnValue>;
6254
}
6355

64-
type PacketMiddlewareReturnValue = PacketData | undefined | false;
56+
type PacketMiddlewareReturnValue = PacketData | undefined | false | true;
6557

6658
export class Conn {
6759
options: ConnOptions;
@@ -167,8 +159,14 @@ export class Conn {
167159
} else {
168160
data = funcReturn;
169161
}
170-
isCanceled = data === false;
171-
if (data !== undefined && data !== false) {
162+
if (!isCanceled) { // Wait for the first occurrence
163+
isCanceled = data === false;
164+
} else {
165+
if (data === true) {
166+
isCanceled = false; // Allow following middlewares to un cancel packet that have been canceled already
167+
}
168+
}
169+
if (data !== undefined && data !== false && data !== true) {
172170
currentData = data;
173171
}
174172
}
@@ -225,8 +223,14 @@ export class Conn {
225223
} else {
226224
data = funcReturn;
227225
}
228-
isCanceled = data === false;
229-
if (data !== undefined && data !== false) {
226+
if (!isCanceled) { // Wait for the first occurrence
227+
isCanceled = data === false;
228+
} else {
229+
if (data === true) {
230+
isCanceled = false; // Allow following middlewares to un cancel packet that have been canceled already
231+
}
232+
}
233+
if (data !== undefined && data !== false && data !== true) {
230234
currentData = data;
231235
}
232236
}

0 commit comments

Comments
 (0)