public static T Resolve <T>(this IProtocolConverter protocolConverter, byte[] source, ref int index, DataFlag checkDataFlag) { var dataContext = protocolConverter.Resolve(source, ref index); if (dataContext.DataFlag != checkDataFlag) { throw new ProtocolException($"Data flag should be '{checkDataFlag}' bus is ''{dataContext.DataFlag}", ErrorCode.BadRequest); } return((T)dataContext.Data); }
protected virtual void HandlePacket(byte[] readBuffer, int length, CancellationTokenSource cancellationTokenSource) { ThrowClosed(); var stop = ProtocolWatch.Start("rp-receive-request"); var index = 0; var converterHeader = protocolConverter.Resolve <ConverterHeader>(readBuffer, ref index); var requestHeader = protocolConverter.Resolve <RequestHeader>(readBuffer, ref index); if (converterHeader.VersionMajor != 1) { throw new ProtocolException(ErrorCode.VersionNotSupported); } if (SecurityInject != null) { var securityContext = new SecurityInjectContext() { ConverterHeader = converterHeader, RequestHeader = requestHeader, HeaderEndIndex = index, Data = sendBuffer, Length = length }; SecurityInject?.ReceiveSecurity(ResolverSession, securityContext); length = securityContext.Length; } var resolvedContexts = protocolConverter.Resolve(readBuffer, ref index, length); var resolvedContent = new DataContent(resolvedContexts); if (DataInject != null) { var injectContext = new DataInjectContext() { ConverterHeader = converterHeader, RequestHeader = requestHeader, DataContent = resolvedContent, }; DataInject.ReceiveData(ResolverSession, injectContext); } stop(); var requestId = requestHeader.RequestId; if (requestHeader.RequestType == RequestType.Response) { HandleResponse(resolvedContent, requestId, requestHeader.CanBeCached, index); } else if (requestHeader.RequestType == RequestType.Request) { HandleRequest(resolvedContent, requestId, index, cancellationTokenSource); } else { throw new ProtocolException(ErrorCode.BadRequest); } }
public static T Resolve <T>(this IProtocolConverter protocolConverter, byte[] source, ref int index) { var dataContext = protocolConverter.Resolve(source, ref index); return((T)dataContext.Data); }