internal ReplyData RecieveViewChangeProposal(View proposedView) { Utils.Print("[o] Received View Change Proposal"); View view = viewManager.GetView(); int proposedViewId = proposedView.ViewId; Task irrelTask; if (ServerData.ServerUId.Equals(proposedView.ManagerUId) && view.ViewId < proposedView.ViewId) { viewManager.DisallowSelfPromotion(); isWaitingForCommit = true; irrelTask = WaitForViewChangeCommitTimeout(proposedViewId, 4000); return(new AcceptViewProposal(ServerData, view, mIdTable, tupleSpace)); } if (view.ViewId >= proposedViewId) { return(new RejectViewProposal(ServerData, view)); } lock (__acceptedViewLock) { int acceptedViewId = acceptedView.ViewId; if (acceptedViewId >= proposedView.ViewId) { return(new RejectViewProposal(ServerData, view)); } acceptedView = proposedView; } viewManager.DisallowSelfPromotion(); isWaitingForCommit = true; // Starts a timer to timeout in case a Commit for this particular proposed View doesn't arrive in time. // Ignores return value to stop warning. irrelTask = WaitForViewChangeCommitTimeout(proposedViewId, 4000); return(new AcceptViewProposal(ServerData, view, mIdTable, tupleSpace)); }