예제 #1
0
        /// <summary>
        ///   The on attached item position update.
        /// </summary>
        /// <param name = "message">
        ///   The message.
        /// </param>
        private void AttachedItem_OnItemPosition(ItemPositionMessage message)
        {
            MessageCounters.CounterReceive.Increment();

            lock (this.SyncRoot)
            {
                if (this.AttachedItem == message.Source)
                {
                    this.Position = message.Position;
                    this.UpdateInterestManagement();
                }
            }
        }
예제 #2
0
        /// <summary>
        ///   The on auto subscribed item position update.
        ///   unsubscribes item if too far away
        /// </summary>
        /// <param name = "message">
        ///   The message.
        /// </param>
        private void AutoSubscribedItem_OnItemPosition(ItemPositionMessage message)
        {
            MessageCounters.CounterReceive.Increment();

            lock (this.SyncRoot)
            {
                ItemAutoSubscription subscription;

                // not subscribed
                if (false == this.autoManagedItemSubscriptions.TryGetValue(message.Source, out subscription))
                {
                    return;
                }

                subscription.ItemPosition = message.Position;

                // dropped out of world, unsubscribe
                if (message.WorldRegion == null)
                {
                    this.AutoUnsubscribeItem(subscription);
                    return;
                }

                // region is still the same, don't evaluate further
                if (message.WorldRegion == subscription.WorldRegion)
                {
                    return;
                }

                subscription.WorldRegion = message.WorldRegion;

                if (this.subscribedWorldRegions.ContainsKey(subscription.WorldRegion) == false)
                {
                    // unsubscribe if item is out of range
                    this.AutoUnsubscribeDistantItem(subscription);
                }
            }
        }
예제 #3
0
 /// <summary>
 /// The update position.
 /// </summary>
 /// <param name="message">
 /// The message.
 /// </param>
 private void UpdatePosition(ItemPositionMessage message)
 {
     var positionUpdate = (MmoItemPositionUpdate)message;
     Item item = message.Source;
     if (this.itemPositions.ContainsKey(item))
     {
         this.itemPositions[item] = positionUpdate.Coordinate;
         this.PublishUpdate(item, positionUpdate.Coordinate, true);
     }
 }