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); } } }
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); }