예제 #1
0
        public virtual void Update(GlobalSession globalSession, LocalOperationId localOperationId, long logIndex)
        {
            LocalSessionTracker localSessionTracker = ValidateGlobalSessionAndGetLocalSessionTracker(globalSession);

            localSessionTracker.ValidateAndTrackOperation(localOperationId);
            this._logIndex = logIndex;
        }
예제 #2
0
        private LocalSessionTracker ValidateGlobalSessionAndGetLocalSessionTracker(GlobalSession globalSession)
        {
            LocalSessionTracker localSessionTracker = _sessionTrackers[globalSession.Owner()];

            if (localSessionTracker == null || !localSessionTracker.GlobalSessionId.Equals(globalSession.SessionId()))
            {
                localSessionTracker = new LocalSessionTracker(globalSession.SessionId(), new Dictionary <long, long>());
                _sessionTrackers[globalSession.Owner()] = localSessionTracker;
            }

            return(localSessionTracker);
        }
예제 #3
0
        /// <summary>
        /// Tracks the operation and returns true iff this operation should be allowed.
        /// </summary>
        public virtual bool ValidateOperation(GlobalSession globalSession, LocalOperationId localOperationId)
        {
            LocalSessionTracker existingSessionTracker = _sessionTrackers[globalSession.Owner()];

            if (IsNewSession(globalSession, existingSessionTracker))
            {
                return(IsFirstOperation(localOperationId));
            }
            else
            {
                return(existingSessionTracker.IsValidOperation(localOperationId));
            }
        }
예제 #4
0
        public override bool Equals(object o)
        {
            if (this == o)
            {
                return(true);
            }
            if (o == null || this.GetType() != o.GetType())
            {
                return(false);
            }

            GlobalSession that = ( GlobalSession )o;

            if (!_sessionId.Equals(that._sessionId))
            {
                return(false);
            }
            return(_owner.Equals(that._owner));
        }
예제 #5
0
 private bool IsNewSession(GlobalSession globalSession, LocalSessionTracker existingSessionTracker)
 {
     return(existingSessionTracker == null || !existingSessionTracker.GlobalSessionId.Equals(globalSession.SessionId()));
 }
예제 #6
0
 public LocalSessionPool(GlobalSession globalSession)
 {
     this._globalSession = globalSession;
 }
예제 #7
0
 private void InitializeInstanceFields()
 {
     _globalSession = new GlobalSession(System.Guid.randomUUID(), _memberId);
 }