/// <summary> /// RabitManager constructor. Creates the manager's thread. /// If the user has derived their own Workspace from the RabitWorkspace, /// it must be provided when the manager is constructed... otherwise /// the standard RabitWorkspace will be used. /// </summary> public RabitManager() { //Generate the Manager Name for use in tracking error messages. //and setting up queue names. managerName = this.GetType().ToString(); int idx = managerName.LastIndexOf('.'); managerName = managerName.Substring(idx + 1); managerThread = new Thread(new ThreadStart(managerMain)); managerThread.Name = managerName; shutdownManager = false; MgrStatus = new ManagerStatusMessage(); //Add all publish subscribe messages this manager relies on to the //global workspace here string mgrStatusMsgName = string.Concat(ManagerName, "Status"); AddPublishSubscribeMessage(mgrStatusMsgName, MgrStatus); MgrControl = new ManagerControlMessage(); AddPublishSubscribeMessage("ManagerControl", MgrControl); //string mgrMsgQueueName = string.Concat(ManagerName, "MessageQueue"); MgrMessageQueue = new RabitMessageQueue(100, ManagerName); //Add the Message Queue to the Global Workspace AddManagerMessageQueue(ManagerName, MgrMessageQueue); //Setup Event Handling ewhWaitHandle = new EventWaitHandle(false, EventResetMode.AutoReset); wakeupManagerEvent = new PublishSubscribeMessChangedHandler(wakeUpManagerEH); }
/// <summary> /// Unregister a delegate event function. /// </summary> /// <param name="delegateFunction"></param> public void UnregisterDelegateWithGlobalMessage(PublishSubscribeMessChangedHandler delegateFunction) { if (globalPublishSubscribeMessageRef != null) { globalPublishSubscribeMessageRef.UnregisterEvent(delegateFunction); } else { Console.WriteLine("Attempting to unregisterDelegateWithGlobalMessage without a reference to the global message established."); } }
/// <summary> /// A manager can register a message queue pick up event if the manager /// needs to know when a message has been picked up by the receiving queue. /// Registering events should be done in the Manager's startup code. /// </summary> /// <param name="queueName"></param> /// <param name="delegateFunction"></param> /// <returns></returns> public bool RegisterMsgPickedUpEvent(string queueName, PublishSubscribeMessChangedHandler delegateFunction) { bool error = true; RabitMessageQueue msgQueue = null; if (messageQueueDict.TryGetValue(queueName, out msgQueue)) { msgQueue.RegisterMsgPickedUpEvent(delegateFunction); error = false; } return(error); }
public void RegisterEvent(PublishSubscribeMessChangedHandler delegateFunction) { rwl.EnterWriteLock(); Changed += delegateFunction; rwl.ExitWriteLock(); }
public void UnregisterEvent(PublishSubscribeMessChangedHandler delegateFunction) { Changed -= delegateFunction; }
public void UnregisterMsgPickedEvent(PublishSubscribeMessChangedHandler delegateFunction) { MessagePickedUp -= delegateFunction; }
/// <summary> /// A manager can register a message queue pick up event if the manager /// needs to know when a message has been picked up by the receiving queue. /// Registering events should be done in the Manager's startup code. /// </summary> /// <param name="queueName"></param> /// <param name="delegateFunction"></param> /// <returns></returns> public bool RegisterMsgPickedUpEvent(string queueName, PublishSubscribeMessChangedHandler delegateFunction) { return(RabitWorkspace.GetWorkspace().RegisterMsgPickedUpEvent(queueName, delegateFunction)); }