SharpLibEar/ManagerEventAction.cs
author StephaneLenclud
Sat, 13 Aug 2016 23:26:54 +0200
changeset 232 5a739e2e5255
parent 214 4961ede27e0a
permissions -rw-r--r--
Published v0.11.0.0.
Stephane@212
     1
//
Stephane@212
     2
Stephane@212
     3
Stephane@212
     4
using System;
Stephane@212
     5
using System.Collections.Generic;
Stephane@212
     6
using System.ComponentModel;
Stephane@212
     7
using System.Linq;
Stephane@212
     8
using System.Reflection;
Stephane@212
     9
using System.Runtime.Serialization;
Stephane@212
    10
using SharpLib.Utils;
Stephane@212
    11
Stephane@212
    12
namespace SharpLib.Ear
Stephane@212
    13
{
Stephane@212
    14
    [TypeConverter(typeof(TypeConverterJson<ManagerEventAction>))]
Stephane@212
    15
    [DataContract]
Stephane@212
    16
    public class ManagerEventAction
Stephane@212
    17
    {
Stephane@212
    18
        public static ManagerEventAction Current = null;
StephaneLenclud@231
    19
        //public IDictionary<string, Type> ActionTypes;
StephaneLenclud@231
    20
        //public IDictionary<string, Type> EventTypes;
StephaneLenclud@231
    21
StephaneLenclud@231
    22
        /// <summary>
StephaneLenclud@231
    23
        /// Our events instances.
StephaneLenclud@231
    24
        /// </summary>
Stephane@212
    25
        [DataMember]
StephaneLenclud@231
    26
        public List<Event> Events;
StephaneLenclud@231
    27
StephaneLenclud@231
    28
Stephane@212
    29
Stephane@212
    30
Stephane@212
    31
        public ManagerEventAction()
Stephane@212
    32
        {
Stephane@212
    33
            Init();
Stephane@212
    34
        }
Stephane@212
    35
Stephane@212
    36
        /// <summary>
StephaneLenclud@231
    37
        /// Executes after internalization took place.
Stephane@212
    38
        /// </summary>
Stephane@212
    39
        public void Init()
Stephane@212
    40
        {
StephaneLenclud@231
    41
            if (Events == null)
StephaneLenclud@231
    42
            {
StephaneLenclud@231
    43
                Events = new List<Event>();
StephaneLenclud@231
    44
            }
StephaneLenclud@231
    45
            
StephaneLenclud@231
    46
        }
Stephane@212
    47
StephaneLenclud@231
    48
        /// <summary>
StephaneLenclud@231
    49
        /// 
StephaneLenclud@231
    50
        /// </summary>
StephaneLenclud@231
    51
        /// <param name="aEventType"></param>
StephaneLenclud@231
    52
        public void TriggerEvent<T>() where T: class
StephaneLenclud@231
    53
        {
StephaneLenclud@231
    54
            //Only trigger enabled events matching the desired type
StephaneLenclud@231
    55
            foreach (Event e in Events.Where(e => e.GetType() == typeof(T) && e.Enabled))
Stephane@212
    56
            {
StephaneLenclud@231
    57
                e.Trigger();
Stephane@212
    58
            }
Stephane@212
    59
        }
Stephane@212
    60
Stephane@212
    61
StephaneLenclud@214
    62
        /// <summary>
StephaneLenclud@214
    63
        /// 
StephaneLenclud@214
    64
        /// </summary>
StephaneLenclud@214
    65
        /// <param name="aAction"></param>
StephaneLenclud@214
    66
        public void RemoveAction(Action aAction)
StephaneLenclud@214
    67
        {
StephaneLenclud@231
    68
            foreach (Event e in Events)
StephaneLenclud@214
    69
            {
StephaneLenclud@214
    70
                if (e.Actions.Remove(aAction))
StephaneLenclud@214
    71
                {
StephaneLenclud@214
    72
                    //We removed our action, we are done here.
StephaneLenclud@214
    73
                    return;
StephaneLenclud@214
    74
                }
StephaneLenclud@214
    75
            }
StephaneLenclud@214
    76
        }
Stephane@212
    77
    }
Stephane@212
    78
}