/// <summary> /// Initialize the pool for operation, by supplying it with a message bus. /// </summary> protected virtual bool Initialize(IMessageBus messageBus) { lock (this) { if (_messageBus != null || messageBus == null) { return(false); } _messageBus = messageBus; _messageBus.ClientAddedEvent += new MessageBusClientUpdateDelegate(_messageBus_ClientAddedEvent); _messageBus.ClientRemovedEvent += new MessageBusClientRemovedDelegate(_messageBus_ClientRemovedEvent); _messageBus.ClientUpdateEvent += new MessageBusClientUpdateDelegate(_messageBus_ClientUpdateEvent); // Add a client with self to the message bus. IntercomClient = new SuperPoolClient("SuperPool.Intercom", this); } if (this.AddClient(IntercomClient) == false) { #if Matrix_Diagnostics InstanceMonitor.Fatal("Failed to add super pool main client."); #endif lock (this) { IntercomClient.Dispose(); IntercomClient = null; _messageBus.ClientAddedEvent -= new MessageBusClientUpdateDelegate(_messageBus_ClientAddedEvent); _messageBus.ClientRemovedEvent -= new MessageBusClientRemovedDelegate(_messageBus_ClientRemovedEvent); _messageBus.ClientUpdateEvent -= new MessageBusClientUpdateDelegate(_messageBus_ClientUpdateEvent); _messageBus = null; } return(false); } return(true); }