//--------------------------------------------------------------------------- bool __fastcall TTerminalManager::ConnectActiveTerminalImpl(bool Reopen) { TTerminalPendingAction Action; bool Result; do { Action = tpNull; Result = false; try { assert(ActiveTerminal); bool ShowLogPending = false; if (Configuration->Logging && (WinConfiguration->LogView == lvWindow)) { if (WinConfiguration->LogWindowOnStartup) { RequireLogForm(LogMemo); } else { ShowLogPending = true; } } ConnectTerminal(ActiveTerminal, Reopen); if (ScpExplorer) { assert(ActiveTerminal->Status == ssOpened); TerminalReady(); } WinConfiguration->ClearTemporaryLoginData(); if (LogForm && (WinConfiguration->LogView != lvWindow)) { FreeLogForm(); } if (ShowLogPending) { RequireLogForm(LogMemo); } Result = true; } catch(Exception & E) { assert(FTerminalPendingAction == tpNull); FTerminalPendingAction = ::tpNone; try { assert(ActiveTerminal != NULL); ActiveTerminal->ShowExtendedException(&E); Action = FTerminalPendingAction; } __finally { FTerminalPendingAction = tpNull; } } } while (Action == tpReconnect); if (Action == tpFree) { FreeActiveTerminal(); } return Result; }
STDMETHODIMP CSampleMSPStream::PauseStream (void) { LOG((MSP_TRACE, "CSampleMSPStream::PauseStream - enter")); CLock lock(m_lock); m_DesiredGraphState = State_Paused; // // Can't pause the stream if our transport filters are not configured. // if ( ! m_fTransportConfigured ) { LOG((MSP_WARN, "CSampleMSPStream::PauseStream - " "transport not configured so nothing to do yet - exit S_OK")); return S_OK; } // // Can't pause the stream if no terminal has been selected. // if ( 0 == m_Terminals.GetSize() ) { LOG((MSP_WARN, "CSampleMSPStream::PauseStream - " "no Terminal so nothing to do yet - exit S_OK")); return S_OK; } // // Connect the terminal. This does nothing if this call already // connected the terminal and fails if another call has the // terminal connected. // HRESULT hr; hr = ConnectTerminal(m_Terminals[0]); if ( FAILED(hr) ) { FireEvent(CALL_TERMINAL_FAIL, hr, CALL_CAUSE_CONNECT_FAIL); FireEvent(CALL_STREAM_FAIL, hr, CALL_CAUSE_CONNECT_FAIL); LOG((MSP_ERROR, "CSampleMSPStream::StartStream - " "our ConnectTerminal failed - exit 0x%08x", hr)); return hr; } // // Pause the stream via the base class method. // hr = CMSPStream::PauseStream(); if ( FAILED(hr) ) { // // Failed to pause -- tell the app. // FireEvent(CALL_STREAM_FAIL, hr, CALL_CAUSE_UNKNOWN); LOG((MSP_ERROR, "CSampleMSPStream::PauseStream - " "Pause failed - exit 0x%08x", hr)); return hr; } // // Fire event if this just made us inactive. // if ( m_ActualGraphState == State_Running ) { HRESULT hr2 = FireEvent(CALL_STREAM_INACTIVE, hr, CALL_CAUSE_LOCAL_REQUEST); if ( FAILED(hr2) ) { m_ActualGraphState = State_Paused; LOG((MSP_ERROR, "CSampleMSPStream::PauseStream - " "FireEvent failed - exit 0x%08x", hr2)); return hr2; } } m_ActualGraphState = State_Paused; LOG((MSP_TRACE, "CSampleMSPStream::PauseStream - exit S_OK")); return S_OK; }