@@ -32,6 +32,7 @@ internal class LeagueClientEndpointsGenerator : OpenApiEndpointGeneratorBase<Lcu
3232
3333 private readonly List < MemberDeclarationSyntax [ ] > _moduleProperties = new ( ) ;
3434 private readonly List < ClassDeclarationSyntax > _moduleClasses = new ( ) ;
35+ private IGrouping < string , KeyValuePair < string , string > > ? _eventGroup ;
3536
3637 public LeagueClientEndpointsGenerator ( string [ ] enums ) : this ( LEAGUECLIENT_CLASS_IDENTIFIER , enums ) { }
3738
@@ -69,15 +70,19 @@ protected override void AddEndpoint(EndpointDefinition? endpoint)
6970 CancellableReturnAwaitStatement ( null , endpoint . Identifier . EndWith ( "Async" ) , null , parameterIdentifier . ToCamelCase ( ) + '.' + parameter . Key . ToPascalCase ( ) ) ,
7071 new Dictionary < string , string > { { parameterIdentifier . ToCamelCase ( ) , interfaceIdentifier } } ) ;
7172
73+
74+
7275 Class = Class . AddMembers ( method ) ;
7376 }
7477 }
7578 }
7679
77- private void _addGroupsAsNestedClassesWithEndpoints ( IEnumerable < IGrouping < string ? , Path > > groupedPaths , string ? className = null )
80+ private void _addGroupsAsNestedClassesWithEndpoints ( IEnumerable < IGrouping < string ? , Path > > groupedPaths , IEnumerable < IGrouping < string , KeyValuePair < string , string > > > ? groupedEvents , string ? className = null )
7881 {
7982 foreach ( var group in groupedPaths . Where ( g => g . Key != null ) )
8083 {
84+ var eventGroup = groupedEvents ? . SingleOrDefault ( g => g . Key == group . Key ) ;
85+
8186 bool versionSuffix = false ;
8287 var versioned = group . GroupBy ( P =>
8388 {
@@ -87,6 +92,14 @@ private void _addGroupsAsNestedClassesWithEndpoints(IEnumerable<IGrouping<string
8792 else return null ;
8893 } ) ;
8994
95+ var versionedEvents = eventGroup ? . GroupBy ( e =>
96+ {
97+ var thirdPart = e . Key . SplitAndRemoveEmptyEntries ( '_' ) [ 2 ] ;
98+ if ( thirdPart [ 0 ] == 'v' && char . IsDigit ( thirdPart [ 1 ] ) )
99+ return thirdPart ;
100+ else return null ;
101+ } ) ;
102+
90103 if ( versioned . Count ( ) > 1 )
91104 {
92105 var firstVersionCount = versioned . First ( ) . Count ( ) ;
@@ -101,7 +114,8 @@ private void _addGroupsAsNestedClassesWithEndpoints(IEnumerable<IGrouping<string
101114 // Separate modules
102115 foreach ( var versionedModule in versioned )
103116 {
104- _addGroupsAsNestedClassesWithEndpoints ( versionedModule . GroupByModule ( ) ,
117+ var versionedModuleEvents = versionedEvents ? . Where ( ve => ve . Key == versionedModule . Key ) ;
118+ _addGroupsAsNestedClassesWithEndpoints ( versionedModule . GroupByModule ( ) , versionedModuleEvents ? . SelectMany ( e => e ) ? . GroupByModule ( ) ,
105119 group . Key . RemoveChars ( '{' , '}' ) . ToPascalCase ( ) + versionedModule . Key ? . ToUpper ( ) ) ;
106120 }
107121
@@ -112,14 +126,14 @@ private void _addGroupsAsNestedClassesWithEndpoints(IEnumerable<IGrouping<string
112126 var moduleGenerator = new LeagueClientModuleGenerator ( ( className ?? group . Key . RemoveChars ( '{' , '}' ) . ToPascalCase ( ) )
113127 . FixGamePrefixes ( ) , Enums , methodVersionSuffix : versionSuffix , generateConstructor : true ) ;
114128
115- moduleGenerator . AddPathsAsEndpoints ( group ) ;
129+ moduleGenerator . AddPathsAsEndpoints ( group , eventGroup ) ;
116130 _moduleProperties . Add ( moduleGenerator . FieldAndProperty ) ;
117131 _moduleClasses . Add ( moduleGenerator . Class ) ;
118132 Console . WriteLine ( $ "League Client: Generated client module for module { moduleGenerator . ModuleName } .") ;
119133 }
120134 }
121135
122- public virtual void AddGroupsAsNestedClassesWithEndpoints ( IEnumerable < IGrouping < string ? , Path > > groupedPaths , string ? className = null )
136+ public virtual void AddGroupsAsNestedClassesWithEndpoints ( IEnumerable < IGrouping < string ? , Path > > groupedPaths , IEnumerable < IGrouping < string , KeyValuePair < string , string > > > groupedEvents , string ? className = null )
123137 {
124138 // Root group
125139 var nullGroup = groupedPaths . FirstOrDefault ( g => g . Key == null ) ;
@@ -129,13 +143,14 @@ public virtual void AddGroupsAsNestedClassesWithEndpoints(IEnumerable<IGrouping<
129143
130144 {
131145 var lolGroups = groupedPaths . Where ( g => g is { Key : not null , Key : not "lol-tft" } && g . Key . StartsWith ( "lol-" ) ) ;
146+ var lolEvents = groupedEvents . Where ( g => g . Key . StartsWith ( "lol-" ) ) ;
132147 var generator = new LeagueClientEndpointsGenerator ( "LeagueOfLegendsClient" , Enums , true ) ;
133148 generator . Class = generator . Class . AddMembers (
134149 InternalConstructorDeclaration ( "LeagueOfLegendsClient" )
135150 . WithBody ( Block ( ) )
136151 . WithParameter ( LEAGUECLIENTBASE_CLASS_IDENTIFIER , "leagueClient" )
137- . WithBaseConstructorInitializer ( "leagueClient.HttpClient" ) ) ;
138- generator . _addGroupsAsNestedClassesWithEndpoints ( lolGroups ) ;
152+ . WithBaseConstructorInitializer ( "leagueClient.HttpClient" , "leagueClient.EventRouter" ) ) ;
153+ generator . _addGroupsAsNestedClassesWithEndpoints ( lolGroups , lolEvents ) ;
139154 generator . _addNestedMembersToClass ( ) ;
140155 Class = Class . AddMembers ( generator . Class ) ;
141156 }
@@ -147,14 +162,14 @@ public virtual void AddGroupsAsNestedClassesWithEndpoints(IEnumerable<IGrouping<
147162 InternalConstructorDeclaration ( "TeamfightTacticsClient" )
148163 . WithBody ( Block ( ) )
149164 . WithParameter ( LEAGUECLIENTBASE_CLASS_IDENTIFIER , "leagueClient" )
150- . WithBaseConstructorInitializer ( "leagueClient.HttpClient" ) ) ;
165+ . WithBaseConstructorInitializer ( "leagueClient.HttpClient" , "leagueClient.EventRouter" ) ) ;
151166 generator . AddPathsAsEndpoints ( tftPaths ) ;
152167 Class = Class . AddMembers ( generator . Class . AddModifiers ( Token ( SyntaxKind . PartialKeyword ) ) ) ;
153168 }
154169
155170 groupedPaths = groupedPaths . Where ( g => g is { Key : not null , Key : not "lol-tft" } && ! g . Key . StartsWith ( "lol-" ) ) ;
156171
157- _addGroupsAsNestedClassesWithEndpoints ( groupedPaths , className ) ;
172+ _addGroupsAsNestedClassesWithEndpoints ( groupedPaths , null , className ) ;
158173 }
159174
160175 protected override EndpointDefinition ? GetMethodObjectToEndpointDefinition ( LcuMethodObject getMethodObject , string path , LcuPathObject pathObject )
@@ -183,6 +198,12 @@ public virtual void AddGroupsAsNestedClassesWithEndpoints(IEnumerable<IGrouping<
183198 else
184199 path = "\" " + path + "\" " ;
185200
201+ if ( _eventGroup != null && _eventGroup . Any ( e => e . Key . EventEqualsPath ( path ) ) ) // TODO: Fix match
202+ {
203+ var @event = _eventGroup . First ( e => e . Key . EventEqualsPath ( path ) ) ;
204+ Class = Class . AddMembers ( LeagueClientEvent . RmsEvent ( @event . Key , nameFromPath , returnType ) ) ;
205+ }
206+
186207 return new EndpointDefinition ( "Get" + nameFromPath , returnType , "HttpClient" , baseMethod , typeArgument , path , null , pathParameters ) ;
187208 }
188209
@@ -204,6 +225,7 @@ public override string GenerateCode()
204225 _addNestedMembersToClass ( ) ;
205226 var @namespace = NamespaceDeclaration ( "RiotGames.LeagueOfLegends.LeagueClient" ) ;
206227 @namespace = @namespace . AddSystemDynamicUsing ( ) ;
228+ @namespace = @namespace . AddUsing ( "RiotGames.Messaging" ) ;
207229
208230 @namespace = @namespace . AddMembers ( Class ) ;
209231
@@ -251,10 +273,13 @@ public LeagueClientModuleGenerator(string moduleName, string[] enums, bool metho
251273
252274 if ( generateConstructor )
253275 {
254- FieldDeclarationSyntax httpClientField = InternalReadOnlyFieldDeclaration ( "LeagueClientHttpClient" , "HttpClient" ) ;
255- Class = Class . AddMembers ( httpClientField ) ;
276+ var httpClientField = InternalReadOnlyFieldDeclaration ( "LeagueClientHttpClient" , "HttpClient" ) ;
277+ var eventRouterField = InternalReadOnlyFieldDeclaration ( "RmsEventRouter" , "EventRouter" ) ;
278+ Class = Class . AddMembers ( httpClientField , eventRouterField ) ;
256279
257- var constructor = InternalConstructorDeclaration ( ClassName , LEAGUECLIENTBASE_CLASS_IDENTIFIER , "leagueClient" , "HttpClient" , "HttpClient" ) ;
280+ var constructor = InternalConstructorDeclaration ( ClassName , LEAGUECLIENTBASE_CLASS_IDENTIFIER , "leagueClient" ,
281+ "HttpClient" , "HttpClient" ,
282+ "EventRouter" , "EventRouter" ) ;
258283 Class = Class . AddMembers ( constructor ) ;
259284 }
260285
@@ -306,9 +331,15 @@ protected override string GetNameFromPath(string path, bool isArrayResponse)
306331
307332 public MemberDeclarationSyntax [ ] FieldAndProperty => new MemberDeclarationSyntax [ ] { _fieldDeclaration , _propertyDeclaration } ;
308333
309- public override void AddGroupsAsNestedClassesWithEndpoints ( IEnumerable < IGrouping < string ? , Path > > groupedPaths , string ? className = null ) => throw new NotImplementedException ( ) ;
334+ public override void AddGroupsAsNestedClassesWithEndpoints ( IEnumerable < IGrouping < string ? , Path > > groupedPaths , IEnumerable < IGrouping < string , KeyValuePair < string , string > > > groupedEvents , string ? className = null ) => throw new NotImplementedException ( ) ;
310335
311336 public override string GenerateCode ( ) => throw new NotImplementedException ( ) ;
337+
338+ internal void AddPathsAsEndpoints ( IGrouping < string ? , Path > group , IGrouping < string , KeyValuePair < string , string > > ? eventGroup )
339+ {
340+ _eventGroup = eventGroup ;
341+ AddPathsAsEndpoints ( group ) ;
342+ }
312343 }
313344 }
314345}
0 commit comments