Ejemplo n.º 1
0
        public void Usage(CommonResponseCode responseCode, byte responseCode0, byte responseCode1)
        {
            var commonErrorResponse = new CommonErrorResponse(responseCode, 0, 0, 0, 0, 0);

            commonErrorResponse.ResponseCode0.Should().Be(responseCode0);
            commonErrorResponse.ResponseCode1.Should().Be(responseCode1);
        }
        public byte[] HandleReceivedBytes(byte[] receivedBytes)
        {
            var       requestType0 = receivedBytes[1];
            var       requestType1 = receivedBytes[2];
            var       requestType2 = receivedBytes[3];
            var       requestType3 = receivedBytes[4];
            var       counter      = BitConverter.ToUInt16(receivedBytes, 7);
            IResponse response;

            try
            {
                var request     = _requestParser.Parse(receivedBytes);
                var requestType = (RequestTypeAttribute)request.GetType().GetCustomAttributes(typeof(RequestTypeAttribute), true)[0];
                if (request is IConnectionRequiredRequest connectionRequiredRequest && !_connectionHandler.IsConnected(new[] { connectionRequiredRequest.ConnectionIdentifier0, connectionRequiredRequest.ConnectionIdentifier1, connectionRequiredRequest.ConnectionIdentifier2, connectionRequiredRequest.ConnectionIdentifier3 }))
                {
                    response = new CommonErrorResponse(CommonResponseCode.NotConnected, counter, requestType0, requestType1, requestType2, requestType3);
                }
                else if (!_requestHandlerTypes.TryGetValue(requestType, out var requestHandlerType))
                {
                    response = new CommonErrorResponse(CommonResponseCode.UnknownCommand, counter, requestType0, requestType1, requestType2, requestType3);
                }
                else
                {
                    var requestHandler = (IRequestHandler)_serviceLocator.Locate(requestHandlerType);
                    response = requestHandler.Handle(request);
                }
            }