1- using ElectronNET . API . Serialization ;
2- using System ;
3- using System . Collections . Generic ;
4- using System . Linq ;
5- using System . Text . Json ;
6- using System . Threading . Tasks ;
7-
81namespace ElectronNET . API
92{
3+ using System ;
4+ using System . Diagnostics ;
5+ using System . Linq ;
6+ using System . Text . Json ;
7+ using System . Text . Json . Serialization ;
8+ using System . Threading . Tasks ;
9+ using ElectronNET . Serialization ;
10+
1011 /// <summary>
1112 /// Communicate asynchronously from the main process to renderer processes.
1213 /// </summary>
1314 public sealed class IpcMain
1415 {
1516 private static IpcMain _ipcMain ;
1617 private static object _syncRoot = new object ( ) ;
18+ private static readonly JsonSerializerOptions BoxedObjectSerializationOptions = new JsonSerializerOptions
19+ {
20+ PropertyNamingPolicy = JsonNamingPolicy . CamelCase ,
21+ DefaultIgnoreCondition = JsonIgnoreCondition . WhenWritingNull ,
22+ WriteIndented = false ,
23+ Converters =
24+ {
25+ new JsonStringEnumConverter ( JsonNamingPolicy . CamelCase ) ,
26+ new JsonToBoxedPrimitivesConverter ( ) ,
27+ }
28+ } ;
29+
1730
1831 internal IpcMain ( )
1932 {
@@ -50,24 +63,23 @@ public async Task On(string channel, Action<object> listener)
5063 BridgeConnector . Socket . Off ( channel ) ;
5164 BridgeConnector . Socket . On < JsonElement > ( channel , ( args ) =>
5265 {
53- List < object > objectArray = FormatArguments ( args ) ;
54-
55- if ( objectArray . Count == 1 )
56- {
57- listener ( objectArray . First ( ) ) ;
58- }
59- else
60- {
61- listener ( objectArray ) ;
62- }
66+ var arg = FormatArguments ( args ) ;
67+ listener ( arg ) ;
6368 } ) ;
6469 }
6570
66- private static List < object > FormatArguments ( JsonElement args )
71+ private static object FormatArguments ( JsonElement args )
6772 {
68- var objectArray = args . Deserialize < object [ ] > ( ElectronJson . Options ) . ToList ( ) ;
69- objectArray . RemoveAll ( item => item is null ) ;
70- return objectArray ;
73+ var objectArray = args . Deserialize < object [ ] > ( BoxedObjectSerializationOptions ) . ToList ( ) ;
74+
75+ Debug . Assert ( objectArray . Count <= 2 ) ;
76+
77+ if ( objectArray . Count == 2 )
78+ {
79+ return objectArray [ 1 ] ;
80+ }
81+
82+ return null ;
7183 }
7284
7385 /// <summary>
@@ -84,18 +96,8 @@ public void OnSync(string channel, Func<object, object> listener)
8496 BridgeConnector . Socket . Emit ( "registerSyncIpcMainChannel" , channel ) ;
8597 BridgeConnector . Socket . On < JsonElement > ( channel , ( args ) =>
8698 {
87- List < object > objectArray = FormatArguments ( args ) ;
88- object parameter ;
89- if ( objectArray . Count == 1 )
90- {
91- parameter = objectArray . First ( ) ;
92- }
93- else
94- {
95- parameter = objectArray ;
96- }
97-
98- var result = listener ( parameter ) ;
99+ var arg = FormatArguments ( args ) ;
100+ var result = listener ( arg ) ;
99101 BridgeConnector . Socket . Emit ( channel + "Sync" , result ) ;
100102 } ) ;
101103 }
@@ -111,16 +113,8 @@ public void Once(string channel, Action<object> listener)
111113 BridgeConnector . Socket . Emit ( "registerOnceIpcMainChannel" , channel ) ;
112114 BridgeConnector . Socket . Once < JsonElement > ( channel , ( args ) =>
113115 {
114- List < object > objectArray = FormatArguments ( args ) ;
115-
116- if ( objectArray . Count == 1 )
117- {
118- listener ( objectArray . First ( ) ) ;
119- }
120- else
121- {
122- listener ( objectArray ) ;
123- }
116+ var arg = FormatArguments ( args ) ;
117+ listener ( arg ) ;
124118 } ) ;
125119 }
126120
0 commit comments