1
1
using Avalonia . Media ;
2
+ using Microsoft . Extensions . DependencyInjection ;
2
3
using ReactiveUI ;
4
+ using Splat ;
3
5
using System ;
4
6
using System . Collections . Generic ;
5
7
using System . Linq ;
9
11
using System . Threading . Tasks ;
10
12
using System . Timers ;
11
13
using TrafficLights . Enums ;
14
+ using TrafficLights . Interfaces ;
12
15
using TrafficLights . Models ;
13
16
14
17
namespace TrafficLights . ViewModels
@@ -121,12 +124,22 @@ public string ConsoleText
121
124
/// </summary>
122
125
private System . Timers . Timer _automatTimer ;
123
126
127
+ /// <summary>
128
+ /// Интерфейс для управления огнями реального светофора
129
+ /// </summary>
130
+ private readonly ITrafficLights _trafficLights ;
131
+
124
132
/// <summary>
125
133
/// Конструктор
126
134
/// </summary>
127
135
public MainWindowViewModel ( TrafficLightsModel trafficLightsModel )
128
136
{
129
137
_model = trafficLightsModel ;
138
+
139
+ // Запоминаем конкретный светофор
140
+ _trafficLights = Program . Di . GetService < ITrafficLights > ( ) ;
141
+ _trafficLights . Setup ( _model ) ;
142
+
130
143
131
144
PressRedCommand = ReactiveCommand . Create ( OnRedPressed ) ; // Связывание метода с командой
132
145
PressYellowCommand = ReactiveCommand . Create ( OnYellowPressed ) ;
@@ -213,9 +226,9 @@ private void OnCheckPressed()
213
226
/// </summary>
214
227
private void OnBlinkPressed ( )
215
228
{
216
- _model . RedLightState = LightStateEnum . Blinking ;
217
- _model . YellowLightState = LightStateEnum . Blinking ;
218
- _model . GreenLightState = LightStateEnum . Blinking ;
229
+ _trafficLights . ChangeLightState ( LightEnum . Red , LightStateEnum . Blinking ) ;
230
+ _trafficLights . ChangeLightState ( LightEnum . Yellow , LightStateEnum . Blinking ) ;
231
+ _trafficLights . ChangeLightState ( LightEnum . Green , LightStateEnum . Blinking ) ;
219
232
}
220
233
221
234
/// <summary>
@@ -319,9 +332,9 @@ private void OnAutomatStep(Object source, ElapsedEventArgs e)
319
332
320
333
_model . CurrentState = TrafficLightState . BlinkingGreen ;
321
334
322
- _model . GreenLightState = LightStateEnum . Blinking ;
323
- _model . YellowLightState = LightStateEnum . Off ;
324
- _model . RedLightState = LightStateEnum . Off ;
335
+ _trafficLights . ChangeLightState ( LightEnum . Green , LightStateEnum . Blinking ) ;
336
+ _trafficLights . ChangeLightState ( LightEnum . Yellow , LightStateEnum . Off ) ;
337
+ _trafficLights . ChangeLightState ( LightEnum . Red , LightStateEnum . Off ) ;
325
338
326
339
SetTimerInterval ( TrafficLightsModel . BlinkingGreenDuration ) ;
327
340
break ;
@@ -331,9 +344,9 @@ private void OnAutomatStep(Object source, ElapsedEventArgs e)
331
344
332
345
_model . CurrentState = TrafficLightState . Yellow ;
333
346
334
- _model . GreenLightState = LightStateEnum . Off ;
335
- _model . YellowLightState = LightStateEnum . On ;
336
- _model . RedLightState = LightStateEnum . Off ;
347
+ _trafficLights . ChangeLightState ( LightEnum . Green , LightStateEnum . Off ) ;
348
+ _trafficLights . ChangeLightState ( LightEnum . Yellow , LightStateEnum . On ) ;
349
+ _trafficLights . ChangeLightState ( LightEnum . Red , LightStateEnum . Off ) ;
337
350
338
351
SetTimerInterval ( TrafficLightsModel . YellowDuration ) ;
339
352
break ;
@@ -343,9 +356,9 @@ private void OnAutomatStep(Object source, ElapsedEventArgs e)
343
356
344
357
_model . CurrentState = TrafficLightState . Red ;
345
358
346
- _model . GreenLightState = LightStateEnum . Off ;
347
- _model . YellowLightState = LightStateEnum . Off ;
348
- _model . RedLightState = LightStateEnum . On ;
359
+ _trafficLights . ChangeLightState ( LightEnum . Green , LightStateEnum . Off ) ;
360
+ _trafficLights . ChangeLightState ( LightEnum . Yellow , LightStateEnum . Off ) ;
361
+ _trafficLights . ChangeLightState ( LightEnum . Red , LightStateEnum . On ) ;
349
362
350
363
SetTimerInterval ( TrafficLightsModel . RedDuration ) ;
351
364
break ;
@@ -355,9 +368,9 @@ private void OnAutomatStep(Object source, ElapsedEventArgs e)
355
368
356
369
_model . CurrentState = TrafficLightState . RedAndYellow ;
357
370
358
- _model . GreenLightState = LightStateEnum . Off ;
359
- _model . YellowLightState = LightStateEnum . On ;
360
- _model . RedLightState = LightStateEnum . On ;
371
+ _trafficLights . ChangeLightState ( LightEnum . Green , LightStateEnum . Off ) ;
372
+ _trafficLights . ChangeLightState ( LightEnum . Yellow , LightStateEnum . On ) ;
373
+ _trafficLights . ChangeLightState ( LightEnum . Red , LightStateEnum . On ) ;
361
374
362
375
SetTimerInterval ( TrafficLightsModel . RedAndYellowDuration ) ;
363
376
break ;
@@ -367,9 +380,9 @@ private void OnAutomatStep(Object source, ElapsedEventArgs e)
367
380
368
381
_model . CurrentState = TrafficLightState . Green ;
369
382
370
- _model . GreenLightState = LightStateEnum . On ;
371
- _model . YellowLightState = LightStateEnum . Off ;
372
- _model . RedLightState = LightStateEnum . Off ;
383
+ _trafficLights . ChangeLightState ( LightEnum . Green , LightStateEnum . On ) ;
384
+ _trafficLights . ChangeLightState ( LightEnum . Yellow , LightStateEnum . Off ) ;
385
+ _trafficLights . ChangeLightState ( LightEnum . Red , LightStateEnum . Off ) ;
373
386
374
387
SetTimerInterval ( TrafficLightsModel . GreenDuration ) ;
375
388
break ;
0 commit comments