diff --git a/rpc/readme.md b/rpc/readme.md new file mode 100644 index 0000000..10f2e40 --- /dev/null +++ b/rpc/readme.md @@ -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}`) +}) +``` \ No newline at end of file diff --git a/rpc/src/index.ts b/rpc/src/index.ts index d7bbdbe..a3d5e48 100644 --- a/rpc/src/index.ts +++ b/rpc/src/index.ts @@ -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} 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<