Skip to content

Commit ead69b5

Browse files
committed
feat: wip event handlers
1 parent f2425b7 commit ead69b5

File tree

7 files changed

+106
-2
lines changed

7 files changed

+106
-2
lines changed

pnpm-lock.yaml

+10
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.
+26
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,26 @@
1+
import { customAlphabet } from "nanoid";
2+
3+
function uniqueId() {
4+
return customAlphabet("1234567890abcdef", 21);
5+
}
6+
7+
export function netEventController<TResponse>(
8+
event: string,
9+
...args: any[]
10+
): Promise<TResponse> {
11+
// For now we just assume the world is perfect and we don't need to handle errors
12+
// This will be fixed
13+
return new Promise((resolve) => {
14+
const eventId = uniqueId();
15+
const listenName = `${event}:${eventId}`;
16+
17+
emitNet("removeEventListener", listenName, ...args);
18+
19+
const eventListener = (data: TResponse) => {
20+
removeEventListener(listenName, eventListener);
21+
resolve(data);
22+
};
23+
24+
onNet(listenName, eventListener);
25+
});
26+
}

src/client/handler/client-player.ts

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
import { netEventController } from "../event/netEventController";
2+
3+
type OpenPhoneData = {
4+
message: string;
5+
};
6+
7+
// asume this is an exported function
8+
async function nuiProxyController(data: any) {
9+
const resp = await netEventController<OpenPhoneData>("openPhone", data);
10+
11+
console.log(resp.message);
12+
}

src/client/package.json

+2-1
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
},
1313
"dependencies": {
1414
"@citizenfx/client": "^2.0.4170-1",
15-
"@types/node": "^22.5.2"
15+
"@types/node": "^22.5.2",
16+
"nanoid": "^5.0.7"
1617
}
1718
}

src/server/event/context.ts

+12
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
export type Context = {
2+
source: number;
3+
};
4+
5+
// We might be able to add a few more things here, like the phone number for example
6+
export function getEventContext(): Context {
7+
const _source = global.source;
8+
9+
return {
10+
source: _source,
11+
};
12+
}

src/server/event/eventController.ts

+23-1
Original file line numberDiff line numberDiff line change
@@ -1 +1,23 @@
1-
export function eventController() {}
1+
import { type Context, getEventContext } from "./context";
2+
3+
type Event<T = unknown> = {
4+
body: T;
5+
ctx: Context;
6+
};
7+
8+
export function eventController<TData, TResponse = void>(
9+
event: string,
10+
callback: (req: Event<TData>) => Promise<TResponse>,
11+
) {
12+
onNet(event, async (responseEvent: string, data: TData) => {
13+
const ctx = getEventContext();
14+
15+
// TODO: Add status codes or something to the response
16+
const response = await callback({
17+
body: data,
18+
ctx: ctx,
19+
});
20+
21+
return emitNet(responseEvent, ctx.source, response);
22+
});
23+
}

src/server/handler/player-handler.ts

+21
Original file line numberDiff line numberDiff line change
@@ -1 +1,22 @@
1+
import { eventController } from "../event/eventController";
12

3+
type PlayerTest = {
4+
name: string;
5+
phoneNumber: string;
6+
};
7+
8+
type PlayerTestResponse = {
9+
message: string;
10+
};
11+
12+
eventController<PlayerTest, PlayerTestResponse>(
13+
"player:test",
14+
async ({ ctx, body }) => {
15+
console.log(ctx.source);
16+
console.log(body.name, body.phoneNumber);
17+
18+
return {
19+
message: "Hello, World!",
20+
};
21+
},
22+
);

0 commit comments

Comments
 (0)