Beispiel #1
0
        public virtual void Broadcast(Packet p)
        {
            if (p == null || CurrentMap == null)
            {
                return;
            }

            for (int i = CurrentMap.Players.Count - 1; i >= 0; i--)
            {
                PlayerObject player = CurrentMap.Players[i];
                if (player == this || player.Observer)
                {
                    continue;
                }

                if (Functions.InRange(CurrentLocation, player.CurrentLocation, Globals.DataRange))
                {
                    player.Enqueue(p);
                }
            }

            for (int i = CurrentMap.Observers.Count - 1; i >= 0; i--)
            {
                ObserverObject observer = CurrentMap.Observers[i];
                if (observer == this)
                {
                    continue;
                }

                if (Functions.InRange(CurrentLocation, observer.CurrentLocation, Globals.DataRange))
                {
                    observer.Enqueue(p);
                }
            }
        }
Beispiel #2
0
 private void printWrongSignatureError(Exception e, ObserverObject obj)
 {
     Debug.Log("ERROR: Wrong signature on method " + obj.methodString +
               ". Method should have signature: functionName(Dictionary<string, object> data) ");
     Debug.Log("Stacktrace: ");
     Debug.Log(e);
 }
Beispiel #3
0
 private void printTargetInvocationError(Exception e, ObserverObject obj)
 {
     if (e.InnerException is MissingReferenceException)
     {
         Debug.Log("ERROR: Calling method " + obj.methodString +
                   ". Tried to post to a null observer, did you forget to remove observer when destroying an object?");
     }
     Debug.Log("Stacktrace: ");
     Debug.Log(e);
 }
Beispiel #4
0
    /**
     * observer: Object interested in event
     * forKey: Event key
     * method: Method name that should be executed on Listener when event is picked up
     */
    public void addObserver(object observer, string forKey, string method)
    {
        //retrieve list
        List <ObserverObject> currentList;

        this.events.TryGetValue(forKey, out currentList);
        currentList = currentList != null ? currentList : new List <ObserverObject>();

        //add observer
        ObserverObject observerObject = new ObserverObject();

        observerObject.observer     = observer;
        observerObject.methodString = method;
        currentList.Add(observerObject);
        this.events.Remove(forKey);
        this.events.Add(forKey, currentList);
    }
Beispiel #5
0
    //PRIVATE

    private bool postNotification(ObserverObject obj, Dictionary <string, object> data)
    {
        Type       type   = obj.observer.GetType();
        MethodInfo method = type.GetMethod(obj.methodString);

        object[] signature = new object[1];
        signature[0] = data;

        try {
            method.Invoke(obj.observer, signature);
        } catch (TargetParameterCountException e) {
            this.printWrongSignatureError(e, obj);
        } catch (TargetInvocationException e) {
            this.printTargetInvocationError(e, obj);
        } catch (Exception e) {
            Debug.Log(e);
        }
        return(true);
    }
Beispiel #6
0
 public abstract void SendHealth(ObserverObject observer);
Beispiel #7
0
 public virtual void Add(ObserverObject observer)
 {
     observer.Enqueue(GetInfo());
 }
Beispiel #8
0
 public virtual void Remove(ObserverObject observer)
 {
     observer.Enqueue(new S.ObjectRemove {
         ObjectID = ObjectID
     });
 }
Beispiel #9
0
 public override void SendHealth(ObserverObject observer)
 {
     throw new NotSupportedException();
 }