Add browser support with Socket.io transport, authentication, performance-optimized IPC, and CI/CD (#925)
This commit is contained in:
71
events/EventsV2.ts
Normal file
71
events/EventsV2.ts
Normal file
@@ -0,0 +1,71 @@
|
||||
/**
|
||||
* Simplified Event System V2
|
||||
*
|
||||
* This provides a simpler, more type-safe way to define and use events.
|
||||
* Instead of factory functions like makeConnectionStateEvent(id),
|
||||
* you can now use: Events.connectionState(id)
|
||||
*/
|
||||
|
||||
import { Base64MessageDTO } from '../backend/src/Model/Base64Message'
|
||||
import { DataSourceState, MqttOptions } from '../backend/src/DataSource'
|
||||
import { UpdateInfo } from 'builder-util-runtime'
|
||||
import { RpcEvent } from './EventSystem/Rpc'
|
||||
|
||||
export type EventV2<MessageType> = {
|
||||
topic: string
|
||||
}
|
||||
|
||||
// Simple event definitions (no parameters)
|
||||
export const Events = {
|
||||
// Connection management
|
||||
addMqttConnection: { topic: 'connection/add/mqtt' } as EventV2<AddMqttConnectionV2>,
|
||||
removeConnection: { topic: 'connection/remove' } as EventV2<string>,
|
||||
updateAvailable: { topic: 'app/update/available' } as EventV2<UpdateInfo>,
|
||||
|
||||
// Parameterized events (for connection-specific events)
|
||||
connectionState: (connectionId: string) => ({ topic: `conn/state/${connectionId}` }) as EventV2<DataSourceState>,
|
||||
connectionMessage: (connectionId: string) => ({ topic: `conn/${connectionId}` }) as EventV2<MqttMessageV2>,
|
||||
publish: (connectionId: string) => ({ topic: `conn/publish/${connectionId}` }) as EventV2<MqttMessageV2>,
|
||||
}
|
||||
|
||||
// RPC Events - type-safe request/response patterns
|
||||
export const RpcEvents = {
|
||||
getAppVersion: { topic: 'getAppVersion' } as RpcEvent<void, string>,
|
||||
writeToFile: { topic: 'writeFile' } as RpcEvent<{ filePath: string; data: string; encoding?: string }, void>,
|
||||
readFromFile: { topic: 'readFromFile' } as RpcEvent<{ filePath: string; encoding?: string }, Buffer>,
|
||||
openDialog: { topic: 'openDialog' } as RpcEvent<OpenDialogOptionsV2, OpenDialogReturnValueV2>,
|
||||
saveDialog: { topic: 'saveDialog' } as RpcEvent<SaveDialogOptionsV2, SaveDialogReturnValueV2>,
|
||||
uploadCertificate: { topic: 'uploadCertificate' } as RpcEvent<CertificateUploadRequest, CertificateUploadResponse>,
|
||||
}
|
||||
|
||||
// Type definitions
|
||||
export interface AddMqttConnectionV2 {
|
||||
id: string
|
||||
options: MqttOptions
|
||||
}
|
||||
|
||||
export interface MqttMessageV2 {
|
||||
topic: string
|
||||
payload: Base64MessageDTO | null
|
||||
qos: 0 | 1 | 2
|
||||
retain: boolean
|
||||
messageId: number | undefined
|
||||
}
|
||||
|
||||
export interface CertificateUploadRequest {
|
||||
filename: string
|
||||
data: string // base64 encoded
|
||||
}
|
||||
|
||||
export interface CertificateUploadResponse {
|
||||
name: string
|
||||
data: string // base64 encoded
|
||||
}
|
||||
|
||||
// Electron dialog types (re-exported for convenience)
|
||||
import { OpenDialogOptions, OpenDialogReturnValue, SaveDialogOptions, SaveDialogReturnValue } from 'electron'
|
||||
|
||||
export type OpenDialogOptionsV2 = OpenDialogOptions
|
||||
export type OpenDialogReturnValueV2 = OpenDialogReturnValue
|
||||
export type SaveDialogOptionsV2 = SaveDialogOptions
|
||||
export type SaveDialogReturnValueV2 = SaveDialogReturnValue
|
||||
Reference in New Issue
Block a user