Validate() 공개 메소드

public Validate ( ) : bool
리턴 bool
예제 #1
0
        public void Add(byte x)
        {
            if (IsErrored)
            {
                throw new SpheroPluginException("Response already errored. You cannot add more bytes to it.");
            }

            switch (_currentState)
            {
            case State.WaitingForSop1:
                if (x != 0xff)
                {
                    _currentState = State.ErrorHeader;
                    throw new SpheroPluginException("Unexpected packet SOP1 header byte {0}", x);
                }
                _response.StartOfPacket1 = x;
                _currentState++;
                break;

            case State.WaitingForSop2:
                if (x != 0xff && x != 0xfe)
                {
                    _currentState = State.ErrorHeader;
                    throw new SpheroPluginException("Unexpected packet SOP2 header byte {0}", x);
                }
                _response.StartOfPacket2 = x;
                _currentState++;
                break;

            case State.WaitingForMrsp:
                _response.MessageResponse = x;
                _currentState++;
                break;

            case State.WaitingForSeq:
                _response.SequenceNumber = x;
                _currentState++;
                break;

            case State.WaitingForDlen:
                _response.DataLength = x;
                _currentState++;
                break;

            case State.WaitingForPayloadAndCheckSum:
                if (_response.DataLength - _response.Payload.Count > 1)
                {
                    _response.Payload.Add(x);
                }
                else
                {
                    _response.CheckSum = x;
                    if (!_response.Validate())
                    {
                        _currentState = State.ErrorCheckSum;
                        throw new SpheroPluginException("CheckSum error in received packet");
                    }
                    _currentState++;
                }
                break;

            case State.Complete:
                _currentState = State.ErrorOverflow;
                throw new SpheroPluginException("You cannot add any more bytes to this complete response");

            case State.Error:
            case State.ErrorHeader:
            case State.ErrorCheckSum:
            case State.ErrorOverflow:
                // do nothing
                break;

            default:
                throw new ArgumentOutOfRangeException();
            }
        }