@@ -29,24 +29,26 @@ public FahrenService(FahrenRepository fahrenRepository, IMapper mapper, Continuo
2929 public override Task < FahrenResponse > FahrenByTrainNumber ( FahrenRequestByTrainNumber request , ServerCallContext context )
3030 {
3131 List < FahrenTransferEntry > entries = _fahrenRepository . ListEntriesByLinieTrain ( request . LinieTrainId ) . ToList ( ) ;
32-
32+
3333 RemoveDuplicates ( entries ) ;
3434 CorrectIndices ( entries ) ;
35-
35+
3636 FahrenResponse response = new ( ) ;
3737 response . Entries . AddRange ( _mapper . Map < List < FahrenEntry > > ( entries ) ) ;
38+
3839 return Task . FromResult ( response ) ;
3940 }
4041
4142 public override Task < FahrenResponse > FahrenByLinie ( FahrenRequestByLinie request , ServerCallContext context )
4243 {
4344 List < FahrenTransferEntry > entries = _fahrenRepository . ListEntriesByLinie ( request . LinieId ) . ToList ( ) ;
44-
45+
4546 RemoveDuplicates ( entries ) ;
4647 CorrectIndices ( entries ) ;
47-
48+
4849 FahrenResponse response = new ( ) ;
4950 response . Entries . AddRange ( _mapper . Map < List < FahrenEntry > > ( entries ) ) ;
51+
5052 return Task . FromResult ( response ) ;
5153 }
5254
@@ -59,10 +61,12 @@ public override Task<FahrenResponse> FahrenByStrecken(FahrenRequestByStrecken re
5961
6062 FahrenResponse response = new ( ) ;
6163 response . Entries . AddRange ( _mapper . Map < List < FahrenEntry > > ( entries ) ) ;
64+
6265 return Task . FromResult ( response ) ;
6366 }
6467
65- private void RemoveDuplicates ( List < FahrenTransferEntry > entries ) {
68+ private void RemoveDuplicates ( List < FahrenTransferEntry > entries )
69+ {
6670 var duplicateEntries = entries . Where ( x => x . Betriebspunkt is not null ) . GroupBy ( x => x . Betriebspunkt . Id ) . Where ( x => x . Count ( ) > 1 ) . ToList ( ) ;
6771
6872 foreach ( var item in duplicateEntries )
@@ -90,7 +94,15 @@ private void RemoveDuplicates(List<FahrenTransferEntry> entries) {
9094
9195 private void CorrectIndices ( List < FahrenTransferEntry > entries )
9296 {
93- for ( int i = 0 ; i < entries . Count ; i ++ )
97+ List < Guid > alreadyHandledIds = new ( ) ;
98+ var originalIndices = entries . Where ( x => x . OverrideIndex . HasValue ) . Select ( x =>
99+ new
100+ {
101+ Index = entries . IndexOf ( x ) , Id = x . SignalZuordnung ! . SignalId
102+ }
103+ ) . ToDictionary ( x => x . Id , x => x . Index ) ;
104+
105+ for ( int i = entries . Count - 1 ; i >= 0 ; i -- )
94106 {
95107 var currentEntry = entries [ i ] ;
96108
@@ -99,51 +111,84 @@ private void CorrectIndices(List<FahrenTransferEntry> entries)
99111 continue ;
100112 }
101113
114+ if ( currentEntry . OverrideIndex . Value <= 0 )
115+ {
116+ continue ;
117+ }
118+
119+ if ( alreadyHandledIds . Contains ( currentEntry . SignalZuordnung ! . SignalId ) )
120+ {
121+ continue ;
122+ }
123+
124+ alreadyHandledIds . Add ( currentEntry . SignalZuordnung ! . SignalId ) ;
125+
102126 int currentEntryOverrideIndex = currentEntry . OverrideIndex . Value ;
103- var newIndex = i + currentEntryOverrideIndex ;
127+ int newIndex = originalIndices [ currentEntry . SignalZuordnung ! . SignalId ] + currentEntryOverrideIndex ;
128+
129+ entries . Insert ( newIndex + 1 , currentEntry ) ;
130+ entries . RemoveAt ( i ) ;
104131
105- if ( newIndex > i )
132+ i ++ ;
133+ }
134+
135+ for ( int i = 0 ; i < entries . Count ; i ++ )
136+ {
137+ var currentEntry = entries [ i ] ;
138+
139+ if ( currentEntry . OverrideIndex is null )
106140 {
107- entries . Insert ( newIndex , currentEntry ) ;
108- entries . RemoveAt ( i ) ;
141+ continue ;
142+ }
109143
110- // Da ein Element eingefügt wurde, muss der Index für das nächste Element erhöht werden.
111- i ++ ;
144+ if ( currentEntry . OverrideIndex . Value > 0 )
145+ {
146+ continue ;
112147 }
113- else
148+
149+ if ( alreadyHandledIds . Contains ( currentEntry . SignalZuordnung ! . SignalId ) )
114150 {
115- entries . Insert ( newIndex , currentEntry ) ;
116- entries . RemoveAt ( i + 1 ) ;
117- i -- ;
151+ continue ;
118152 }
153+
154+ alreadyHandledIds . Add ( currentEntry . SignalZuordnung ! . SignalId ) ;
155+
156+ int currentEntryOverrideIndex = currentEntry . OverrideIndex . Value ;
157+ int newIndex = originalIndices [ currentEntry . SignalZuordnung ! . SignalId ] + currentEntryOverrideIndex ;
158+
159+ entries . Insert ( newIndex , currentEntry ) ;
160+ entries . RemoveAt ( i + 1 ) ;
161+
162+ i -- ;
119163 }
120164 }
121165
122166 public override Task < CaptureMessageResponse > CaptureRealtimeMessages ( CaptureMessage request , ServerCallContext context )
123167 {
124168 CaptureMessageResponse response = new ( ) ;
125169 response . Messages . AddRange ( _continuousConnection . GetMessagesInQueue ( request . ClientId ) ) ;
170+
126171 return Task . FromResult ( response ) ;
127172 }
128173
129174 public override Task < Empty > RegisterOnTrain ( RegisterOnTrainRequest request , ServerCallContext context )
130175 {
131176 _continuousConnection . RegisterTrain ( request . ClientId , request . TrainNumber ) ;
132-
177+
133178 return Task . FromResult ( new Empty ( ) ) ;
134179 }
135180
136181 public override Task < Empty > UnregisterOnTrain ( UnregisterOnTrainRequest request , ServerCallContext context )
137182 {
138183 _continuousConnection . UnregisterTrain ( request . ClientId ) ;
139-
184+
140185 return Task . FromResult ( new Empty ( ) ) ;
141186 }
142187
143188 public override Task < Empty > DisconnectClient ( DisconnectClientRequest request , ServerCallContext context )
144189 {
145190 _continuousConnection . DisconnectTrainOperator ( request . ClientId ) ;
146-
191+
147192 return Task . FromResult ( new Empty ( ) ) ;
148193 }
149194
@@ -163,4 +208,4 @@ private List<FahrenTransferEntry> GetTrimmedEntries(FahrenRequestStrecke strecke
163208
164209 return entries ;
165210 }
166- }
211+ }
0 commit comments