@@ -43,19 +43,67 @@ function createProxy(methodName) {
4343}
4444
4545// Инициализация глобального объекта runtime для Wails Events
46+ // Wails Runtime Events Implementation
4647window . runtime = {
4748 EventsOn : ( eventName , callback ) => {
4849 if ( ! bridge . listeners [ eventName ] ) {
4950 bridge . listeners [ eventName ] = [ ] ;
5051 }
51- bridge . listeners [ eventName ] . push ( callback ) ;
52+ // Wrapper to maintain Wails behavior (maxCallbacks = -1 for infinite)
53+ bridge . listeners [ eventName ] . push ( { callback, maxCallbacks : - 1 } ) ;
54+ return ( ) => window . runtime . EventsOff ( eventName , callback ) ;
5255 } ,
53- EventsOff : ( eventName ) => {
54- delete bridge . listeners [ eventName ] ;
56+ EventsOnMultiple : ( eventName , callback , maxCallbacks ) => {
57+ if ( ! bridge . listeners [ eventName ] ) {
58+ bridge . listeners [ eventName ] = [ ] ;
59+ }
60+ bridge . listeners [ eventName ] . push ( { callback, maxCallbacks } ) ;
61+ return ( ) => window . runtime . EventsOff ( eventName , callback ) ;
62+ } ,
63+ EventsOnce : ( eventName , callback ) => {
64+ return window . runtime . EventsOnMultiple ( eventName , callback , 1 ) ;
65+ } ,
66+ EventsOff : ( eventName , ...additionalEventNames ) => {
67+ const events = [ eventName , ...additionalEventNames ] ;
68+ events . forEach ( name => {
69+ delete bridge . listeners [ name ] ;
70+ } ) ;
71+ } ,
72+ EventsOffAll : ( ) => {
73+ bridge . listeners = { } ;
5574 } ,
5675 EventsEmit : ( eventName , data ) => {
57- // Локальная эмуляция или отправка на сервер если нужно
58- console . log ( "EventsEmit not fully implemented in bridge" , eventName , data ) ;
76+ // Broadcast locally to listeners (optimistic UI updates)
77+ if ( bridge . listeners [ eventName ] ) {
78+ bridge . listeners [ eventName ] . forEach ( listener => {
79+ listener . callback ( data ) ;
80+ if ( listener . maxCallbacks > 0 ) {
81+ listener . maxCallbacks -- ;
82+ }
83+ } ) ;
84+ // Cleanup exhausted listeners
85+ bridge . listeners [ eventName ] = bridge . listeners [ eventName ] . filter ( l => l . maxCallbacks !== 0 ) ;
86+ }
87+ }
88+ } ;
89+
90+ // Override bridge listener logic to handle the new object structure
91+ bridge . events . onmessage = ( event ) => {
92+ try {
93+ const msg = JSON . parse ( event . data ) ;
94+ // Expecting msg.event (string) and msg.data (payload)
95+ if ( msg . event && bridge . listeners [ msg . event ] ) {
96+ bridge . listeners [ msg . event ] . forEach ( listener => {
97+ listener . callback ( msg . data ) ;
98+ if ( listener . maxCallbacks > 0 ) {
99+ listener . maxCallbacks -- ;
100+ }
101+ } ) ;
102+ // Cleanup exhausted listeners
103+ bridge . listeners [ msg . event ] = bridge . listeners [ msg . event ] . filter ( l => l . maxCallbacks !== 0 ) ;
104+ }
105+ } catch ( e ) {
106+ console . error ( "Failed to parse SSE message:" , e ) ;
59107 }
60108} ;
61109
0 commit comments