コード例 #1
0
 /// <summary>Get a server protocol's signature</summary>
 /// <param name="clientMethodsHashCode">client protocol methods hashcode</param>
 /// <param name="serverVersion">server protocol version</param>
 /// <param name="protocol">protocol</param>
 /// <returns>the server's protocol signature</returns>
 public static ProtocolSignature GetProtocolSignature(int clientMethodsHashCode, long
                                                      serverVersion, Type protocol)
 {
     // try to get the finger print & signature from the cache
     ProtocolSignature.ProtocolSigFingerprint sig = GetSigFingerprint(protocol, serverVersion
                                                                      );
     // check if the client side protocol matches the one on the server side
     if (clientMethodsHashCode == sig.fingerprint)
     {
         return(new ProtocolSignature(serverVersion, null));
     }
     // null indicates a match
     return(sig.signature);
 }
コード例 #2
0
        /// <summary>Return a protocol's signature and finger print from cache</summary>
        /// <param name="protocol">a protocol class</param>
        /// <param name="serverVersion">protocol version</param>
        /// <returns>its signature and finger print</returns>
        private static ProtocolSignature.ProtocolSigFingerprint GetSigFingerprint(Type protocol
                                                                                  , long serverVersion)
        {
            string protocolName = RPC.GetProtocolName(protocol);

            lock (ProtocolFingerprintCache)
            {
                ProtocolSignature.ProtocolSigFingerprint sig = ProtocolFingerprintCache[protocolName
                                                               ];
                if (sig == null)
                {
                    int[] serverMethodHashcodes = GetFingerprints(protocol.GetMethods());
                    sig = new ProtocolSignature.ProtocolSigFingerprint(new ProtocolSignature(serverVersion
                                                                                             , serverMethodHashcodes), GetFingerprint(serverMethodHashcodes));
                    ProtocolFingerprintCache[protocolName] = sig;
                }
                return(sig);
            }
        }