module armos.events.event; import core.sync.mutex; import std.array; /++ +/ class Event(ArgumentType) { protected void delegate(ref ArgumentType)[] functions; bool enabled = true; bool notifying = false; // Mutex mutex; void remove(void delegate(ref ArgumentType) func){ }; void add(void delegate(ref ArgumentType) func){ functions~=func; }; void notify(ref ArgumentType arg){ foreach (func; functions) { func(arg); } }; public this(){ // mutex = new Mutex; }; } /++ イベントにイベントハンドラを登録します. Params: event = 登録先のイベントを表します. listenerFunc = 登録されるイベントを表します. +/ void addListener(EventType, ListenerClass, FunctionType)(ref EventType event, auto ref ListenerClass listener, FunctionType listenerFunc){ event.remove(listenerFunc); event.add(listenerFunc); }; /++ イベントが発生した際に実行される通知です. Params: event = 発生したイベントを指定します. listenerFunc = イベントのメッセージを指定します. +/ void notifyEvent(EventType, ArgType)(ref EventType event, ref ArgType arg){ event.notify(arg); } class EventArg{}