/// <exception cref="System.IO.IOException"/> private void FetchServerMethods(MethodInfo method) { long clientVersion; clientVersion = RPC.GetProtocolVersion(method.DeclaringType); int clientMethodsHash = ProtocolSignature.GetFingerprint(method.DeclaringType.GetMethods ()); ProtocolSignature serverInfo = ((VersionedProtocol)proxy).GetProtocolSignature(RPC .GetProtocolName(protocol), clientVersion, clientMethodsHash); long serverVersion = serverInfo.GetVersion(); if (serverVersion != clientVersion) { throw new RPC.VersionMismatch(protocol.FullName, clientVersion, serverVersion); } int[] serverMethodsCodes = serverInfo.GetMethods(); if (serverMethodsCodes != null) { serverMethods = new HashSet <int>(serverMethodsCodes.Length); foreach (int m in serverMethodsCodes) { this.serverMethods.AddItem(Extensions.ValueOf(m)); } } serverMethodsFetched = true; }
private static bool MethodExists(int methodHash, long version, IDictionary <long, ProtocolSignature> versionMap) { ProtocolSignature sig = versionMap[version]; if (sig != null) { foreach (int m in sig.GetMethods()) { if (m == methodHash) { return(true); } } } return(false); }
/// <exception cref="Com.Google.Protobuf.ServiceException"/> public virtual ProtocolInfoProtos.GetProtocolSignatureResponseProto GetProtocolSignature (RpcController controller, ProtocolInfoProtos.GetProtocolSignatureRequestProto request ) { ProtocolInfoProtos.GetProtocolSignatureResponseProto.Builder builder = ProtocolInfoProtos.GetProtocolSignatureResponseProto .NewBuilder(); string protocol = request.GetProtocol(); string rpcKind = request.GetRpcKind(); long[] versions; try { versions = GetProtocolVersionForRpcKind(RPC.RpcKind.ValueOf(rpcKind), protocol); } catch (TypeLoadException e1) { throw new ServiceException(e1); } if (versions == null) { return((ProtocolInfoProtos.GetProtocolSignatureResponseProto)builder.Build()); } foreach (long v in versions) { ProtocolInfoProtos.ProtocolSignatureProto.Builder sigBuilder = ProtocolInfoProtos.ProtocolSignatureProto .NewBuilder(); sigBuilder.SetVersion(v); try { ProtocolSignature signature = ProtocolSignature.GetProtocolSignature(protocol, v); foreach (int m in signature.GetMethods()) { sigBuilder.AddMethods(m); } } catch (TypeLoadException e) { throw new ServiceException(e); } builder.AddProtocolSignature(((ProtocolInfoProtos.ProtocolSignatureProto)sigBuilder .Build())); } return((ProtocolInfoProtos.GetProtocolSignatureResponseProto)builder.Build()); }