/// <summary> /// Handles operation MoveInterestArea: Moves one of the actor's InterestArea. /// </summary> public OperationResponse OperationMoveInterestArea(PeerBase peer, OperationRequest request) { var operation = new MoveInterestArea(peer.Protocol, request); if (!operation.IsValid) { return(new OperationResponse(request.OperationCode) { ReturnCode = (int)ReturnCode.InvalidOperationParameter, DebugMessage = operation.GetErrorMessage() }); } operation.OnStart(); InterestArea interestArea; if (this.TryGetInterestArea(operation.InterestAreaId, out interestArea)) { lock (interestArea.SyncRoot) { interestArea.Position = operation.Position; interestArea.UpdateInterestManagement(); } // don't send response return(null); } return(operation.GetOperationResponse((int)ReturnCode.InterestAreaNotFound, "InterestAreaNotFound")); }
public override OperationResponse Handle(MmoActor actor, OperationRequest request, SendParameters sendParameters) { var operation = new MoveInterestArea(actor.Peer.Protocol, request); if (!operation.IsValid) { return(new OperationResponse(request.OperationCode) { ReturnCode = (int)ReturnCode.InvalidOperationParameter, DebugMessage = operation.GetErrorMessage() }); } operation.OnStart(); InterestArea interestArea; if (actor.TryGetInterestArea(operation.InterestAreaId, out interestArea)) { lock (interestArea.SyncRoot) { interestArea.Position = operation.Position.ToVector(true); interestArea.UpdateInterestManagement(); } // don't send response return(null); } return(operation.GetOperationResponse((int)ReturnCode.InterestAreaNotFound, "InterestAreaNotFound")); }