/// <summary> /// Creates a new <see cref="SubscriberStatusQuery"/>. /// </summary> public SubscriberStatusQuery() { m_serviceClient = CommonFunctions.GetWindowsServiceClient(); m_serviceClient.Helper.ReceivedServiceResponse += Helper_ReceivedServiceResponse; m_subscriberStatuses = new List<Tuple<Guid, bool, string>>(); m_responseComplete = new AutoResetEvent(false); m_requestComplete = new AutoResetEvent(true); m_queuedQueryPending = new object(); m_responseTimeout = DefaultResponseTimeout; }
private void ConnectToService() { if (m_windowsServiceClient != null) { try { m_windowsServiceClient.Helper.RemotingClient.ConnectionEstablished -= RemotingClient_ConnectionEstablished; m_windowsServiceClient.Helper.RemotingClient.ConnectionTerminated -= RemotingClient_ConnectionTerminated; } catch { } } m_windowsServiceClient = CommonFunctions.GetWindowsServiceClient(); if (m_windowsServiceClient != null) { m_windowsServiceClient.Helper.RemotingClient.ConnectionEstablished += RemotingClient_ConnectionEstablished; m_windowsServiceClient.Helper.RemotingClient.ConnectionTerminated += RemotingClient_ConnectionTerminated; if (m_windowsServiceClient.Helper.RemotingClient.CurrentState == TVA.Communication.ClientState.Connected) { EllipseConnectionState.Dispatcher.BeginInvoke((Action)delegate() { EllipseConnectionState.Fill = Application.Current.Resources["GreenRadialGradientBrush"] as RadialGradientBrush; ToolTipService.SetToolTip(EllipseConnectionState, "Connected to the service"); }); } else { EllipseConnectionState.Dispatcher.BeginInvoke((Action)delegate() { EllipseConnectionState.Fill = Application.Current.Resources["RedRadialGradientBrush"] as RadialGradientBrush; ToolTipService.SetToolTip(EllipseConnectionState, "Disconnected from the service"); }); } } }
/// <summary> /// Disconnects from backend windows service. /// </summary> public static void DisconnectWindowsServiceClient() { try { if (s_windowsServiceClient != null) { s_windowsServiceClient.Dispose(); s_windowsServiceClient = null; } } catch { // TODO: Log into database error log. } }
/// <summary> /// Connects to backend windows service. /// </summary> public static void ConnectWindowsServiceClient(bool overwrite = false) { TcpClient remotingClient; ISecurityProvider provider; UserData userData; if (overwrite) { DisconnectWindowsServiceClient(); ServiceConnectionRefreshed(null, EventArgs.Empty); } else { if (s_windowsServiceClient == null || s_windowsServiceClient.Helper.RemotingClient.CurrentState != TVA.Communication.ClientState.Connected) { if (s_windowsServiceClient != null) DisconnectWindowsServiceClient(); AdoDataConnection database = new AdoDataConnection(DefaultSettingsCategory); try { string connectionString = database.ServiceConnectionString(true); //.RemoteStatusServerConnectionString(); if (!string.IsNullOrWhiteSpace(connectionString)) { s_windowsServiceClient = new WindowsServiceClient(connectionString); if (SecurityProviderCache.TryGetCachedProvider(CurrentUser, out provider)) { userData = provider.UserData; if ((object)userData != null) { s_windowsServiceClient.Helper.Username = userData.LoginID; s_windowsServiceClient.Helper.Password = SecurityProviderUtility.EncryptPassword(provider.Password); remotingClient = s_windowsServiceClient.Helper.RemotingClient as TcpClient; if ((object)remotingClient != null && (object)provider.SecurePassword != null && provider.SecurePassword.Length > 0) remotingClient.NetworkCredential = new NetworkCredential(userData.LoginID, provider.SecurePassword); } s_windowsServiceClient.Helper.RemotingClient.MaxConnectionAttempts = -1; s_windowsServiceClient.Helper.RemotingClient.ConnectionEstablished += RemotingClient_ConnectionEstablished; ThreadPool.QueueUserWorkItem(ConnectAsync, null); } } } finally { if (database != null) database.Dispose(); } } } }
/// <summary> /// Creates a new <see cref="AuthorizedMeasurementsQuery"/>. /// </summary> public AuthorizedMeasurementsQuery() { m_serviceClient = CommonFunctions.GetWindowsServiceClient(); m_serviceClient.Helper.ReceivedServiceResponse += Helper_ReceivedServiceResponse; m_authorizedSignalIDs = new List<Guid>(); m_responseComplete = new AutoResetEvent(false); m_requestComplete = new AutoResetEvent(true); m_queuedQueryPending = new object(); m_responseTimeout = DefaultResponseTimeout; }
/// <summary> /// Releases the unmanaged resources used by the <see cref="AuthorizedMeasurementsQuery"/> object and optionally releases the managed resources. /// </summary> /// <param name="disposing">true to release both managed and unmanaged resources; false to release only unmanaged resources.</param> protected virtual void Dispose(bool disposing) { if (!m_disposed) { try { if (disposing) { if ((object)m_serviceClient != null && (object)m_serviceClient.Helper != null) m_serviceClient.Helper.ReceivedServiceResponse -= Helper_ReceivedServiceResponse; m_serviceClient = null; if ((object)m_responseComplete != null) { // Release any waiting threads before disposing wait handle m_responseComplete.Set(); m_responseComplete.Dispose(); } m_responseComplete = null; if ((object)m_requestComplete != null) { // Release any waiting threads before disposing wait handle m_requestComplete.Set(); m_requestComplete.Dispose(); } m_requestComplete = null; } } finally { m_disposed = true; // Prevent duplicate dispose. } } }