Rpc integration + type fixes #3
@ -1,7 +1,7 @@
 | 
				
			|||||||
{
 | 
					{
 | 
				
			||||||
    "name": "ragefw-rpc",
 | 
					    "name": "ragefw-rpc",
 | 
				
			||||||
    "description": "RageFW RPC",
 | 
					    "description": "RageFW RPC",
 | 
				
			||||||
    "version": "0.2.0",
 | 
					    "version": "0.2.1",
 | 
				
			||||||
    "scripts": {
 | 
					    "scripts": {
 | 
				
			||||||
        "build": "tsup",
 | 
					        "build": "tsup",
 | 
				
			||||||
        "start": "npx ./dist create"
 | 
					        "start": "npx ./dist create"
 | 
				
			||||||
 | 
				
			|||||||
@ -8,6 +8,9 @@ import {
 | 
				
			|||||||
    Utils,
 | 
					    Utils,
 | 
				
			||||||
} from './utils'
 | 
					} from './utils'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * NOT INTENDED FOR OUT-OF-CONTEXT USE
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
export class Browser extends Wrapper {
 | 
					export class Browser extends Wrapper {
 | 
				
			||||||
    constructor(
 | 
					    constructor(
 | 
				
			||||||
        options: RpcWrapperConfig = {
 | 
					        options: RpcWrapperConfig = {
 | 
				
			||||||
@ -17,6 +20,9 @@ export class Browser extends Wrapper {
 | 
				
			|||||||
        super(options)
 | 
					        super(options)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * NOT INTENDED FOR OUT-OF-CONTEXT USE
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    public _resolveEmitDestination(dataRaw: string) {
 | 
					    public _resolveEmitDestination(dataRaw: string) {
 | 
				
			||||||
        let state = Utils.prepareExecution(dataRaw)
 | 
					        let state = Utils.prepareExecution(dataRaw)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -35,15 +41,18 @@ export class Browser extends Wrapper {
 | 
				
			|||||||
        mp.trigger(Events.LOCAL_EVENT_LISTENER, dataRaw)
 | 
					        mp.trigger(Events.LOCAL_EVENT_LISTENER, dataRaw)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // called to browser
 | 
				
			||||||
    private async emit(dataRaw: string) {
 | 
					    private async emit(dataRaw: string) {
 | 
				
			||||||
        let state = Utils.prepareExecution(dataRaw)
 | 
					        let state = Utils.prepareExecution(dataRaw)
 | 
				
			||||||
        const responseEventName = Utils.generateResponseEventName(state.uuid)
 | 
					        const responseEventName = Utils.generateResponseEventName(state.uuid)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // check availability
 | 
				
			||||||
        state = this.verifyEvent_(state)
 | 
					        state = this.verifyEvent_(state)
 | 
				
			||||||
        if (state.knownError) {
 | 
					        if (state.knownError) {
 | 
				
			||||||
            this.triggerError_(state, state.knownError)
 | 
					            this.triggerError_(state, state.knownError)
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // execute + generate response
 | 
				
			||||||
        const response = await this.state_[state.eventName](
 | 
					        const response = await this.state_[state.eventName](
 | 
				
			||||||
            ...(Array.isArray(state.data) ? state.data : []),
 | 
					            ...(Array.isArray(state.data) ? state.data : []),
 | 
				
			||||||
        )
 | 
					        )
 | 
				
			||||||
@ -58,6 +67,7 @@ export class Browser extends Wrapper {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
        const responseDataRaw = Utils.prepareTransfer(responseState)
 | 
					        const responseDataRaw = Utils.prepareTransfer(responseState)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // send response
 | 
				
			||||||
        switch (state.calledFrom) {
 | 
					        switch (state.calledFrom) {
 | 
				
			||||||
            case Environment.BROWSER:
 | 
					            case Environment.BROWSER:
 | 
				
			||||||
                try {
 | 
					                try {
 | 
				
			||||||
 | 
				
			|||||||
@ -9,6 +9,9 @@ import {
 | 
				
			|||||||
    Utils,
 | 
					    Utils,
 | 
				
			||||||
} from './utils'
 | 
					} from './utils'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * NOT INTENDED FOR OUT-OF-CONTEXT USE
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
export class Client extends Wrapper {
 | 
					export class Client extends Wrapper {
 | 
				
			||||||
    private _browser: any = null
 | 
					    private _browser: any = null
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -24,6 +27,9 @@ export class Client extends Wrapper {
 | 
				
			|||||||
        this._browser = browser
 | 
					        this._browser = browser
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * NOT INTENDED FOR OUT-OF-CONTEXT USE
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    public _resolveEmitDestination(dataRaw: string) {
 | 
					    public _resolveEmitDestination(dataRaw: string) {
 | 
				
			||||||
        const state = Utils.prepareExecution(dataRaw)
 | 
					        const state = Utils.prepareExecution(dataRaw)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -46,14 +52,17 @@ export class Client extends Wrapper {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // called to client
 | 
				
			||||||
    private async emit(state: RPCState) {
 | 
					    private async emit(state: RPCState) {
 | 
				
			||||||
        this.errorNoBrowser()
 | 
					        this.errorNoBrowser()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // check availability
 | 
				
			||||||
        state = this.verifyEvent_(state)
 | 
					        state = this.verifyEvent_(state)
 | 
				
			||||||
        if (state.knownError) {
 | 
					        if (state.knownError) {
 | 
				
			||||||
            this.triggerError_(state, state.knownError)
 | 
					            this.triggerError_(state, state.knownError)
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // execute + generate response
 | 
				
			||||||
        const responseEventName = Utils.generateResponseEventName(state.uuid)
 | 
					        const responseEventName = Utils.generateResponseEventName(state.uuid)
 | 
				
			||||||
        const response = await this.state_[state.eventName](
 | 
					        const response = await this.state_[state.eventName](
 | 
				
			||||||
            ...(Array.isArray(state.data) ? state.data : []),
 | 
					            ...(Array.isArray(state.data) ? state.data : []),
 | 
				
			||||||
@ -68,6 +77,7 @@ export class Client extends Wrapper {
 | 
				
			|||||||
            type: RPCEventType.RESPONSE,
 | 
					            type: RPCEventType.RESPONSE,
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // send response
 | 
				
			||||||
        switch (state.calledFrom) {
 | 
					        switch (state.calledFrom) {
 | 
				
			||||||
            case Environment.CLIENT:
 | 
					            case Environment.CLIENT:
 | 
				
			||||||
                try {
 | 
					                try {
 | 
				
			||||||
@ -103,11 +113,13 @@ export class Client extends Wrapper {
 | 
				
			|||||||
        }
 | 
					        }
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // called to server
 | 
				
			||||||
    private emitServer(dataRaw: string) {
 | 
					    private emitServer(dataRaw: string) {
 | 
				
			||||||
        this.errorNoBrowser()
 | 
					        this.errorNoBrowser()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        const state = Utils.prepareExecution(dataRaw)
 | 
					        const state = Utils.prepareExecution(dataRaw)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // if event is called from browser we will forward response through client via this
 | 
				
			||||||
        if (state.calledFrom === Environment.BROWSER) {
 | 
					        if (state.calledFrom === Environment.BROWSER) {
 | 
				
			||||||
            const responseEventName = Utils.generateResponseEventName(
 | 
					            const responseEventName = Utils.generateResponseEventName(
 | 
				
			||||||
                state.uuid,
 | 
					                state.uuid,
 | 
				
			||||||
@ -129,11 +141,13 @@ export class Client extends Wrapper {
 | 
				
			|||||||
        mp.events.callRemote(Events.SERVER_EVENT_LISTENER, dataRaw)
 | 
					        mp.events.callRemote(Events.SERVER_EVENT_LISTENER, dataRaw)
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // called to browser
 | 
				
			||||||
    private emitBrowser(dataRaw: string) {
 | 
					    private emitBrowser(dataRaw: string) {
 | 
				
			||||||
        this.errorNoBrowser()
 | 
					        this.errorNoBrowser()
 | 
				
			||||||
 | 
					
 | 
				
			||||||
        const state = Utils.prepareExecution(dataRaw)
 | 
					        const state = Utils.prepareExecution(dataRaw)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // if event is called from server we will forward response through client via this
 | 
				
			||||||
        if (state.calledFrom === Environment.SERVER) {
 | 
					        if (state.calledFrom === Environment.SERVER) {
 | 
				
			||||||
            const responseEventName = Utils.generateResponseEventName(
 | 
					            const responseEventName = Utils.generateResponseEventName(
 | 
				
			||||||
                state.uuid,
 | 
					                state.uuid,
 | 
				
			||||||
 | 
				
			|||||||
@ -9,6 +9,9 @@ import {
 | 
				
			|||||||
    Utils,
 | 
					    Utils,
 | 
				
			||||||
} from './utils'
 | 
					} from './utils'
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					/**
 | 
				
			||||||
 | 
					 * NOT INTENDED FOR OUT-OF-CONTEXT USE
 | 
				
			||||||
 | 
					 */
 | 
				
			||||||
export class Server extends Wrapper {
 | 
					export class Server extends Wrapper {
 | 
				
			||||||
    constructor(
 | 
					    constructor(
 | 
				
			||||||
        options: RpcWrapperConfig = {
 | 
					        options: RpcWrapperConfig = {
 | 
				
			||||||
@ -19,6 +22,7 @@ export class Server extends Wrapper {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        if (!!options.forceBrowserDevMode) return
 | 
					        if (!!options.forceBrowserDevMode) return
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // specific event to save player in context as it is not available on server -> server calls
 | 
				
			||||||
        mp.events.add(
 | 
					        mp.events.add(
 | 
				
			||||||
            Events.SERVER_EVENT_LISTENER,
 | 
					            Events.SERVER_EVENT_LISTENER,
 | 
				
			||||||
            async (player: PlayerMp, dataRaw: string) => {
 | 
					            async (player: PlayerMp, dataRaw: string) => {
 | 
				
			||||||
@ -27,6 +31,9 @@ export class Server extends Wrapper {
 | 
				
			|||||||
        )
 | 
					        )
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    /**
 | 
				
			||||||
 | 
					     * NOT INTENDED FOR OUT-OF-CONTEXT USE
 | 
				
			||||||
 | 
					     */
 | 
				
			||||||
    public _resolveEmitDestination(player: PlayerMp, dataRaw: string) {
 | 
					    public _resolveEmitDestination(player: PlayerMp, dataRaw: string) {
 | 
				
			||||||
        let state = Utils.prepareExecution(dataRaw)
 | 
					        let state = Utils.prepareExecution(dataRaw)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
@ -45,15 +52,18 @@ export class Server extends Wrapper {
 | 
				
			|||||||
        player.call(Events.LOCAL_EVENT_LISTENER, [dataRaw])
 | 
					        player.call(Events.LOCAL_EVENT_LISTENER, [dataRaw])
 | 
				
			||||||
    }
 | 
					    }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					    // called to server
 | 
				
			||||||
    private async emit(player: PlayerMp, dataRaw: string) {
 | 
					    private async emit(player: PlayerMp, dataRaw: string) {
 | 
				
			||||||
        let state = Utils.prepareExecution(dataRaw)
 | 
					        let state = Utils.prepareExecution(dataRaw)
 | 
				
			||||||
        const responseEventName = Utils.generateResponseEventName(state.uuid)
 | 
					        const responseEventName = Utils.generateResponseEventName(state.uuid)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // check availability
 | 
				
			||||||
        state = this.verifyEvent_(state)
 | 
					        state = this.verifyEvent_(state)
 | 
				
			||||||
        if (state.knownError) {
 | 
					        if (state.knownError) {
 | 
				
			||||||
            this.triggerError_(state, state.knownError)
 | 
					            this.triggerError_(state, state.knownError)
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // execute + generate response
 | 
				
			||||||
        const response = await this.state_[state.eventName](
 | 
					        const response = await this.state_[state.eventName](
 | 
				
			||||||
            player,
 | 
					            player,
 | 
				
			||||||
            ...(Array.isArray(state.data) ? state.data : []),
 | 
					            ...(Array.isArray(state.data) ? state.data : []),
 | 
				
			||||||
@ -68,6 +78,7 @@ export class Server extends Wrapper {
 | 
				
			|||||||
            type: RPCEventType.RESPONSE,
 | 
					            type: RPCEventType.RESPONSE,
 | 
				
			||||||
        }
 | 
					        }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					        // send response
 | 
				
			||||||
        switch (state.calledFrom) {
 | 
					        switch (state.calledFrom) {
 | 
				
			||||||
            case Environment.SERVER:
 | 
					            case Environment.SERVER:
 | 
				
			||||||
                try {
 | 
					                try {
 | 
				
			||||||
 | 
				
			|||||||
		Loading…
	
		Reference in New Issue
	
	Block a user