Rpc integration + type fixes #3

Merged
rilaxik merged 26 commits from dev into master 2024-10-28 12:13:19 +00:00
2 changed files with 97 additions and 4 deletions
Showing only changes of commit 39e6455271 - Show all commits

93
rpc/readme.md Normal file
View File

@ -0,0 +1,93 @@
# Rage-FW-RPC
is an all-in package with asynchronous RPC implementation for RageMP servers in JS/TS
# Installation
``` shell
npm i rage-fw-rpc
```
```shell
pnpm i rage-fw-rpc
```
```shell
yarn add rage-fw-rpc
```
Import installed package and initialize rpc:
```ts
// lib/rpc.js
import { Rpc } from 'rage-fw-rpc'
export const rpc = new Rpc(/* options */)
```
# Features
- 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
- Error-safe developer mode for browser
- Calls can receive response from called environments via Promises (browser -> server -> browser, etc.)
- Actual human-readable errors
# Docs
*Extended version with details coming soon*
## register
Registers a callback function for a specified event
```ts
rpc.register('playerJoin', (player) => {
console.log(`Connected: ${player.socialClub}`)
})
```
## unregister
Unregisters callback function for a specified event
```ts
rpc.unregister('playerDamage')
```
## callClient
Calls a client-side event from server or browser
From browser:
```ts
rpc.callClient('updatePlayerData', ['argument']).then(response => {
console.log(`Received: ${response}`)
})
```
From server (requires player):
```ts
rpc.callClient(player, 'updatePlayerData', ['argument']).then(response => {
console.log(`Received: ${response}`)
})
```
## callServer
Calls a server-side event from browser or client
```ts
rpc.callServer('updatePlayerData', ['argument']).then(response => {
console.log(`Received: ${response}`)
})
```
## callBrowser
Calls a server-side event from browser or client
From client:
```ts
rpc.callBrowser('updatePlayerData', ['argument']).then(response => {
console.log(`Received: ${response}`)
})
```
From client (requires player):
```ts
rpc.callBrowser(player, 'updatePlayerData', ['argument']).then(response => {
console.log(`Received: ${response}`)
})
```
## call
Calls an event in current environment
```ts
rpc.call('triggerSomething').then(response => {
console.log(`Received: ${response}`)
})
```

View File

@ -263,7 +263,7 @@ class Rpc extends Wrapper {
}
/**
* Calls a server-side event from server or client
* Calls a server-side event from browser or client
*
* @template Arguments - An array of argument types to be passed to the server event
* @template EventName - A string representing the server event name or union of names
@ -438,9 +438,9 @@ class Rpc extends Wrapper {
* @returns {Promise<Return>} A promise resolving to the return value of the event
*
* @example
* // Calls an event on browser without specifying a player
* callBrowser<[], string, number>('getSomething').then(response => {
* console.log(`Received: ${response}`) // ^ number
* // Calls an event in current environment
* call<[], string, number>('getSomething').then(response => {
* console.log(`Received: ${response}`) // ^ number
* })
*/
public async call<