void _fini() { // If empty - nothing to do if (g_ifMap.empty()) return; // Remove orphan objects LOCK_MUTEX(g_mapMutex); for (std::map<long, VscpRemoteTcpIf *>::iterator it = g_ifMap.begin(); it != g_ifMap.end(); ++it) { // std::cout << it->first << " => " << it->second << '\n'; VscpRemoteTcpIf *pvscpif = it->second; if (NULL != pvscpif) { pvscpif->doCmdClose(); delete pvscpif; pvscpif = NULL; } } g_ifMap.clear(); // Remove all items UNLOCK_MUTEX(g_mapMutex); pthread_mutex_destroy(&g_mapMutex); }
void dlgVscpInterfaceSettings::OnButtonTestInterfaceClick( wxCommandEvent& event ) { VscpRemoteTcpIf tcpif; wxString wxstr; m_btnTestConnection->Enable( false ); // If server username is given and no password is entered we ask for it. if ( m_RemoteServerPassword->GetValue().IsEmpty() && !m_RemoteServerUsername->GetValue().IsEmpty() ) { wxstr = ::wxGetTextFromUser( _("Please enter password"), _("Connection Test") ); } else { wxstr = m_RemoteServerPassword->GetValue(); } wxBusyCursor busy; long rv = tcpif.doCmdOpen( m_RemoteServerURL->GetValue(), m_RemoteServerUsername->GetValue(), wxstr ); if ( VSCP_ERROR_SUCCESS == rv ) { tcpif.doCmdClose(); wxMessageBox(_("Successful connect to server."), _("Connection Test"), wxICON_INFORMATION ); /*rv = tcpif.doCmdNOOP(); if ( CANAL_ERROR_SUCCESS == rv ) { wxMessageBox(_("Successful connect to server."), _("Connection Test"), wxICON_INFORMATION ); } else { wxMessageBox(_("Failed do command on server (connected OK)."), _("Connection Test"), wxICON_STOP ); }*/ } else { wxMessageBox(_("Failed to connect to server."), _("Connection Test"), wxICON_STOP ); tcpif.doCmdClose(); } m_btnTestConnection->Enable( true ); event.Skip(); }
extern "C" int CanalClose( long handle ) { int rv = 0; VscpRemoteTcpIf *pvscpif = theApp.getDriverObject( handle ); if ( NULL == pvscpif ) return CANAL_ERROR_MEMORY; pvscpif->doCmdClose(); theApp.removeDriverObject( handle ); rv = CANAL_ERROR_SUCCESS; return rv; }
CVSCPL1App::~CVSCPL1App() { LOCK_MUTEX( m_objMutex ); for ( int i = 0; i<VSCP_LEVEL1_INTERFACE_MAX_OPEN; i++ ) { if ( NULL == m_pvscpifArray[ i ] ) { VscpRemoteTcpIf *pvscpif = getDriverObject( i ); if ( NULL != pvscpif ) { pvscpif->doCmdClose(); delete m_pvscpifArray[ i ]; m_pvscpifArray[ i ] = NULL; } } } UNLOCK_MUTEX( m_objMutex ); pthread_mutex_destroy( &m_objMutex ); }
void dlgVscpInterfaceSettings::OnButtonGetInterfacesClick( wxCommandEvent& event ) { VscpRemoteTcpIf tcpif; wxString wxstr; m_btnGetInterfaces->Enable( false ); // If server username is given and no password is entered we ask for it. if ( m_RemoteServerPassword->GetValue().IsEmpty() && !m_RemoteServerUsername->GetValue().IsEmpty() ) { wxstr = ::wxGetTextFromUser( _("Please enter password"), _("Password is needed") ); } else { wxstr = m_RemoteServerPassword->GetValue(); } wxBusyCursor busy; long rv = tcpif.doCmdOpen( m_RemoteServerURL->GetValue(), m_RemoteServerUsername->GetValue(), wxstr ); if ( VSCP_ERROR_SUCCESS == rv ) { // Get the interface list wxArrayString array; tcpif.doCmdInterfaceList( array ); // Close the channel tcpif.doCmdClose(); if ( array.Count() ) { dlgSelectDaemonInterface dlg( this ); for ( unsigned int i=0; i<array.Count(); i++ ) { wxStringTokenizer tkz( array[i], _(",") ); wxString strOrdinal = tkz.GetNextToken(); wxString strType = tkz.GetNextToken(); wxString strGUID = tkz.GetNextToken(); wxString strDescription = tkz.GetNextToken(); wxString strLine = strGUID; strLine += _(" "); strLine += _(" Type = "); strLine += strType; strLine += _(" - "); strLine += strDescription; dlg.m_ctrlListInterfaces->Append( strLine ); } if ( wxID_OK == dlg.ShowModal() ) { int selidx; if ( wxNOT_FOUND != ( selidx = dlg.m_ctrlListInterfaces->GetSelection() ) ) { wxStringTokenizer tkz( array[selidx], _(",") ); wxString strOrdinal = tkz.GetNextToken(); wxString strType = tkz.GetNextToken(); wxString strGUID = tkz.GetNextToken(); // Name of interface wxString strifName = tkz.GetNextToken(); int pos; if ( wxNOT_FOUND != ( pos = strifName.Find(_(" ") ) ) ) { strifName = strifName.Left( pos ); strifName.Trim(); } m_RemoteInterfaceName->ChangeValue( strifName ); } } } else { wxMessageBox(_("No interfaces found!")); } } else { wxMessageBox(_("Failed to connect to server."), _("Get daemon interfaces"), wxICON_STOP ); } m_btnGetInterfaces->Enable( true ); event.Skip( false ); }