@@ -12,6 +12,7 @@ namespace ElectronNET.API;
1212internal class SocketIoFacade
1313{
1414 private readonly SocketIO _socket ;
15+ private readonly object _lockObj = new object ( ) ;
1516
1617 public SocketIoFacade ( string uri )
1718 {
@@ -54,53 +55,71 @@ public void Connect()
5455
5556 public void On ( string eventName , Action action )
5657 {
57- _socket . On ( eventName , _ =>
58+ lock ( _lockObj )
5859 {
59- Task . Run ( action ) ;
60- } ) ;
60+ _socket . On ( eventName , _ =>
61+ {
62+ Task . Run ( action ) ;
63+ } ) ;
64+ }
6165 }
6266
6367 public void On < T > ( string eventName , Action < T > action )
6468 {
65- _socket . On ( eventName , response =>
69+ lock ( _lockObj )
6670 {
67- var value = response . GetValue < T > ( ) ;
68- Task . Run ( ( ) => action ( value ) ) ;
69- } ) ;
71+ _socket . On ( eventName , response =>
72+ {
73+ var value = response . GetValue < T > ( ) ;
74+ Task . Run ( ( ) => action ( value ) ) ;
75+ } ) ;
76+ }
7077 }
7178
7279 // TODO: Remove this method when SocketIoClient supports object deserialization
7380 public void On ( string eventName , Action < object > action )
7481 {
75- _socket . On ( eventName , response =>
82+ lock ( _lockObj )
7683 {
77- var value = response . GetValue < object > ( ) ;
78- ////Console.WriteLine($"Called Event {eventName} - data {value}");
79- Task . Run ( ( ) => action ( value ) ) ;
80- } ) ;
84+ _socket . On ( eventName , response =>
85+ {
86+ var value = response . GetValue < object > ( ) ;
87+ ////Console.WriteLine($"Called Event {eventName} - data {value}");
88+ Task . Run ( ( ) => action ( value ) ) ;
89+ } ) ;
90+ }
8191 }
8292
8393 public void Once ( string eventName , Action action )
8494 {
85- _socket . On ( eventName , _ =>
95+ lock ( _lockObj )
8696 {
87- _socket . Off ( eventName ) ;
88- Task . Run ( action ) ;
89- } ) ;
97+ _socket . On ( eventName , _ =>
98+ {
99+ _socket . Off ( eventName ) ;
100+ Task . Run ( action ) ;
101+ } ) ;
102+ }
90103 }
91104
92105 public void Once < T > ( string eventName , Action < T > action )
93106 {
94- _socket . On ( eventName , ( socketIoResponse ) =>
107+ lock ( _lockObj )
95108 {
96- _socket . Off ( eventName ) ;
97- Task . Run ( ( ) => action ( socketIoResponse . GetValue < T > ( ) ) ) ;
98- } ) ;
109+ _socket . On ( eventName , ( socketIoResponse ) =>
110+ {
111+ _socket . Off ( eventName ) ;
112+ Task . Run ( ( ) => action ( socketIoResponse . GetValue < T > ( ) ) ) ;
113+ } ) ;
114+ }
99115 }
100116
101117 public void Off ( string eventName )
102118 {
103- _socket . Off ( eventName ) ;
119+ lock ( _lockObj )
120+ {
121+ _socket . Off ( eventName ) ;
122+ }
104123 }
105124
106125 public async Task Emit ( string eventName , params object [ ] args )
0 commit comments