private void TransitionToIdle() { StopTimer(); _state = SlaveSimulatorState.Idle; Console.WriteLine(HexFormatter.FormatHex(_sampleBuffer.ToArray())); _sampleBuffer.Clear(); Console.WriteLine("Back to idle"); }
void OnSample(object sender, SampleEventArgs e) { switch (_state) { case SlaveSimulatorState.Idle: _sampleBuffer.Add(e.Sample); if (DoesSlaveExist(e.Sample)) { _state = SlaveSimulatorState.ListeningToRequest; StartTimer(_characterTimeout); Console.WriteLine("Starting to listen to our own slave request..."); } else { _state = SlaveSimulatorState.ListeningToOtherSlave; StartTimer(_messageTimeout); Console.WriteLine("Starting to listen to someone else's request..."); } break; case SlaveSimulatorState.ListeningToRequest: _sampleBuffer.Add(e.Sample); StartTimer(_characterTimeout); break; case SlaveSimulatorState.ListeningToOtherSlave: _sampleBuffer.Add(e.Sample); StartTimer(_messageTimeout); break; default: throw new InvalidOperationException(string.Format("Unexpected state '{0}'", _state)); } }