예제 #1
0
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();
}
예제 #3
0
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;
}
예제 #4
0
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 );
}