/// <summary> /// Изменение состояния модема /// </summary> /// <param name="stateChangedEventArgs"></param> public void ChangeModemState(ModemStateChangedEventArgs stateChangedEventArgs) { if (stateChangedEventArgs == null) { throw new ArgumentNullException(nameof(stateChangedEventArgs)); } //изменяем состояние this.State = stateChangedEventArgs.NewState; //вызываем событие ModemStateChanged?.Invoke(this, stateChangedEventArgs); }
/// <summary> /// Звонок модема на необходимый номер /// </summary> /// <param name="number"></param> /// <returns></returns> public async Task CallNumberAsync(PhoneNumber number) { if (number == null) { throw new ArgumentNullException(nameof(number)); } //изменяем статус у номера var numberStateArgs = new PhoneNumberStateChangedEventArgs($"{number.Number} набирается...", number.State, NumberStatesType.Calling); number.ChangeNumberState(numberStateArgs); //изменяем статус у модема var modemStatusArgs = new ModemStateChangedEventArgs($"{this.Name} набирает {number.Number}", this.State, ModemStatesType.Busy); this.ChangeModemState(modemStatusArgs); //>>>Начало моделирования работы модема //типа набираем номер и ждем ответа await Task.Delay(TimeSpan.FromSeconds(1)); //номер может быть занят bool numberIsBusy = _random.Next(10) % 2 == 0 ? true : false; if (numberIsBusy) { //изменяем статус у номера numberStateArgs = new PhoneNumberStateChangedEventArgs($"{number.Number} занят!", number.State, NumberStatesType.WaitingCall); number.ChangeNumberState(numberStateArgs); //изменяем статус у модема modemStatusArgs = new ModemStateChangedEventArgs($"{this.Name} номер {number.Number} занят!", this.State, ModemStatesType.Free); this.ChangeModemState(modemStatusArgs); //выходим return; } //типа соединяемся //изменяем статус у номера numberStateArgs = new PhoneNumberStateChangedEventArgs($"{number.Number} соединение...", number.State, NumberStatesType.Calling); number.ChangeNumberState(numberStateArgs); //изменяем статус у модема modemStatusArgs = new ModemStateChangedEventArgs($"{this.Name} соединяется по {number.Number}...", this.State, ModemStatesType.Busy); this.ChangeModemState(modemStatusArgs); await Task.Delay(TimeSpan.FromSeconds(1)); //типа соединились и идет приемо-передача данных //изменяем статус у номера numberStateArgs = new PhoneNumberStateChangedEventArgs($"{number.Number} cоединение установлено.", number.State, NumberStatesType.Calling); number.ChangeNumberState(numberStateArgs); //изменяем статус у модема modemStatusArgs = new ModemStateChangedEventArgs($"{this.Name} соединение установлено по {number.Number}.", this.State, ModemStatesType.Busy); this.ChangeModemState(modemStatusArgs); await Task.Delay(TimeSpan.FromSeconds(3)); //типа приемо-передача данных закончена //изменяем статус у номера numberStateArgs = new PhoneNumberStateChangedEventArgs($"{number.Number} обзвонен!", number.State, NumberStatesType.Called); number.ChangeNumberState(numberStateArgs); //изменяем статус у модема modemStatusArgs = new ModemStateChangedEventArgs($"{this.Name} звонок закончен по {number.Number}.", this.State, ModemStatesType.Free); this.ChangeModemState(modemStatusArgs); //<<<Конец моделирования работы модема }