From 46e0cd20d13f1e7310e6b297f0692c8f6c7eb525 Mon Sep 17 00:00:00 2001
From: sin365 <353374337@qq.com>
Date: Fri, 19 Jan 2024 21:35:33 +0800
Subject: [PATCH] ..
---
NoSugarNet.ClientCore/Event/EEvent.cs | 8 +
NoSugarNet.ClientCore/Event/EventSystem.cs | 238 ++++++++++++++++++
.../NoSugarNet.ClientCore.csproj | 18 ++
3 files changed, 264 insertions(+)
create mode 100644 NoSugarNet.ClientCore/Event/EEvent.cs
create mode 100644 NoSugarNet.ClientCore/Event/EventSystem.cs
create mode 100644 NoSugarNet.ClientCore/NoSugarNet.ClientCore.csproj
diff --git a/NoSugarNet.ClientCore/Event/EEvent.cs b/NoSugarNet.ClientCore/Event/EEvent.cs
new file mode 100644
index 0000000..71fc2a7
--- /dev/null
+++ b/NoSugarNet.ClientCore/Event/EEvent.cs
@@ -0,0 +1,8 @@
+namespace NoSugarNet.ClientCore.Event
+{
+ public enum EEvent
+ {
+ // 添加你自己需要的事件类型
+ OnChatMsg
+ }
+}
diff --git a/NoSugarNet.ClientCore/Event/EventSystem.cs b/NoSugarNet.ClientCore/Event/EventSystem.cs
new file mode 100644
index 0000000..e9fbb20
--- /dev/null
+++ b/NoSugarNet.ClientCore/Event/EventSystem.cs
@@ -0,0 +1,238 @@
+namespace NoSugarNet.ClientCore.Event
+{
+ public class EventData
+ {
+ private static long BaseUid = 0;
+ private static long GenUid()
+ {
+ return (++BaseUid);
+ }
+
+ ///
+ /// 唯一id
+ ///
+ public long uid { get; private set; }
+
+ ///
+ /// 回调
+ ///
+ public Delegate callback { get; private set; }
+
+ public EventData(Delegate d)
+ {
+ uid = GenUid();
+ callback = d;
+ }
+ }
+
+ public class EventSystem
+ {
+ private static EventSystem instance = new EventSystem();
+ public static EventSystem Instance { get { return instance; } }
+
+ private Dictionary> eventDic = new Dictionary>(128);
+
+ private EventSystem() { }
+
+
+ #region RegisterEvent
+ public void RegisterEvent(EEvent evt, Action callback)
+ {
+ InterRegisterEvent(evt, callback);
+ }
+
+ public void RegisterEvent(EEvent evt, Action callback)
+ {
+ InterRegisterEvent(evt, callback);
+ }
+
+ public void RegisterEvent(EEvent evt, Action callback)
+ {
+ InterRegisterEvent(evt, callback);
+ }
+
+ public void RegisterEvent(EEvent evt, Action callback)
+ {
+ InterRegisterEvent(evt, callback);
+ }
+
+ public void RegisterEvent(EEvent evt, Action callback)
+ {
+ InterRegisterEvent(evt, callback);
+ }
+
+ private void InterRegisterEvent(EEvent evt, Delegate callback)
+ {
+ if (eventDic.ContainsKey(evt))
+ {
+ if (eventDic[evt].IndexOf(callback) < 0)
+ {
+ eventDic[evt].Add(callback);
+ }
+ }
+ else
+ {
+ eventDic.Add(evt, new List() { callback });
+ }
+ }
+ #endregion
+
+ #region UnregisterEvent
+
+ public void UnregisterEvent(EEvent evt, Action callback)
+ {
+ Delegate tempDelegate = callback;
+ InterUnregisterEvent(evt, tempDelegate);
+ }
+
+ public void UnregisterEvent(EEvent evt, Action callback)
+ {
+ Delegate tempDelegate = callback;
+ InterUnregisterEvent(evt, tempDelegate);
+ }
+
+ public void UnregisterEvent(EEvent evt, Action callback)
+ {
+ Delegate tempDelegate = callback;
+ InterUnregisterEvent(evt, tempDelegate);
+ }
+
+ public void UnregisterEvent(EEvent evt, Action callback)
+ {
+ Delegate tempDelegate = callback;
+ InterUnregisterEvent(evt, tempDelegate);
+ }
+
+ public void UnregisterEvent(EEvent evt, Action callback)
+ {
+ Delegate tempDelegate = callback;
+ InterUnregisterEvent(evt, tempDelegate);
+ }
+
+ private void InterUnregisterEvent(EEvent evt, Delegate callback)
+ {
+ if (eventDic.ContainsKey(evt))
+ {
+ eventDic[evt].Remove(callback);
+ if (eventDic[evt].Count == 0) eventDic.Remove(evt);
+ }
+ }
+ #endregion
+
+ #region PostEvent
+ public void PostEvent(EEvent evt, T1 arg1, T2 arg2, T3 arg3, T4 arg4)
+ {
+ List eventList = GetEventList(evt);
+ if (eventList != null)
+ {
+ foreach (Delegate callback in eventList)
+ {
+ try
+ {
+ ((Action)callback)(arg1, arg2, arg3, arg4);
+ }
+ catch (Exception e)
+ {
+ App.log.Error(e.Message);
+ }
+ }
+ }
+ }
+
+ public void PostEvent(EEvent evt, T1 arg1, T2 arg2, T3 arg3)
+ {
+ List eventList = GetEventList(evt);
+ if (eventList != null)
+ {
+ foreach (Delegate callback in eventList)
+ {
+ try
+ {
+ ((Action)callback)(arg1, arg2, arg3);
+ }
+ catch (Exception e)
+ {
+ App.log.Error(e.Message);
+ }
+ }
+ }
+ }
+
+ public void PostEvent(EEvent evt, T1 arg1, T2 arg2)
+ {
+ List eventList = GetEventList(evt);
+ if (eventList != null)
+ {
+ foreach (Delegate callback in eventList)
+ {
+ try
+ {
+ ((Action)callback)(arg1, arg2);
+ }
+ catch (Exception e)
+ {
+ App.log.Error(e.Message);
+ }
+ }
+ }
+ }
+
+ public void PostEvent(EEvent evt, T arg)
+ {
+ List eventList = GetEventList(evt);
+ if (eventList != null)
+ {
+ foreach (Delegate callback in eventList)
+ {
+ try
+ {
+ ((Action)callback)(arg);
+ }
+ catch (Exception e)
+ {
+ App.log.Error(e.Message + ", method name : " + callback.Method);
+ }
+ }
+ }
+
+ }
+
+ public void PostEvent(EEvent evt)
+ {
+ List eventList = GetEventList(evt);
+ if (eventList != null)
+ {
+ foreach (Delegate callback in eventList)
+ {
+ try
+ {
+ ((Action)callback)();
+ }
+ catch (Exception e)
+ {
+ App.log.Error(e.Message);
+ }
+ }
+ }
+ }
+ #endregion
+
+ ///
+ /// 获取所有事件
+ ///
+ ///
+ ///
+ private List GetEventList(EEvent evt)
+ {
+ if (eventDic.ContainsKey(evt))
+ {
+ List tempList = eventDic[evt];
+ if (null != tempList)
+ {
+ return tempList;
+ }
+ }
+ return null;
+ }
+ }
+}
diff --git a/NoSugarNet.ClientCore/NoSugarNet.ClientCore.csproj b/NoSugarNet.ClientCore/NoSugarNet.ClientCore.csproj
new file mode 100644
index 0000000..060d88b
--- /dev/null
+++ b/NoSugarNet.ClientCore/NoSugarNet.ClientCore.csproj
@@ -0,0 +1,18 @@
+
+
+
+ net7.0
+ enable
+ enable
+
+
+
+
+ ..\Lib\Google.Protobuf.dll
+
+
+ ..\Lib\HaoYueNet.ClientNetwork.dll
+
+
+
+