/// <summary> /// The operation attach interest area. /// </summary> /// <param name = "item"> /// The mmo item. /// </param> /// <param name = "operation"> /// The operation. /// </param> /// <param name = "interestArea"> /// The interestArea. /// </param> /// <param name = "sendParameters"> /// The send Parameters. /// </param> /// <returns> /// Ok or ItemNotFound /// </returns> private OperationResponse ItemOperationAttachInterestArea( Item item, AttachInterestArea operation, InterestArea interestArea, SendParameters sendParameters) { if (item.Disposed) { return operation.GetOperationResponse((int)ReturnCode.ItemNotFound, "ItemNotFound"); } lock (interestArea.SyncRoot) { interestArea.Detach(); interestArea.AttachToItem(item); interestArea.UpdateInterestManagement(); } // use item channel to ensure that this event arrives before any move or subscribe events OperationResponse response = operation.GetOperationResponse(MethodReturnValue.Ok); sendParameters.ChannelId = Settings.ItemEventChannel; this.Peer.SendOperationResponse(response, sendParameters); operation.OnComplete(); return null; }
/// <summary> /// The operation add interest area. /// </summary> /// <param name = "item"> /// The mmo item. /// </param> /// <param name = "operation"> /// The operation. /// </param> /// <param name = "interestArea"> /// The interestArea. /// </param> /// <returns> /// Ok or ItemNotFound /// </returns> private static OperationResponse ItemOperationAddInterestArea(Item item, AddInterestArea operation, InterestArea interestArea) { if (item.Disposed) { return operation.GetOperationResponse((int)ReturnCode.ItemNotFound, "ItemNotFound"); } lock (interestArea.SyncRoot) { interestArea.AttachToItem(item); interestArea.ViewDistanceEnter = operation.ViewDistanceEnter.ToVector(); interestArea.ViewDistanceExit = operation.ViewDistanceExit.ToVector(); interestArea.UpdateInterestManagement(); } operation.OnComplete(); return operation.GetOperationResponse(MethodReturnValue.Ok); }