/// <exception cref="System.IO.IOException"/>
            public virtual ProtocolSignature GetProtocolSignature(string protocol, long clientVersion
                                                                  , int clientMethodsHashCode)
            {
                Type inter;

                try
                {
                    inter = (Type)GetType().GetGenericInterfaces()[0];
                }
                catch (Exception e)
                {
                    throw new IOException(e);
                }
                return(ProtocolSignature.GetProtocolSignature(clientMethodsHashCode, GetProtocolVersion
                                                                  (protocol, clientVersion), inter));
            }
Esempio n. 2
0
        /// <summary>Get a server protocol's signature</summary>
        /// <param name="server">server implementation</param>
        /// <param name="protocol">server protocol</param>
        /// <param name="clientVersion">client's version</param>
        /// <param name="clientMethodsHash">client's protocol's hash code</param>
        /// <returns>the server protocol's signature</returns>
        /// <exception cref="System.IO.IOException">if any error occurs</exception>
        public static ProtocolSignature GetProtocolSignature(VersionedProtocol server, string
                                                             protocol, long clientVersion, int clientMethodsHash)
        {
            Type inter;

            try
            {
                inter = (Type)Runtime.GetType(protocol);
            }
            catch (Exception e)
            {
                throw new IOException(e);
            }
            long serverVersion = server.GetProtocolVersion(protocol, clientVersion);

            return(ProtocolSignature.GetProtocolSignature(clientMethodsHash, serverVersion, inter
                                                          ));
        }
Esempio n. 3
0
        /// <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());
        }