/// <summary> /// 对象活动时登记 /// </summary> public static void OnGlobalStart(IZeroObject obj) { lock (GlobalObjects) { GlobalObjects.Add(obj); ZeroTrace.SystemLog(obj.Name, "GlobalStart"); } }
/// <summary> /// 对象关闭时登记 /// </summary> public static void OnObjectFailed(IZeroObject obj) { lock (ActiveObjects) { FailedObjects.Add(obj); ZeroTrace.WriteError(obj.Name, "Failed"); if (ActiveObjects.Count + FailedObjects.Count == ZeroObjects.Count) { ActiveSemaphore.Release(); //发出完成信号 } } }
/// <summary> /// 对象关闭时登记 /// </summary> public static void OnObjectClose(IZeroObject obj) { lock (ActiveObjects) { ActiveObjects.Remove(obj); ZeroTrace.SystemLog(obj.Name, "Closed"); if (ActiveObjects.Count == 0) { ActiveSemaphore.Release(); //发出完成信号 } } }
/// <summary> /// 对象活动时登记 /// </summary> public static void OnObjectActive(IZeroObject obj) { lock (ActiveObjects) { ActiveObjects.Add(obj); ZeroTrace.SystemLog(obj.Name, "Run"); if (ActiveObjects.Count + FailedObjects.Count == ZeroObjects.Count) { ActiveSemaphore.Release(); //发出完成信号 } } }
/// <summary> /// 对象活动时登记 /// </summary> public static void OnGlobalEnd(IZeroObject obj) { lock (GlobalObjects) { GlobalObjects.Remove(obj); ZeroTrace.SystemLog(obj.Name, "GlobalEnd"); if (GlobalObjects.Count == 0) { GlobalSemaphore.Release(); } } }
/// <summary> /// 注册对象 /// </summary> public static bool RegistZeroObject(IZeroObject obj) { if (obj.GetType().IsSubclassOf(typeof(ApiStation))) { ZeroDiscover.DiscoverApiDocument(obj.GetType()); } using (OnceScope.CreateScope(ZeroObjects)) { if (ZeroObjects.ContainsKey(obj.Name)) { return(false); } ZeroTrace.SystemLog("RegistZeroObject", obj.Name); ZeroObjects.Add(obj.Name, obj); if (ApplicationState >= StationState.Initialized) { try { obj.OnZeroInitialize(); ZeroTrace.SystemLog(obj.Name, "Initialize"); } catch (Exception e) { ZeroTrace.WriteException(obj.Name, e, "Initialize"); } } if (!CanDo) { return(true); } try { ZeroTrace.SystemLog(obj.Name, "Start"); obj.OnZeroStart(); } catch (Exception e) { ZeroTrace.WriteException(obj.Name, e, "Start"); } } return(true); }