示例#1
0
 public RepositoryState RegenerateState()
 {
     lock (this)
     {
         RepositoryState state = new RepositoryState(currentState.RevisionNumber() + 1);
         foreach (KeyValuePair <CacheKey, CachedBelief> entry in beliefCache)
         {
             state.Add(entry.Key, entry.Value.GetHash());
         }
         return(state);
     }
 }
        public void handleMessage(BSPMessage message)
        {
            RepositoryStateSerializer serializer    = new RepositoryStateSerializer();
            RepositoryState           incomingState = serializer.deserialize(message.getData());

            if (incomingState.RevisionNumber() > remoteState.RevisionNumber())
            {
                this.remoteState = incomingState;
                IEnumerable <CachedBelief> changedBeliefs = repo.Diff(remoteState);
                foreach (CachedBelief belief in changedBeliefs)
                {
                    protocol.post(belief);
                }
            }
        }
示例#3
0
        public NetworkBuffer serialize(RepositoryState state)
        {
            NetworkBuffer buffer = new NetworkBuffer(HEADER_SIZE + (state.Size() * BELIEF_SIZE));

            buffer.writeInt32(COMMIT_OFFSET, state.RevisionNumber());
            buffer.writeInt32(NUM_BELIEFS_OFFSET, state.Size());

            int offset = HEADER_SIZE;

            foreach (RepositoryState.RepositoryObject belief in state.GetObjects())
            {
                buffer.writeByte(offset + TYPE_OFFSET, (byte)belief.key.getBeliefType());
                buffer.writeInt32(offset + CUSTOM_TYPE_OFFSET, belief.key.getCustomType());
                buffer.writeInt32(offset + BELIEF_ID_OFFSET, belief.key.getBeliefID());

                byte[] hashBytes = belief.hash.GetBytes();
                buffer.writeBytes(hashBytes, 0, offset + DIGEST_OFFSET, hashBytes.Length);
            }

            return(buffer);
        }