/// <summary> /// Verwaltete Ressourcen freigeben. /// </summary> public void Dispose() { // Wenn Dispose noch nicht aufgerufen wurde ... if (!_isDisposed) { // Schalter setzen _isDisposed = true; // Host aus der Auflistung entfernen _hosts.Remove(this); // Horchen auf Client-Anfragen beenden StopListening(); // Wenn der Komponentenaufrufer existiert ... if (_invoker != null) { // Komponnetenaufrufer entsorgen _invoker = null; } // Wenn die Sitzungsverwaltung existiert ... if (_sessionManager != null) { // Sitzungsverwaltung entsorgen _sessionManager.Dispose(); _sessionManager = null; } // Wenn die Authentifizierung verdrahtet ist ... if (this.Authenticate != null) { // Verdrahtung aufheben this.Authenticate = null; } // Wenn der Authentifizierungsanbieter existiert ... if (_authProvider != null) { // Authentifizierungsanbieter entsorgen _authProvider = null; } // Wenn der Komponentenkatalog existiert ... if (_catalog != null) { // Komponentenkatalog entsorgen _catalog = null; } } }
/// <summary> /// Konstruktor. /// </summary> /// <param name="name">Name des Komponentenhosts</param> /// <param name="protocolSetup">Protokoll-Einstellungen</param> /// <param name="sessionManager">Sitzungsverwaltung</param> /// <param name="catalog">Komponenten-Katalog</param> public ZyanComponentHost(string name, IServerProtocolSetup protocolSetup, ISessionManager sessionManager, ComponentCatalog catalog) { // Wenn kein Name angegeben wurde ... if (string.IsNullOrEmpty(name)) { // Ausnahme werfen throw new ArgumentException(LanguageResource.ArgumentException_ComponentHostNameMissing, "name"); } // Wenn keine Protokoll-Einstellungen angegeben wurde ... if (protocolSetup == null) { // Ausnahme werfen throw new ArgumentNullException("protocolSetup"); } // Wenn keine Sitzungsverwaltung übergeben wurde ... if (sessionManager == null) { // Ausnahme werfen throw new ArgumentNullException("sessionManager"); } // Wenn kein Komponenten-Katalog angegeben wurde ... if (catalog == null) { // Ausnahme werfen throw new ArgumentNullException("catalog"); } // Werte übernehmen _name = name; _protocolSetup = protocolSetup; _sessionManager = sessionManager; _catalog = catalog; // Komponentenaufrufer erzeugen _invoker = new ZyanDispatcher(this); // Authentifizierungsanbieter übernehmen und verdrahten _authProvider = protocolSetup.AuthenticationProvider; this.Authenticate = _authProvider.Authenticate; // Komponenten Host der Host-Auflistung zufügen _hosts.Add(this); // Beginnen auf Client-Anfragen zu horchen StartListening(); }
/// <summary> /// Releases all managed resources. /// </summary> /// <param name="calledFromFinalizer">Specifies if this method is called from finalizer or not</param> private void Dispose(bool calledFromFinalizer) { if (!_isDisposed) { OnDisposing(new EventArgs()); _isDisposed = true; _hosts.Remove(this); StopListening(); if (_dispatcher != null) { _dispatcher = null; } if (_sessionManager != null) { _sessionManager.Dispose(); _sessionManager = null; } if (this.Authenticate != null) { this.Authenticate = null; } if (_authProvider != null) { _authProvider = null; } if (_catalog != null) { if (_catalog.DisposeWithHost) { _catalog.Dispose(); } _catalog = null; } if (!calledFromFinalizer) { GC.SuppressFinalize(this); } } }
/// <summary> /// Initializes a new instance of the <see cref="ZyanComponentHost" /> class. /// </summary> /// <param name="name">The name of the component host.</param> /// <param name="protocolSetup">The protocol setup.</param> /// <param name="sessionManager">The session manager.</param> /// <param name="catalog">The component catalog.</param> public ZyanComponentHost(string name, IServerProtocolSetup protocolSetup, ISessionManager sessionManager, IComponentCatalog catalog) { if (string.IsNullOrEmpty(name)) { throw new ArgumentException(LanguageResource.ArgumentException_ComponentHostNameMissing, "name"); } if (protocolSetup == null) { throw new ArgumentNullException("protocolSetup"); } if (sessionManager == null) { throw new ArgumentNullException("sessionManager"); } if (catalog == null) { throw new ArgumentNullException("catalog"); } _name = name; _protocolSetup = protocolSetup; _sessionManager = sessionManager; _sessionManager.ClientSessionTerminated += (s, e) => OnClientSessionTerminated(e); _catalog = catalog; _serializationHandling = new SerializationHandlerRepository(); _dispatcher = new ZyanDispatcher(this); // Set up authentication request delegate _authProvider = protocolSetup.AuthenticationProvider; this.Authenticate = _authProvider.Authenticate; // Register standard serialization handlers RegisterStandardSerializationHandlers(); _hosts.Add(this); StartListening(); DiscoverableUrl = _protocolSetup.GetDiscoverableUrl(_name); }
/// <summary> /// Releases all managed resources. /// </summary> /// <param name="calledFromFinalizer">Specifies if this method is called from finalizer or not</param> private void Dispose(bool calledFromFinalizer) { if (!_isDisposed) { OnDisposing(new EventArgs()); _isDisposed = true; _hosts.Remove(this); DisableDiscovery(); StopListening(); if (_sessionManager != null) { _sessionManager.Dispose(); _sessionManager = null; } _dispatcher = null; Authenticate = null; _authProvider = null; if (_catalog != null && DisposeCatalogWithHost) { var catalog = _catalog as IDisposable; if (catalog != null) { catalog.Dispose(); } _catalog = null; } if (!calledFromFinalizer) { GC.SuppressFinalize(this); } } }