Compare commits
21
Commits
v0.2.0
...
d56475d08a
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
d56475d08a | ||
|
|
d8df9fa7ef | ||
|
|
d9b917c024 | ||
|
|
cbbf4f38e6 | ||
|
|
3bbf1e2209 | ||
|
|
9fe9bad840 | ||
|
|
588bb42d04 | ||
|
|
3a4fe19df0 | ||
|
|
c8e5bdf375 | ||
|
|
a675114b41 | ||
|
|
54781d50b2 | ||
|
|
de33fe4763 | ||
|
|
d3d75b338d | ||
|
|
04eb724073 | ||
|
|
e4950b6c99 | ||
|
|
8f856d929f | ||
|
|
ee8210f140 | ||
|
|
74c0215366 | ||
|
|
19b1b770f6 | ||
|
|
96c92f9d19 | ||
|
|
57d80d41d6 |
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@entityseven/rage-fw-cef",
|
"name": "@entityseven/rage-fw-browser",
|
||||||
"version": "0.1.0",
|
"version": "0.1.2",
|
||||||
"main": "dist/index.js",
|
"main": "dist/index.js",
|
||||||
"types": "dist/src/index.d.ts",
|
"types": "dist/src/index.d.ts",
|
||||||
"files": [
|
"files": [
|
||||||
@@ -11,11 +11,11 @@
|
|||||||
"build": "tsup"
|
"build": "tsup"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"rage-fw-rpc": "workspace:^"
|
"@entityseven/rage-fw-rpc": "latest"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@ragempcommunity/types-cef": "^2.1.8",
|
"@ragempcommunity/types-cef": "^2.1.8",
|
||||||
"rage-fw-shared-types": "workspace:^"
|
"@entityseven/rage-fw-shared-types": "workspace:^"
|
||||||
},
|
},
|
||||||
"description": "RageFW CEF side",
|
"description": "RageFW CEF side",
|
||||||
"keywords": [],
|
"keywords": [],
|
||||||
@@ -0,0 +1,96 @@
|
|||||||
|
import { Helper } from './helper'
|
||||||
|
import { rpc } from './rpc'
|
||||||
|
import type * as T from '../types'
|
||||||
|
import {
|
||||||
|
RageFW_BrowserEvent,
|
||||||
|
RageFW_ClientEvent,
|
||||||
|
RageFW_ServerEvent,
|
||||||
|
} from '../types'
|
||||||
|
|
||||||
|
export class Browser extends Helper {
|
||||||
|
constructor() {
|
||||||
|
super()
|
||||||
|
}
|
||||||
|
|
||||||
|
set debugLogs(debug: boolean) {
|
||||||
|
this.debugLogs_ = debug
|
||||||
|
}
|
||||||
|
|
||||||
|
set customLogger(
|
||||||
|
fn: (method: string, eventName: string, ...args: unknown[]) => unknown,
|
||||||
|
) {
|
||||||
|
this.customLogger_ = fn
|
||||||
|
}
|
||||||
|
|
||||||
|
public register<EventName extends T.RageFW_BrowserEvent>(
|
||||||
|
eventName: EventName,
|
||||||
|
callback: T.RageFW_BrowserCallback<EventName>,
|
||||||
|
): Browser {
|
||||||
|
this.log_('register', eventName, callback)
|
||||||
|
|
||||||
|
rpc.register<
|
||||||
|
Parameters<typeof callback>,
|
||||||
|
ReturnType<typeof callback>,
|
||||||
|
EventName
|
||||||
|
>(eventName, async (...data) => await callback(...data))
|
||||||
|
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
public unregister<EventName extends T.RageFW_BrowserEvent>(
|
||||||
|
eventName: EventName,
|
||||||
|
): Browser {
|
||||||
|
rpc.unregister<EventName>(eventName)
|
||||||
|
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
public async trigger<EventName extends T.RageFW_BrowserEvent>(
|
||||||
|
eventName: EventName,
|
||||||
|
...args: T._BrowserEventHasArgs<EventName> extends true
|
||||||
|
? [T.RageFW_BrowserArgs<EventName>]
|
||||||
|
: []
|
||||||
|
): Promise<T.RageFW_BrowserReturn<EventName>> {
|
||||||
|
this.log_('[RPC](trigger):', eventName, ...args)
|
||||||
|
|
||||||
|
return await rpc.call<
|
||||||
|
typeof args,
|
||||||
|
EventName,
|
||||||
|
T.RageFW_BrowserReturn<EventName>
|
||||||
|
>(eventName, args)
|
||||||
|
}
|
||||||
|
|
||||||
|
public async triggerServer<EventName extends T.RageFW_ServerEvent>(
|
||||||
|
eventName: EventName,
|
||||||
|
...args: T._ServerEventHasArgs<EventName> extends true
|
||||||
|
? [T.RageFW_ServerArgs<EventName>]
|
||||||
|
: []
|
||||||
|
): Promise<T.RageFW_ServerReturn<EventName>> {
|
||||||
|
this.log_('[RPC](triggerServer):', eventName, ...args)
|
||||||
|
|
||||||
|
return await rpc.callServer<
|
||||||
|
typeof args,
|
||||||
|
EventName,
|
||||||
|
T.RageFW_ServerReturn<EventName>
|
||||||
|
>(eventName, args)
|
||||||
|
}
|
||||||
|
|
||||||
|
public async triggerClient<EventName extends T.RageFW_ClientEvent>(
|
||||||
|
eventName: EventName,
|
||||||
|
...args: T._ClientEventHasArgs<EventName> extends true
|
||||||
|
? [T.RageFW_ClientArgs<EventName>]
|
||||||
|
: []
|
||||||
|
): Promise<T.RageFW_ClientReturn<EventName>> {
|
||||||
|
this.log_('[RPC](triggerClient):', eventName, ...args)
|
||||||
|
|
||||||
|
return await rpc.callClient<
|
||||||
|
typeof args,
|
||||||
|
EventName,
|
||||||
|
T.RageFW_ClientReturn<EventName>
|
||||||
|
>(eventName, args)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// new Browser()
|
||||||
|
// .register('customCefEvent', async (a, b) => true)
|
||||||
|
// .triggerServer('customServerEvent', ['', 1])
|
||||||
@@ -0,0 +1,21 @@
|
|||||||
|
export class Helper {
|
||||||
|
protected debugLogs_: boolean = false
|
||||||
|
protected customLogger_:
|
||||||
|
| undefined
|
||||||
|
| ((method: string, eventName: string, ...args: unknown[]) => unknown) =
|
||||||
|
undefined
|
||||||
|
|
||||||
|
constructor() {}
|
||||||
|
|
||||||
|
protected log_(
|
||||||
|
method: string,
|
||||||
|
eventName: string,
|
||||||
|
...args: unknown[]
|
||||||
|
): void {
|
||||||
|
if (this.customLogger_) {
|
||||||
|
this.customLogger_(method, eventName, ...args)
|
||||||
|
} else if (this.debugLogs_) {
|
||||||
|
console.log('[RPC](' + method + ')', eventName + ':', ...args)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -0,0 +1,3 @@
|
|||||||
|
export * from './browser'
|
||||||
|
export * from './helper'
|
||||||
|
export * from './rpc'
|
||||||
@@ -0,0 +1,7 @@
|
|||||||
|
import { Rpc } from '@entityseven/rage-fw-rpc'
|
||||||
|
|
||||||
|
export const rpc = new Rpc({
|
||||||
|
forceBrowserDevMode:
|
||||||
|
process.env.RageFW_forceBrowserDevMode === 'true' ?? false,
|
||||||
|
debugLogs: false,
|
||||||
|
})
|
||||||
@@ -0,0 +1,9 @@
|
|||||||
|
import { Browser, rpc } from './core'
|
||||||
|
|
||||||
|
export const fw = {
|
||||||
|
event: new Browser(),
|
||||||
|
rpc,
|
||||||
|
}
|
||||||
|
;(async () => {
|
||||||
|
await fw.event.triggerClient('cefReady')
|
||||||
|
})()
|
||||||
@@ -0,0 +1,40 @@
|
|||||||
|
import type { RageFW_ICustomBrowserEvent } from '@entityseven/rage-fw-shared-types'
|
||||||
|
|
||||||
|
export type { RageFW_ICustomBrowserEvent } from '@entityseven/rage-fw-shared-types'
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Union of all available browser event names
|
||||||
|
* These only include custom events
|
||||||
|
*/
|
||||||
|
export type RageFW_BrowserEvent = keyof RageFW_ICustomBrowserEvent
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Array of arguments of an event you pass as a generic
|
||||||
|
* These only include custom browser events
|
||||||
|
*/
|
||||||
|
export type RageFW_BrowserArgs<K extends RageFW_BrowserEvent> = Parameters<
|
||||||
|
RageFW_ICustomBrowserEvent[K]
|
||||||
|
>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Return type of event you pass as a generic
|
||||||
|
* These only include custom browser events
|
||||||
|
*/
|
||||||
|
export type RageFW_BrowserReturn<K extends RageFW_BrowserEvent> = ReturnType<
|
||||||
|
RageFW_ICustomBrowserEvent[K]
|
||||||
|
>
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Callback (function) of event you pass as a generic
|
||||||
|
* These only include custom browser events
|
||||||
|
*/
|
||||||
|
export type RageFW_BrowserCallback<K extends keyof RageFW_ICustomBrowserEvent> =
|
||||||
|
(...args: RageFW_BrowserArgs<K>) => Promise<RageFW_BrowserReturn<K>>
|
||||||
|
|
||||||
|
export type _BrowserEventHasArgs<
|
||||||
|
EventName extends keyof RageFW_ICustomBrowserEvent,
|
||||||
|
> = keyof RageFW_ICustomBrowserEvent extends never
|
||||||
|
? false
|
||||||
|
: Parameters<RageFW_ICustomBrowserEvent[EventName]>[0] extends undefined
|
||||||
|
? false
|
||||||
|
: true
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
import type { RageFW_ICustomClientEvent } from 'rage-fw-shared-types'
|
import type { RageFW_ICustomClientEvent } from '@entityseven/rage-fw-shared-types'
|
||||||
|
|
||||||
export type { RageFW_ICustomClientEvent } from 'rage-fw-shared-types'
|
export type { RageFW_ICustomClientEvent } from '@entityseven/rage-fw-shared-types'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Union of all available client event names
|
* Union of all available client event names
|
||||||
@@ -1,3 +1,3 @@
|
|||||||
export * from './cef'
|
export * from './browser'
|
||||||
export * from './client'
|
export * from './client'
|
||||||
export * from './server'
|
export * from './server'
|
||||||
@@ -1,6 +1,6 @@
|
|||||||
import type { RageFW_ICustomServerEvent } from 'rage-fw-shared-types'
|
import type { RageFW_ICustomServerEvent } from '@entityseven/rage-fw-shared-types'
|
||||||
|
|
||||||
export type { RageFW_ICustomServerEvent } from 'rage-fw-shared-types'
|
export type { RageFW_ICustomServerEvent } from '@entityseven/rage-fw-shared-types'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Union of all available server event names
|
* Union of all available server event names
|
||||||
@@ -1,113 +0,0 @@
|
|||||||
import { Rpc } from 'rage-fw-rpc'
|
|
||||||
|
|
||||||
import type {
|
|
||||||
_CefEventHasArgs,
|
|
||||||
_ClientEventHasArgs,
|
|
||||||
_ServerEventHasArgs,
|
|
||||||
RageFW_CefArgs,
|
|
||||||
RageFW_CefCallback,
|
|
||||||
RageFW_CefReturn,
|
|
||||||
RageFW_ClientArgs,
|
|
||||||
RageFW_ClientReturn,
|
|
||||||
RageFW_ICustomCefEvent,
|
|
||||||
RageFW_ICustomClientEvent,
|
|
||||||
RageFW_ICustomServerEvent,
|
|
||||||
RageFW_ServerArgs,
|
|
||||||
RageFW_ServerReturn,
|
|
||||||
} from './types'
|
|
||||||
|
|
||||||
class Cef {
|
|
||||||
private _debugMode: boolean = false
|
|
||||||
private _rpc: Rpc = new Rpc()
|
|
||||||
|
|
||||||
constructor() {}
|
|
||||||
|
|
||||||
set debug(debug: boolean) {
|
|
||||||
this._debugMode = debug
|
|
||||||
}
|
|
||||||
|
|
||||||
get rpc(): Rpc {
|
|
||||||
return this._rpc
|
|
||||||
}
|
|
||||||
|
|
||||||
public register<EventName extends keyof RageFW_ICustomCefEvent>(
|
|
||||||
eventName: EventName,
|
|
||||||
callback: RageFW_CefCallback<EventName>,
|
|
||||||
): void {
|
|
||||||
if (this._debugMode) {
|
|
||||||
console.log('[RPC](register):', eventName, callback)
|
|
||||||
}
|
|
||||||
|
|
||||||
if ('mp' in window) {
|
|
||||||
this._rpc.register(eventName, callback)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public async trigger<EventName extends keyof RageFW_ICustomCefEvent>(
|
|
||||||
eventName: EventName,
|
|
||||||
...args: _CefEventHasArgs<EventName> extends true
|
|
||||||
? [RageFW_CefArgs<EventName>]
|
|
||||||
: []
|
|
||||||
): Promise<RageFW_CefReturn<EventName>> {
|
|
||||||
if (this._debugMode) {
|
|
||||||
console.log('[RPC](trigger):', eventName, ...args)
|
|
||||||
}
|
|
||||||
|
|
||||||
if ('mp' in window) {
|
|
||||||
return await this._rpc.call(eventName, args)
|
|
||||||
}
|
|
||||||
|
|
||||||
return Promise.reject(
|
|
||||||
'RageFW was started in window which does not contain MP',
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
public async triggerServer<
|
|
||||||
EventName extends keyof RageFW_ICustomServerEvent,
|
|
||||||
>(
|
|
||||||
eventName: EventName,
|
|
||||||
...args: _ServerEventHasArgs<EventName> extends true
|
|
||||||
? [RageFW_ServerArgs<EventName>]
|
|
||||||
: []
|
|
||||||
): Promise<RageFW_ServerReturn<EventName>> {
|
|
||||||
if (this._debugMode) {
|
|
||||||
console.log('[RPC](triggerServer):', eventName, ...args)
|
|
||||||
}
|
|
||||||
|
|
||||||
if ('mp' in window) {
|
|
||||||
return await this._rpc.callServer(eventName, args)
|
|
||||||
}
|
|
||||||
|
|
||||||
return Promise.reject(
|
|
||||||
'RageFW was started in window which does not contain MP',
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
public async triggerClient<
|
|
||||||
EventName extends keyof RageFW_ICustomClientEvent,
|
|
||||||
>(
|
|
||||||
eventName: EventName,
|
|
||||||
...args: _ClientEventHasArgs<EventName> extends true
|
|
||||||
? [RageFW_ClientArgs<EventName>]
|
|
||||||
: []
|
|
||||||
): Promise<RageFW_ClientReturn<EventName>> {
|
|
||||||
if (this._debugMode) {
|
|
||||||
console.log('[RPC](triggerClient):', eventName, ...args)
|
|
||||||
}
|
|
||||||
|
|
||||||
if ('mp' in window) {
|
|
||||||
return await this._rpc.callClient(eventName, args)
|
|
||||||
}
|
|
||||||
|
|
||||||
return Promise.reject(
|
|
||||||
'RageFW was started in window which does not contain MP',
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
export const fw = {
|
|
||||||
event: new Cef(),
|
|
||||||
}
|
|
||||||
;(async () => {
|
|
||||||
await fw.event.triggerClient('cefReady')
|
|
||||||
})()
|
|
||||||
@@ -1,40 +0,0 @@
|
|||||||
import { RageFW_ICustomCefEvent } from 'rage-fw-shared-types'
|
|
||||||
|
|
||||||
export { RageFW_ICustomCefEvent } from 'rage-fw-shared-types'
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Union of all available cef event names
|
|
||||||
* These only include custom events
|
|
||||||
*/
|
|
||||||
export type RageFW_CefEvent = keyof RageFW_ICustomCefEvent
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Array of arguments of an event you pass as a generic
|
|
||||||
* These only include custom cef events
|
|
||||||
*/
|
|
||||||
export type RageFW_CefArgs<K extends RageFW_CefEvent> = Parameters<
|
|
||||||
RageFW_ICustomCefEvent[K]
|
|
||||||
>
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Return type of event you pass as a generic
|
|
||||||
* These only include custom cef events
|
|
||||||
*/
|
|
||||||
export type RageFW_CefReturn<K extends RageFW_CefEvent> = ReturnType<
|
|
||||||
RageFW_ICustomCefEvent[K]
|
|
||||||
>
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Callback (function) of event you pass as a generic
|
|
||||||
* These only include custom cef events
|
|
||||||
*/
|
|
||||||
export type RageFW_CefCallback<K extends keyof RageFW_ICustomCefEvent> = (
|
|
||||||
args: RageFW_CefArgs<K>,
|
|
||||||
) => Promise<RageFW_CefReturn<K>>
|
|
||||||
|
|
||||||
export type _CefEventHasArgs<EventName extends keyof RageFW_ICustomCefEvent> =
|
|
||||||
keyof RageFW_ICustomCefEvent extends never
|
|
||||||
? false
|
|
||||||
: Parameters<RageFW_ICustomCefEvent[EventName]>[0] extends undefined
|
|
||||||
? false
|
|
||||||
: true
|
|
||||||
+1
-1
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@entityseven/create-rage-fw",
|
"name": "@entityseven/create-rage-fw",
|
||||||
"version": "0.1.0",
|
"version": "0.1.1",
|
||||||
"bin": {
|
"bin": {
|
||||||
"rage-fw": "dist/index.js"
|
"rage-fw": "dist/index.js"
|
||||||
},
|
},
|
||||||
|
|||||||
+1
-1
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
To make you life easier while using RageFW we created a basic CLI. At the moment automation we have only works via [pnpm](https://pnpm.io/)
|
To make you life easier while using RageFW we created a basic CLI. At the moment automation we have only works via [pnpm](https://pnpm.io/)
|
||||||
|
|
||||||
``pnpm create rage-fw@latest``
|
``pnpm create @entityseven/rage-fw@latest``
|
||||||
|
|
||||||
## TL;DR
|
## TL;DR
|
||||||
- ``Initialize new project`` - create new template project
|
- ``Initialize new project`` - create new template project
|
||||||
|
|||||||
+3
-3
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@entityseven/rage-fw-client",
|
"name": "@entityseven/rage-fw-client",
|
||||||
"version": "0.1.0",
|
"version": "0.1.2",
|
||||||
"main": "dist/index.js",
|
"main": "dist/index.js",
|
||||||
"types": "dist/src/index.d.ts",
|
"types": "dist/src/index.d.ts",
|
||||||
"files": [
|
"files": [
|
||||||
@@ -11,11 +11,11 @@
|
|||||||
"build": "tsup"
|
"build": "tsup"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"rage-fw-rpc": "workspace:^"
|
"@entityseven/rage-fw-rpc": "latest"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@ragempcommunity/types-client": "^2.1.8",
|
"@ragempcommunity/types-client": "^2.1.8",
|
||||||
"rage-fw-shared-types": "workspace:^"
|
"@entityseven/rage-fw-shared-types": "workspace:^"
|
||||||
},
|
},
|
||||||
"description": "RageFW Client side",
|
"description": "RageFW Client side",
|
||||||
"keywords": [],
|
"keywords": [],
|
||||||
|
|||||||
+20
-24
@@ -1,33 +1,29 @@
|
|||||||
import { Rpc } from 'rage-fw-rpc'
|
import { rpc } from './rpc'
|
||||||
|
import type * as T from '../types'
|
||||||
import type {
|
|
||||||
RageFW_ClientArgs,
|
|
||||||
RageFW_ClientCallback,
|
|
||||||
RageFW_ClientEvent,
|
|
||||||
} from '../types'
|
|
||||||
|
|
||||||
export class Client {
|
export class Client {
|
||||||
private _rpc: Rpc = new Rpc()
|
public register<EventName extends T.RageFW_ClientEvent>(
|
||||||
|
eventName: EventName,
|
||||||
|
callback: T.RageFW_ClientCallback<EventName>,
|
||||||
|
): Client {
|
||||||
|
rpc.register<
|
||||||
|
Parameters<typeof callback>,
|
||||||
|
ReturnType<typeof callback>,
|
||||||
|
EventName
|
||||||
|
>(eventName, async (...data) => await callback(...data))
|
||||||
|
|
||||||
get rpc(): Rpc {
|
return this
|
||||||
return this._rpc
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public register<EventName extends RageFW_ClientEvent>(
|
public unregister<EventName extends T.RageFW_ClientEvent>(
|
||||||
eventName: EventName,
|
eventName: EventName,
|
||||||
callback: RageFW_ClientCallback<EventName>,
|
): Client {
|
||||||
): void {
|
rpc.unregister<EventName>(eventName)
|
||||||
this._rpc.register(
|
|
||||||
eventName,
|
|
||||||
async (data: RageFW_ClientArgs<EventName>) => {
|
|
||||||
return await callback(data)
|
|
||||||
},
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
public unregister<EventName extends RageFW_ClientEvent>(
|
return this
|
||||||
eventName: EventName,
|
|
||||||
): void {
|
|
||||||
this._rpc.unregister(eventName)
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// new Client()
|
||||||
|
// .register('customClientEvent', async (a, b) => true)
|
||||||
|
// .unregister('customClientEvent')
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
export * from './client'
|
export * from './client'
|
||||||
export * from './player'
|
|
||||||
export * from './logger'
|
export * from './logger'
|
||||||
|
export * from './player'
|
||||||
|
export * from './rpc'
|
||||||
|
|||||||
+43
-39
@@ -1,53 +1,57 @@
|
|||||||
import { Rpc } from 'rage-fw-rpc'
|
import { rpc } from './rpc'
|
||||||
import type { RageFW_ICustomClientEvent } from 'rage-fw-shared-types'
|
import type * as T from '../types'
|
||||||
|
|
||||||
import {
|
|
||||||
_CefEventHasArgs,
|
|
||||||
_ClientEventHasArgs,
|
|
||||||
_ServerEventHasArgs,
|
|
||||||
RageFW_CefArgs,
|
|
||||||
RageFW_CefEvent,
|
|
||||||
RageFW_CefReturn,
|
|
||||||
RageFW_ClientArgs,
|
|
||||||
RageFW_ClientReturn,
|
|
||||||
RageFW_ClientServerEvent,
|
|
||||||
RageFW_ClientServerArgs,
|
|
||||||
RageFW_ClientServerReturn,
|
|
||||||
} from '../types'
|
|
||||||
|
|
||||||
export class Player {
|
export class Player {
|
||||||
private _rpc: Rpc = new Rpc()
|
private _browser: BrowserMp | undefined = undefined
|
||||||
public browser: BrowserMp | undefined
|
|
||||||
|
|
||||||
get rpc(): Rpc {
|
set browser(browser: BrowserMp) {
|
||||||
return this._rpc
|
this._browser = browser
|
||||||
}
|
rpc.browser = browser
|
||||||
public trigger<EventName extends keyof RageFW_ICustomClientEvent>(
|
|
||||||
eventName: EventName,
|
|
||||||
...args: _ClientEventHasArgs<EventName> extends true
|
|
||||||
? [RageFW_ClientArgs<EventName>]
|
|
||||||
: []
|
|
||||||
): Promise<RageFW_ClientReturn<EventName>> {
|
|
||||||
return this._rpc.call(eventName, args)
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public triggerServer<EventName extends RageFW_ClientServerEvent>(
|
public async trigger<EventName extends keyof T.RageFW_ICustomClientEvent>(
|
||||||
eventName: EventName,
|
eventName: EventName,
|
||||||
...args: _ServerEventHasArgs<EventName> extends true
|
...args: T._ClientEventHasArgs<EventName> extends true
|
||||||
? [RageFW_ClientServerArgs<EventName>]
|
? [T.RageFW_ClientArgs<EventName>]
|
||||||
: []
|
: []
|
||||||
): Promise<RageFW_ClientServerReturn<EventName>> {
|
): Promise<T.RageFW_ClientReturn<EventName>> {
|
||||||
return this._rpc.callServer(eventName, args)
|
return await rpc.call<
|
||||||
|
typeof args,
|
||||||
|
EventName,
|
||||||
|
T.RageFW_ClientReturn<EventName>
|
||||||
|
>(eventName, args)
|
||||||
}
|
}
|
||||||
|
|
||||||
public triggerBrowser<EventName extends RageFW_CefEvent>(
|
public async triggerServer<EventName extends T.RageFW_ServerEvent>(
|
||||||
eventName: EventName,
|
eventName: EventName,
|
||||||
...args: _CefEventHasArgs<EventName> extends true
|
...args: T._ServerEventHasArgs<EventName> extends true
|
||||||
? [RageFW_CefArgs<EventName>]
|
? [T.RageFW_ServerArgs<EventName>]
|
||||||
: []
|
: []
|
||||||
): Promise<RageFW_CefReturn<EventName>> {
|
): Promise<T.RageFW_ClientServerReturn<EventName>> {
|
||||||
if (!this.browser)
|
return await rpc.callServer<
|
||||||
|
typeof args,
|
||||||
|
EventName,
|
||||||
|
T.RageFW_ClientServerReturn<EventName>
|
||||||
|
>(eventName, args)
|
||||||
|
}
|
||||||
|
|
||||||
|
public async triggerBrowser<EventName extends T.RageFW_BrowserEvent>(
|
||||||
|
eventName: EventName,
|
||||||
|
...args: T._BrowserEventHasArgs<EventName> extends true
|
||||||
|
? [T.RageFW_BrowserArgs<EventName>]
|
||||||
|
: []
|
||||||
|
): Promise<T.RageFW_BrowserReturn<EventName>> {
|
||||||
|
if (!this._browser)
|
||||||
throw new Error('You need to initialize browser first')
|
throw new Error('You need to initialize browser first')
|
||||||
return this._rpc.callBrowser(this.browser, eventName, args)
|
|
||||||
|
return await rpc.callBrowser<
|
||||||
|
typeof args,
|
||||||
|
EventName,
|
||||||
|
T.RageFW_BrowserReturn<EventName>
|
||||||
|
>(eventName, args)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// new Player().trigger('customClientEvent', ['', 1])
|
||||||
|
// new Player().triggerServer('customServerEvent', ['', 1])
|
||||||
|
// new Player().triggerBrowser('customCefEvent', ['', 1])
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
import { Rpc } from '@entityseven/rage-fw-rpc'
|
||||||
|
|
||||||
|
export const rpc = new Rpc({
|
||||||
|
debugLogs: false,
|
||||||
|
})
|
||||||
+2
-1
@@ -1,4 +1,4 @@
|
|||||||
import { Client, Logger, Player } from './core'
|
import { Client, Logger, Player, rpc } from './core'
|
||||||
|
|
||||||
export const fw = {
|
export const fw = {
|
||||||
event: new Client(),
|
event: new Client(),
|
||||||
@@ -6,4 +6,5 @@ export const fw = {
|
|||||||
system: {
|
system: {
|
||||||
log: new Logger(),
|
log: new Logger(),
|
||||||
},
|
},
|
||||||
|
rpc,
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,20 +1,29 @@
|
|||||||
/// <reference types="@ragempcommunity/types-client" />
|
/// <reference types="@ragempcommunity/types-client" />
|
||||||
|
|
||||||
import type { RageFW_ICustomCefEvent } from 'rage-fw-shared-types'
|
import type { RageFW_ICustomBrowserEvent } from '@entityseven/rage-fw-shared-types'
|
||||||
|
|
||||||
export type RageFW_CefEvent = keyof RageFW_ICustomCefEvent
|
/**
|
||||||
|
* Union of all available browser event names callable from client
|
||||||
|
* These only include custom events
|
||||||
|
*/
|
||||||
|
export type RageFW_BrowserEvent = keyof RageFW_ICustomBrowserEvent
|
||||||
|
|
||||||
export type RageFW_CefArgs<K extends RageFW_CefEvent> = Parameters<
|
/**
|
||||||
RageFW_ICustomCefEvent[K]
|
* Array of arguments for an event, name of which you pass as a generic
|
||||||
|
* These only include custom events
|
||||||
|
*/
|
||||||
|
export type RageFW_BrowserArgs<K extends RageFW_BrowserEvent> = Parameters<
|
||||||
|
RageFW_ICustomBrowserEvent[K]
|
||||||
>
|
>
|
||||||
|
|
||||||
export type RageFW_CefReturn<K extends RageFW_CefEvent> = ReturnType<
|
export type RageFW_BrowserReturn<K extends RageFW_BrowserEvent> = ReturnType<
|
||||||
RageFW_ICustomCefEvent[K]
|
RageFW_ICustomBrowserEvent[K]
|
||||||
>
|
>
|
||||||
|
|
||||||
export type _CefEventHasArgs<EventName extends keyof RageFW_ICustomCefEvent> =
|
export type _BrowserEventHasArgs<
|
||||||
keyof RageFW_ICustomCefEvent extends never
|
EventName extends keyof RageFW_ICustomBrowserEvent,
|
||||||
|
> = keyof RageFW_ICustomBrowserEvent extends never
|
||||||
? false
|
? false
|
||||||
: Parameters<RageFW_ICustomCefEvent[EventName]>[0] extends undefined
|
: Parameters<RageFW_ICustomBrowserEvent[EventName]>[0] extends undefined
|
||||||
? false
|
? false
|
||||||
: true
|
: true
|
||||||
|
|||||||
+17
-10
@@ -1,6 +1,8 @@
|
|||||||
/// <reference types="@ragempcommunity/types-client" />
|
/// <reference types="@ragempcommunity/types-client" />
|
||||||
|
|
||||||
import type { RageFW_ICustomClientEvent } from 'rage-fw-shared-types'
|
import type { RageFW_ICustomClientEvent } from '@entityseven/rage-fw-shared-types'
|
||||||
|
|
||||||
|
export type { RageFW_ICustomClientEvent } from '@entityseven/rage-fw-shared-types'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Union of all available client event names
|
* Union of all available client event names
|
||||||
@@ -21,23 +23,28 @@ export type RageFW_ClientArgs<K extends RageFW_ClientEvent> =
|
|||||||
? Parameters<IClientEvents[K]>
|
? Parameters<IClientEvents[K]>
|
||||||
: never
|
: never
|
||||||
|
|
||||||
/**
|
|
||||||
* Callback (function) for an event, name of which you pass as a generic
|
|
||||||
* These only include custom events
|
|
||||||
*/
|
|
||||||
export type RageFW_ClientCallback<K extends RageFW_ClientEvent> = (
|
|
||||||
args: RageFW_ClientArgs<K>,
|
|
||||||
) => Promise<RageFW_ClientReturn<K>>
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Return type for an event, name of which you pass as a generic
|
* Return type for an event, name of which you pass as a generic
|
||||||
* These only include custom events
|
* These include custom and system events
|
||||||
*/
|
*/
|
||||||
export type RageFW_ClientReturn<K extends RageFW_ClientEvent> =
|
export type RageFW_ClientReturn<K extends RageFW_ClientEvent> =
|
||||||
K extends keyof RageFW_ICustomClientEvent
|
K extends keyof RageFW_ICustomClientEvent
|
||||||
? ReturnType<RageFW_ICustomClientEvent[K]>
|
? ReturnType<RageFW_ICustomClientEvent[K]>
|
||||||
|
: K extends keyof IClientEvents
|
||||||
|
? ReturnType<IClientEvents[K]>
|
||||||
: void
|
: void
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Callback (function) for an event, name of which you pass as a generic
|
||||||
|
* These include custom and system events
|
||||||
|
*/
|
||||||
|
export type RageFW_ClientCallback<K extends RageFW_ClientEvent> = (
|
||||||
|
...args: RageFW_ClientArgs<K>
|
||||||
|
) => Promise<RageFW_ClientReturn<K>>
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
export type _ClientEventHasArgs<
|
export type _ClientEventHasArgs<
|
||||||
EventName extends keyof RageFW_ICustomClientEvent,
|
EventName extends keyof RageFW_ICustomClientEvent,
|
||||||
> = keyof RageFW_ICustomClientEvent extends never
|
> = keyof RageFW_ICustomClientEvent extends never
|
||||||
|
|||||||
@@ -3,19 +3,19 @@
|
|||||||
import type {
|
import type {
|
||||||
RageFW_ICustomClientEvent,
|
RageFW_ICustomClientEvent,
|
||||||
RageFW_ICustomServerEvent,
|
RageFW_ICustomServerEvent,
|
||||||
} from 'rage-fw-shared-types'
|
} from '@entityseven/rage-fw-shared-types'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Union of all available server event names callable from client
|
* Union of all available server event names callable from client
|
||||||
* These only include custom events
|
* These only include custom events
|
||||||
*/
|
*/
|
||||||
export type RageFW_ClientServerEvent = keyof RageFW_ICustomServerEvent
|
export type RageFW_ServerEvent = keyof RageFW_ICustomServerEvent
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Array of arguments for an event, name of which you pass as a generic
|
* Array of arguments for an event, name of which you pass as a generic
|
||||||
* These only include custom events
|
* These only include custom events
|
||||||
*/
|
*/
|
||||||
export type RageFW_ClientServerArgs<K extends RageFW_ClientServerEvent> =
|
export type RageFW_ServerArgs<K extends RageFW_ServerEvent> =
|
||||||
K extends keyof RageFW_ICustomServerEvent
|
K extends keyof RageFW_ICustomServerEvent
|
||||||
? Parameters<RageFW_ICustomServerEvent[K]>
|
? Parameters<RageFW_ICustomServerEvent[K]>
|
||||||
: never
|
: never
|
||||||
@@ -24,7 +24,7 @@ export type RageFW_ClientServerArgs<K extends RageFW_ClientServerEvent> =
|
|||||||
* Return type for an event, name of which you pass as a generic
|
* Return type for an event, name of which you pass as a generic
|
||||||
* These only include custom events
|
* These only include custom events
|
||||||
*/
|
*/
|
||||||
export type RageFW_ClientServerReturn<K extends RageFW_ClientServerEvent> =
|
export type RageFW_ClientServerReturn<K extends RageFW_ServerEvent> =
|
||||||
K extends keyof RageFW_ICustomServerEvent
|
K extends keyof RageFW_ICustomServerEvent
|
||||||
? ReturnType<RageFW_ICustomServerEvent[K]>
|
? ReturnType<RageFW_ICustomServerEvent[K]>
|
||||||
: never
|
: never
|
||||||
|
|||||||
+1
-1
@@ -1,5 +1,5 @@
|
|||||||
{
|
{
|
||||||
"$schema": "node_modules/lerna/schemas/lerna-schema.json",
|
"$schema": "node_modules/lerna/schemas/lerna-schema.json",
|
||||||
"version": "0.2.0",
|
"version": "0.2.5",
|
||||||
"npmClient": "pnpm"
|
"npmClient": "pnpm"
|
||||||
}
|
}
|
||||||
|
|||||||
+2
-1
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"private": true,
|
"private": true,
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"publish": "pnpm build && lerna publish --force-publish",
|
"publish": "lerna publish --force-publish",
|
||||||
"build": "lerna run build",
|
"build": "lerna run build",
|
||||||
"lint": "eslint --c .eslintrc.yaml --ext .ts client/ server/ shared-types/",
|
"lint": "eslint --c .eslintrc.yaml --ext .ts client/ server/ shared-types/",
|
||||||
|
|
||||||
@@ -17,6 +17,7 @@
|
|||||||
"@ragempcommunity/types-server": "^2.1.8",
|
"@ragempcommunity/types-server": "^2.1.8",
|
||||||
"@typescript-eslint/eslint-plugin": "^7.13.0",
|
"@typescript-eslint/eslint-plugin": "^7.13.0",
|
||||||
"@typescript-eslint/parser": "^7.13.0",
|
"@typescript-eslint/parser": "^7.13.0",
|
||||||
|
"@types/node": "^22.8.1",
|
||||||
"eslint": "^8.56.0",
|
"eslint": "^8.56.0",
|
||||||
"lerna": "^8.1.3",
|
"lerna": "^8.1.3",
|
||||||
"prettier": "^3.3.1",
|
"prettier": "^3.3.1",
|
||||||
|
|||||||
Generated
+1329
-4323
File diff suppressed because it is too large
Load Diff
+1
-3
@@ -1,7 +1,5 @@
|
|||||||
packages:
|
packages:
|
||||||
- "server"
|
- "server"
|
||||||
- "client"
|
- "client"
|
||||||
- "cef"
|
- "browser"
|
||||||
- "rpc"
|
|
||||||
- "cli"
|
|
||||||
- "shared-types"
|
- "shared-types"
|
||||||
@@ -13,7 +13,7 @@ You can find out more about our CLI [here](https://git.entityseven.com/entitysev
|
|||||||
|
|
||||||
At the moment automation we have only works via [pnpm](https://pnpm.io/). To scaffold a basic project with minor settings you can use our CLI:
|
At the moment automation we have only works via [pnpm](https://pnpm.io/). To scaffold a basic project with minor settings you can use our CLI:
|
||||||
|
|
||||||
``pnpm create rage-fw``
|
``pnpm create @entityseven/rage-fw``
|
||||||
|
|
||||||
This will give you a few options, among them, you can find ``Initialize new project``. Use that option to scaffold a new project for yourself using the preferred frontend framework
|
This will give you a few options, among them, you can find ``Initialize new project``. Use that option to scaffold a new project for yourself using the preferred frontend framework
|
||||||
|
|
||||||
|
|||||||
+3
-2
@@ -1,7 +1,7 @@
|
|||||||
{
|
{
|
||||||
"name": "@entityseven/rage-fw-rpc",
|
"name": "@entityseven/rage-fw-rpc",
|
||||||
"description": "Rage FW RPC",
|
"description": "Rage FW RPC",
|
||||||
"version": "0.2.0",
|
"version": "0.2.5",
|
||||||
"scripts": {
|
"scripts": {
|
||||||
"build": "tsup",
|
"build": "tsup",
|
||||||
"start": "npx ./dist create"
|
"start": "npx ./dist create"
|
||||||
@@ -37,5 +37,6 @@
|
|||||||
"url": "https://github.com/SashaGoncharov19"
|
"url": "https://github.com/SashaGoncharov19"
|
||||||
}
|
}
|
||||||
],
|
],
|
||||||
"license": "MIT"
|
"license": "MIT",
|
||||||
|
"gitHead": "04eb7240735c4a0e4855ebabbe8d5b326819fa76"
|
||||||
}
|
}
|
||||||
|
|||||||
+9
-4
@@ -14,12 +14,17 @@ yarn add rage-fw-rpc
|
|||||||
|
|
||||||
Import installed package and initialize rpc:
|
Import installed package and initialize rpc:
|
||||||
```ts
|
```ts
|
||||||
// lib/rpc.js
|
// lib/rpc.js
|
||||||
|
|
||||||
import { Rpc } from 'rage-fw-rpc'
|
import { Rpc } from 'rage-fw-rpc'
|
||||||
export const rpc = new Rpc(/* options */)
|
export const rpc = new Rpc(/* options */)
|
||||||
```
|
```
|
||||||
|
|
||||||
|
# Motivation
|
||||||
|
The idea was to create an extensible package, with various features to simplify the development process and provide as much comfort as possible. It should also be using similar architecture as the framework it was specially built for
|
||||||
|
|
||||||
|
Inspired by usage of [rage-rpc](https://github.com/micaww/rage-rpc)
|
||||||
|
|
||||||
# Features
|
# Features
|
||||||
- Type-safe events via [TS generics](https://www.typescriptlang.org/docs/handbook/2/generics.html), avoiding type wrappers
|
- Type-safe events via [TS generics](https://www.typescriptlang.org/docs/handbook/2/generics.html), avoiding type wrappers
|
||||||
- Built-in logging options for each environment
|
- Built-in logging options for each environment
|
||||||
@@ -28,7 +33,7 @@ Import installed package and initialize rpc:
|
|||||||
- Actual human-readable errors
|
- Actual human-readable errors
|
||||||
|
|
||||||
# Docs
|
# Docs
|
||||||
*Extended version with details coming soon*
|
## [Extended version available here](https://git.entityseven.com/entityseven/rage-framework/wiki/RPC%400.2.5)
|
||||||
|
|
||||||
## register
|
## register
|
||||||
Registers a callback function for a specified event
|
Registers a callback function for a specified event
|
||||||
|
|||||||
+3
-3
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "@entityseven/rage-fw-server",
|
"name": "@entityseven/rage-fw-server",
|
||||||
"version": "0.1.0",
|
"version": "0.1.2",
|
||||||
"main": "dist/index.js",
|
"main": "dist/index.js",
|
||||||
"types": "dist/src/index.d.ts",
|
"types": "dist/src/index.d.ts",
|
||||||
"files": [
|
"files": [
|
||||||
@@ -11,11 +11,11 @@
|
|||||||
"build": "tsup"
|
"build": "tsup"
|
||||||
},
|
},
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"rage-fw-rpc": "workspace:^"
|
"@entityseven/rage-fw-rpc": "latest"
|
||||||
},
|
},
|
||||||
"peerDependencies": {
|
"peerDependencies": {
|
||||||
"@ragempcommunity/types-server": "^2.1.8",
|
"@ragempcommunity/types-server": "^2.1.8",
|
||||||
"rage-fw-shared-types": "workspace:^"
|
"@entityseven/rage-fw-shared-types": "workspace:^"
|
||||||
},
|
},
|
||||||
"description": "RageFW Server side",
|
"description": "RageFW Server side",
|
||||||
"keywords": [],
|
"keywords": [],
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
export * from './player'
|
|
||||||
export * from './server'
|
|
||||||
export * from './logger'
|
export * from './logger'
|
||||||
|
export * from './player'
|
||||||
|
export * from './rpc'
|
||||||
|
export * from './server'
|
||||||
|
|||||||
+15
-28
@@ -1,40 +1,27 @@
|
|||||||
import { Rpc } from 'rage-fw-rpc'
|
import { rpc } from './rpc'
|
||||||
|
import type * as T from '../types'
|
||||||
import type {
|
|
||||||
_CefEventHasArgs,
|
|
||||||
_ClientEventHasArgs,
|
|
||||||
RageFW_CefArgs,
|
|
||||||
RageFW_CefEvent,
|
|
||||||
RageFW_CefReturn,
|
|
||||||
RageFW_ClientEvent,
|
|
||||||
RageFW_ServerClientArgs,
|
|
||||||
RageFW_ServerClientReturn,
|
|
||||||
} from '../types'
|
|
||||||
|
|
||||||
export class Player {
|
export class Player {
|
||||||
private _rpc: Rpc = new Rpc()
|
public async triggerClient<EventName extends T.RageFW_ClientEvent>(
|
||||||
|
|
||||||
get rpc(): Rpc {
|
|
||||||
return this._rpc
|
|
||||||
}
|
|
||||||
|
|
||||||
public triggerClient<EventName extends RageFW_ClientEvent>(
|
|
||||||
player: PlayerMp,
|
player: PlayerMp,
|
||||||
eventName: EventName,
|
eventName: EventName,
|
||||||
...args: _ClientEventHasArgs<EventName> extends true
|
...args: T._ClientEventHasArgs<EventName> extends true
|
||||||
? [RageFW_ServerClientArgs<EventName>]
|
? [T.RageFW_ClientArgs<EventName>]
|
||||||
: []
|
: []
|
||||||
): Promise<RageFW_ServerClientReturn<EventName>> {
|
): Promise<T.RageFW_ClientReturn<EventName>> {
|
||||||
return this._rpc.callClient(player, eventName, args)
|
return await rpc.callClient(player, eventName, args)
|
||||||
}
|
}
|
||||||
|
|
||||||
public triggerBrowser<EventName extends RageFW_CefEvent>(
|
public async triggerBrowser<EventName extends T.RageFW_BrowserEvent>(
|
||||||
player: PlayerMp,
|
player: PlayerMp,
|
||||||
eventName: EventName,
|
eventName: EventName,
|
||||||
...args: _CefEventHasArgs<EventName> extends true
|
...args: T._BrowserEventHasArgs<EventName> extends true
|
||||||
? [RageFW_CefArgs<EventName>]
|
? [T.RageFW_BrowserArgs<EventName>]
|
||||||
: []
|
: []
|
||||||
): Promise<RageFW_CefReturn<EventName>> {
|
): Promise<T.RageFW_BrowserReturn<EventName>> {
|
||||||
return this._rpc.callBrowser(player, eventName, args)
|
return await rpc.callBrowser(player, eventName, args)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// new Player().triggerBrowser({} as PlayerMp, 'customCefEvent', ['', 1])
|
||||||
|
// new Player().triggerClient({} as PlayerMp, 'customClientEvent', ['', 1])
|
||||||
|
|||||||
@@ -0,0 +1,5 @@
|
|||||||
|
import { Rpc } from '@entityseven/rage-fw-rpc'
|
||||||
|
|
||||||
|
export const rpc = new Rpc({
|
||||||
|
debugLogs: false,
|
||||||
|
})
|
||||||
+34
-112
@@ -1,117 +1,39 @@
|
|||||||
import { Rpc } from 'rage-fw-rpc'
|
import { rpc } from './rpc'
|
||||||
import { RageFW_ICustomServerEvent } from 'rage-fw-shared-types'
|
import type * as T from '../types'
|
||||||
|
|
||||||
import { nativeEvents } from '../native.events'
|
|
||||||
import type {
|
|
||||||
_ServerEventHasArgs,
|
|
||||||
RageFW_ServerArgs,
|
|
||||||
RageFW_ServerCallback,
|
|
||||||
RageFW_ServerCallbackCustom,
|
|
||||||
RageFW_ServerCallbackNative,
|
|
||||||
RageFW_ServerEvent,
|
|
||||||
RageFW_ServerReturn,
|
|
||||||
} from '../types'
|
|
||||||
|
|
||||||
export class Server {
|
export class Server {
|
||||||
private _rpc: Rpc = new Rpc()
|
public register<EventName extends T.RageFW_ServerEvent>(
|
||||||
|
|
||||||
get rpc(): Rpc {
|
|
||||||
return this._rpc
|
|
||||||
}
|
|
||||||
|
|
||||||
private isNativeEvent(eventName: string): eventName is keyof IServerEvents {
|
|
||||||
return nativeEvents.includes(eventName)
|
|
||||||
}
|
|
||||||
|
|
||||||
private registerCustom<EventName extends keyof RageFW_ICustomServerEvent>(
|
|
||||||
eventName: EventName,
|
eventName: EventName,
|
||||||
callback: RageFW_ServerCallbackCustom<EventName>,
|
callback: T.RageFW_ServerCallback<EventName>,
|
||||||
): void {
|
): Server {
|
||||||
this._rpc.register(
|
rpc.register<
|
||||||
eventName,
|
Parameters<typeof callback>,
|
||||||
|
ReturnType<typeof callback>,
|
||||||
|
EventName
|
||||||
|
>(eventName, async (...data) => await callback(...data))
|
||||||
|
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
|
public unregister<EventName extends T.RageFW_ServerEvent>(
|
||||||
|
eventName: EventName,
|
||||||
|
): Server {
|
||||||
|
rpc.unregister<EventName>(eventName)
|
||||||
|
|
||||||
|
return this
|
||||||
|
}
|
||||||
|
|
||||||
// fixme
|
// fixme
|
||||||
async (args: RageFW_ServerArgs<EventName>, info) => {
|
// public trigger<EventName extends keyof T.RageFW_ICustomServerEvent>(
|
||||||
await callback([info.player as PlayerMp, ...args])
|
// eventName: EventName,
|
||||||
},
|
// ...args: T._ServerEventHasArgs<EventName> extends true
|
||||||
)
|
// ? [T.RageFW_ServerArgs<EventName>]
|
||||||
}
|
// : []
|
||||||
|
// ): Promise<T.RageFW_ServerReturn<EventName>> {
|
||||||
private registerNative<EventName extends keyof IServerEvents>(
|
// return rpc.call(eventName, args)
|
||||||
eventName: EventName,
|
// }
|
||||||
callback: RageFW_ServerCallbackNative<EventName>,
|
|
||||||
): void {
|
|
||||||
mp.events.add(
|
|
||||||
eventName,
|
|
||||||
(...args: Parameters<IServerEvents[EventName]>) =>
|
|
||||||
callback([...args]),
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
public register<EventName extends RageFW_ServerEvent>(
|
|
||||||
eventName: EventName,
|
|
||||||
callback: RageFW_ServerCallback<EventName>,
|
|
||||||
): void {
|
|
||||||
if (this.isNativeEvent(eventName)) {
|
|
||||||
this.registerNative(
|
|
||||||
eventName,
|
|
||||||
callback as RageFW_ServerCallbackNative,
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
this.registerCustom(
|
|
||||||
eventName,
|
|
||||||
callback as unknown as RageFW_ServerCallbackCustom,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public registerMany<EventName extends RageFW_ServerEvent>(events: {
|
|
||||||
[event in EventName]: RageFW_ServerCallback<event>
|
|
||||||
}): void {
|
|
||||||
Object.entries<RageFW_ServerCallback<EventName>>(events).map(
|
|
||||||
([eventName, callback]) => {
|
|
||||||
if (this.isNativeEvent(eventName)) {
|
|
||||||
this.registerNative(
|
|
||||||
eventName,
|
|
||||||
callback as RageFW_ServerCallbackNative,
|
|
||||||
)
|
|
||||||
} else {
|
|
||||||
this.registerCustom(
|
|
||||||
eventName as keyof RageFW_ICustomServerEvent,
|
|
||||||
callback as unknown as RageFW_ServerCallbackCustom,
|
|
||||||
)
|
|
||||||
}
|
|
||||||
},
|
|
||||||
)
|
|
||||||
}
|
|
||||||
|
|
||||||
private unregisterCustom<EventName extends keyof RageFW_ICustomServerEvent>(
|
|
||||||
eventName: EventName,
|
|
||||||
): void {
|
|
||||||
this._rpc.unregister(eventName)
|
|
||||||
}
|
|
||||||
|
|
||||||
private unregisterNative<EventName extends keyof IServerEvents>(
|
|
||||||
eventName: EventName,
|
|
||||||
): void {
|
|
||||||
mp.events.remove(eventName)
|
|
||||||
}
|
|
||||||
|
|
||||||
public unregister<EventName extends RageFW_ServerEvent>(
|
|
||||||
eventName: EventName,
|
|
||||||
): void {
|
|
||||||
if (this.isNativeEvent(eventName)) {
|
|
||||||
this.unregisterNative(eventName)
|
|
||||||
} else {
|
|
||||||
this.unregisterCustom(eventName)
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
public trigger<EventName extends keyof RageFW_ICustomServerEvent>(
|
|
||||||
eventName: EventName,
|
|
||||||
...args: _ServerEventHasArgs<EventName> extends true
|
|
||||||
? [RageFW_ServerArgs<EventName>]
|
|
||||||
: []
|
|
||||||
): Promise<RageFW_ServerReturn<EventName>> {
|
|
||||||
return this._rpc.call(eventName, args)
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// new Server()
|
||||||
|
// .register('customServerEvent', async (a, b, c) => true)
|
||||||
|
// .unregister('customServerEvent')
|
||||||
|
|||||||
+2
-1
@@ -1,4 +1,4 @@
|
|||||||
import { Logger, Player, Server } from './core'
|
import { Logger, Player, Server, rpc } from './core'
|
||||||
|
|
||||||
export const fw = {
|
export const fw = {
|
||||||
event: new Server(),
|
event: new Server(),
|
||||||
@@ -6,6 +6,7 @@ export const fw = {
|
|||||||
system: {
|
system: {
|
||||||
log: new Logger(),
|
log: new Logger(),
|
||||||
},
|
},
|
||||||
|
rpc,
|
||||||
}
|
}
|
||||||
|
|
||||||
fw.system.log.info(
|
fw.system.log.info(
|
||||||
|
|||||||
@@ -1,18 +1,34 @@
|
|||||||
import type { RageFW_ICustomCefEvent } from 'rage-fw-shared-types'
|
import type { RageFW_ICustomBrowserEvent } from '@entityseven/rage-fw-shared-types'
|
||||||
|
|
||||||
export type RageFW_CefEvent = keyof RageFW_ICustomCefEvent
|
/**
|
||||||
|
* Union of all available browser event names
|
||||||
|
* These only include custom events
|
||||||
|
*/
|
||||||
|
export type RageFW_BrowserEvent = keyof RageFW_ICustomBrowserEvent
|
||||||
|
|
||||||
export type RageFW_CefArgs<K extends RageFW_CefEvent> = Parameters<
|
/**
|
||||||
RageFW_ICustomCefEvent[K]
|
* Array of arguments of an event you pass as a generic
|
||||||
|
* These only include custom events
|
||||||
|
*/
|
||||||
|
export type RageFW_BrowserArgs<K extends RageFW_BrowserEvent> = Parameters<
|
||||||
|
RageFW_ICustomBrowserEvent[K]
|
||||||
>
|
>
|
||||||
|
|
||||||
export type RageFW_CefReturn<K extends RageFW_CefEvent> = ReturnType<
|
/**
|
||||||
RageFW_ICustomCefEvent[K]
|
* Return type of event you pass as a generic
|
||||||
|
* These only include custom events
|
||||||
|
*/
|
||||||
|
export type RageFW_BrowserReturn<K extends RageFW_BrowserEvent> = ReturnType<
|
||||||
|
RageFW_ICustomBrowserEvent[K]
|
||||||
>
|
>
|
||||||
|
|
||||||
export type _CefEventHasArgs<EventName extends keyof RageFW_ICustomCefEvent> =
|
/**
|
||||||
keyof RageFW_ICustomCefEvent extends never
|
*
|
||||||
|
*/
|
||||||
|
export type _BrowserEventHasArgs<
|
||||||
|
EventName extends keyof RageFW_ICustomBrowserEvent,
|
||||||
|
> = keyof RageFW_ICustomBrowserEvent extends never
|
||||||
? false
|
? false
|
||||||
: Parameters<RageFW_ICustomCefEvent[EventName]>[0] extends undefined
|
: Parameters<RageFW_ICustomBrowserEvent[EventName]>[0] extends undefined
|
||||||
? false
|
? false
|
||||||
: true
|
: true
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
/// <reference types="@ragempcommunity/types-server" />
|
/// <reference types="@ragempcommunity/types-server" />
|
||||||
|
|
||||||
import type { RageFW_ICustomClientEvent } from 'rage-fw-shared-types'
|
import type { RageFW_ICustomClientEvent } from '@entityseven/rage-fw-shared-types'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Union of all available client event names
|
* Union of all available client event names
|
||||||
@@ -12,7 +12,7 @@ export type RageFW_ClientEvent = keyof RageFW_ICustomClientEvent
|
|||||||
* Array of arguments of an event you pass as a generic
|
* Array of arguments of an event you pass as a generic
|
||||||
* These only include custom events
|
* These only include custom events
|
||||||
*/
|
*/
|
||||||
export type RageFW_ServerClientArgs<K extends RageFW_ClientEvent> =
|
export type RageFW_ClientArgs<K extends RageFW_ClientEvent> =
|
||||||
K extends RageFW_ClientEvent
|
K extends RageFW_ClientEvent
|
||||||
? Parameters<RageFW_ICustomClientEvent[K]>
|
? Parameters<RageFW_ICustomClientEvent[K]>
|
||||||
: never
|
: never
|
||||||
@@ -21,11 +21,14 @@ export type RageFW_ServerClientArgs<K extends RageFW_ClientEvent> =
|
|||||||
* Return type of event you pass as a generic
|
* Return type of event you pass as a generic
|
||||||
* These only include custom events
|
* These only include custom events
|
||||||
*/
|
*/
|
||||||
export type RageFW_ServerClientReturn<K extends RageFW_ClientEvent> =
|
export type RageFW_ClientReturn<K extends RageFW_ClientEvent> =
|
||||||
K extends RageFW_ClientEvent
|
K extends RageFW_ClientEvent
|
||||||
? ReturnType<RageFW_ICustomClientEvent[K]>
|
? ReturnType<RageFW_ICustomClientEvent[K]>
|
||||||
: never
|
: never
|
||||||
|
|
||||||
|
/**
|
||||||
|
*
|
||||||
|
*/
|
||||||
export type _ClientEventHasArgs<
|
export type _ClientEventHasArgs<
|
||||||
EventName extends keyof RageFW_ICustomClientEvent,
|
EventName extends keyof RageFW_ICustomClientEvent,
|
||||||
> = keyof RageFW_ICustomClientEvent extends never
|
> = keyof RageFW_ICustomClientEvent extends never
|
||||||
|
|||||||
+11
-30
@@ -3,8 +3,9 @@
|
|||||||
import type {
|
import type {
|
||||||
RageFW_ICustomClientEvent,
|
RageFW_ICustomClientEvent,
|
||||||
RageFW_ICustomServerEvent,
|
RageFW_ICustomServerEvent,
|
||||||
} from 'rage-fw-shared-types'
|
} from '@entityseven/rage-fw-shared-types'
|
||||||
export type { RageFW_ICustomServerEvent } from 'rage-fw-shared-types'
|
|
||||||
|
export type { RageFW_ICustomServerEvent } from '@entityseven/rage-fw-shared-types'
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Union of all available server event names
|
* Union of all available server event names
|
||||||
@@ -20,20 +21,9 @@ export type RageFW_ServerEvent =
|
|||||||
*/
|
*/
|
||||||
export type RageFW_ServerArgs<K extends RageFW_ServerEvent> =
|
export type RageFW_ServerArgs<K extends RageFW_ServerEvent> =
|
||||||
K extends keyof RageFW_ICustomServerEvent
|
K extends keyof RageFW_ICustomServerEvent
|
||||||
? Parameters<RageFW_ICustomServerEvent[K]>
|
? [PlayerMp, ...Parameters<RageFW_ICustomServerEvent[K]>]
|
||||||
: K extends keyof IServerEvents
|
: K extends keyof IServerEvents
|
||||||
? Parameters<IServerEvents[K]>
|
? [PlayerMp, Parameters<IServerEvents[K]>]
|
||||||
: never
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Callback (function) for an event, name of which you pass as a generic
|
|
||||||
* These include system and custom events
|
|
||||||
*/
|
|
||||||
export type RageFW_ServerCallback<K extends RageFW_ServerEvent> =
|
|
||||||
K extends keyof RageFW_ICustomServerEvent
|
|
||||||
? RageFW_ServerCallbackCustom<K>
|
|
||||||
: K extends keyof IServerEvents
|
|
||||||
? RageFW_ServerCallbackNative<K>
|
|
||||||
: never
|
: never
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -45,28 +35,19 @@ export type RageFW_ServerReturn<K extends RageFW_ServerEvent> =
|
|||||||
? ReturnType<RageFW_ICustomServerEvent[K]>
|
? ReturnType<RageFW_ICustomServerEvent[K]>
|
||||||
: K extends keyof IServerEvents
|
: K extends keyof IServerEvents
|
||||||
? ReturnType<IServerEvents[K]>
|
? ReturnType<IServerEvents[K]>
|
||||||
: never
|
: void
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Array of arguments for an event, name of which you pass as a generic
|
* Callback (function) for an event, name of which you pass as a generic
|
||||||
* These only include custom events
|
* These include system and custom events
|
||||||
*/
|
*/
|
||||||
export type RageFW_ServerCallbackCustom<
|
export type RageFW_ServerCallback<K extends RageFW_ServerEvent> = (
|
||||||
K extends keyof RageFW_ICustomServerEvent = keyof RageFW_ICustomServerEvent,
|
...args: RageFW_ServerArgs<K>
|
||||||
> = (
|
|
||||||
payload: [player: PlayerMp, ...args: RageFW_ServerArgs<K>],
|
|
||||||
) => Promise<RageFW_ServerReturn<K>>
|
) => Promise<RageFW_ServerReturn<K>>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Array of arguments for an event, name of which you pass as a generic
|
*
|
||||||
* These only include system events
|
|
||||||
*/
|
*/
|
||||||
export type RageFW_ServerCallbackNative<
|
|
||||||
K extends keyof IServerEvents = keyof IServerEvents,
|
|
||||||
> = (
|
|
||||||
payload: Parameters<IServerEvents[K]>,
|
|
||||||
) => Promise<ReturnType<IServerEvents[K]>>
|
|
||||||
|
|
||||||
export type _ServerEventHasArgs<EventName extends RageFW_ServerEvent> =
|
export type _ServerEventHasArgs<EventName extends RageFW_ServerEvent> =
|
||||||
EventName extends keyof RageFW_ICustomServerEvent
|
EventName extends keyof RageFW_ICustomServerEvent
|
||||||
? keyof RageFW_ICustomClientEvent extends never
|
? keyof RageFW_ICustomClientEvent extends never
|
||||||
|
|||||||
@@ -1,6 +1,6 @@
|
|||||||
{
|
{
|
||||||
"name": "rage-fw-shared-types",
|
"name": "@entityseven/rage-fw-shared-types",
|
||||||
"version": "0.1.0",
|
"version": "0.1.2",
|
||||||
"types": "types/types/index.d.ts",
|
"types": "types/types/index.d.ts",
|
||||||
"files": [
|
"files": [
|
||||||
"types/**/*"
|
"types/**/*"
|
||||||
|
|||||||
Vendored
+8
-3
@@ -1,9 +1,14 @@
|
|||||||
declare module 'rage-fw-shared-types' {
|
declare module '@entityseven/rage-fw-shared-types' {
|
||||||
export interface RageFW_ICustomServerEvent {}
|
export interface RageFW_ICustomServerEvent {
|
||||||
|
customServerEvent(arg1: string, arg2: number): boolean
|
||||||
|
}
|
||||||
|
|
||||||
export interface RageFW_ICustomClientEvent {
|
export interface RageFW_ICustomClientEvent {
|
||||||
cefReady(): void
|
cefReady(): void
|
||||||
|
customClientEvent(arg1: string, arg2: number): boolean
|
||||||
}
|
}
|
||||||
|
|
||||||
export interface RageFW_ICustomCefEvent {}
|
export interface RageFW_ICustomBrowserEvent {
|
||||||
|
customCefEvent(arg1: string, arg2: number): boolean
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user