- rpc
This commit is contained in:
2024-10-27 11:47:55 +00:00
parent 7369ff8868
commit 640adae8a5
28 changed files with 7875 additions and 9992 deletions
+70
View File
@@ -0,0 +1,70 @@
import { Wrapper } from './wrapper'
import { Environment, Events, RPCEventType, RPCState, Utils } from './utils'
class Browser extends Wrapper {
constructor() {
super()
}
public _resolveEmitDestination(dataRaw: string) {
let state = Utils.prepareExecution(dataRaw)
switch (state.calledTo) {
case Environment.BROWSER:
this.emit(dataRaw)
break
default:
this.emitClient(dataRaw)
break
}
}
private emitClient(dataRaw: string) {
mp.trigger(Events.LOCAL_EVENT_LISTENER, dataRaw)
}
private async emit(dataRaw: string) {
let state = Utils.prepareExecution(dataRaw)
const responseEventName = Utils.generateResponseEventName(state.uuid)
state = this.verifyEvent_(state)
if (state.knownError) {
this.triggerError_(state, state.knownError)
}
const response = await this.state_[state.eventName](
...(Array.isArray(state.data) ? state.data : []),
)
const responseState: RPCState = {
uuid: Utils.generateUUID(),
eventName: state.eventName,
calledFrom: Environment.SERVER,
calledTo: state.calledFrom,
knownError: undefined,
data: response,
type: RPCEventType.RESPONSE,
}
const responseDataRaw = Utils.prepareTransfer(responseState)
switch (state.calledFrom) {
case Environment.BROWSER:
try {
mp.events.call(responseEventName, responseDataRaw)
} catch (e) {
void e
}
break
default:
try {
mp.trigger(responseEventName, responseDataRaw)
} catch (e) {
void e
}
break
}
}
}
const browser = new Browser()
export { browser }