Beispiel #1
0
        public virtual SessionToken CheckForUpdate(string currentVersion)
        {
            UninterruptableMonitor.Enter(syncLock);
            try
            {
                EnsureOpen();
                if (currentRevision is null)
                {
                    return(null); // no published revisions yet
                }
                if (currentVersion != null && currentRevision.Revision.CompareTo(currentVersion) <= 0)
                {
                    return(null); // currentVersion is newer or equal to latest published revision
                }
                // currentVersion is either null or older than latest published revision
                currentRevision.IncRef();

                string       sessionID = sessionToken.IncrementAndGet().ToString();
                SessionToken token     = new SessionToken(sessionID, currentRevision.Revision);
                sessions[sessionID] = new ReplicationSession(token, currentRevision);
                return(token);
            }
            finally
            {
                UninterruptableMonitor.Exit(syncLock);
            }
        }
        public virtual Stream ObtainFile(string sessionId, string source, string fileName)
        {
            lock (padlock)
            {
                EnsureOpen();

                ReplicationSession session = sessions[sessionId];
                if (session != null && session.IsExpired(ExpirationThreshold))
                {
                    ReleaseSession(sessionId);
                    session = null;
                }
                // session either previously expired, or we just expired it
                if (session == null)
                {
                    throw new SessionExpiredException(string.Format("session ({0}) expired while obtaining file: source={1} file={2}", sessionId, source, fileName));
                }
                sessions[sessionId].MarkAccessed();
                return(session.Revision.Revision.Open(source, fileName));
            }
        }