Skip to content
Snippets Groups Projects
Select Git revision
  • 9dc0ae796b41f78ded1e71c73ecf56c1767ebf3e
  • master default protected
  • develop protected
  • ti_lab_build
  • cross_platform
  • big_2017_api_change
  • VA_v2024a
  • VA_v2023b
  • VA_v2023a
  • before_VANet_update
  • VA_v2022a
  • before_cmake_rework
  • v2021.a
  • v2020.a
  • v2019.a
  • v2018.b
16 results

vasingletonmethods.hpp

Blame
  • Code owners
    Assign users and groups as approvers for specific file changes. Learn more.
    vasingletonmethods.hpp 2.88 KiB
    #include <Python.h>
    #include <VANetClient.h>
    #include <VACore.h>
    #include <VAException.h>
    #include <string.h>
    
    // If you want to extend the va Python module interface, also add
    // the function to the va_methods table in vasingleton.cpp - otherwise they will not show up.
    // Documentation goes into vasingletondoc.hpp
    
    static IVANetClient* g_pVANetClient = nullptr; //!< Static pointer to VANetClient instance
    
    //! Helper for API dev
    static PyObject* va_not_implemented( PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames )
    {
    	VA_EXCEPT_NOT_IMPLEMENTED;
    	return NULL;
    }
    
    //! Raises an exception if core is not available
    static void RequireCoreAvailable()
    {
    	if( !g_pVANetClient )
    		VA_EXCEPT2( CVAException::NETWORK_ERROR, "VA client not available, please connect first" );
    
    	if( !g_pVANetClient->GetCoreInstance() )
    		VA_EXCEPT2( CVAException::NETWORK_ERROR, "VA client available, but access to VA interface failed. Please reconnect." );
    }
    
    static PyObject* va_connect( PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames )
    {
    	if( !g_pVANetClient )
    		g_pVANetClient = IVANetClient::Create();
    
    	if( g_pVANetClient->IsConnected() )
    		g_pVANetClient->Disconnect();
    
    	static const char * const _keywords[] = { "server", "port", NULL };
    	static _PyArg_Parser _parser = { "Oi:connect", _keywords, 0 };
    	PyObject* server;
    	PyObject* port;
    
    	if( !_PyArg_ParseStack( args, nargs, kwnames, &_parser, &server, &port ) )
    		return PyBool_FromLong( 0 );
    
    	std::string sServer = "localhost";
    	int iPort = 12340;
    	if( IVANetClient::VA_NO_ERROR == g_pVANetClient->Initialize( sServer, iPort ) )
    		return PyBool_FromLong( 1 );
    	else
    		return PyBool_FromLong( 1 );
    }
    
    static PyObject* va_disconnect( PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames )
    {
    	if( g_pVANetClient )
    		g_pVANetClient->Disconnect();
    
    	return PyBool_FromLong( 1 );
    }
    
    static PyObject* va_reset( PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames )
    {
    	RequireCoreAvailable();
    
    	g_pVANetClient->GetCoreInstance()->Reset();
    
    	return PyBool_FromLong( 1 );
    }
    
    static PyObject* va_enumerate_modules( PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames )
    {
    	RequireCoreAvailable();
    
    	VA_EXCEPT_NOT_IMPLEMENTED;
    
    	return NULL;
    }
    
    static PyObject* va_call_module( PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames )
    {
    	RequireCoreAvailable();
    
    	VA_EXCEPT_NOT_IMPLEMENTED;
    
    	return NULL;
    }
    
    static PyObject* va_add_search_path( PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames )
    {
    	RequireCoreAvailable();
    
    	VA_EXCEPT_NOT_IMPLEMENTED;
    
    	return NULL;
    }
    
    static PyObject* va_create_listener( PyObject *module, PyObject **args, Py_ssize_t nargs, PyObject *kwnames )
    {
    	RequireCoreAvailable();
    
    	std::string sName = "PyListener";
    	int iID = g_pVANetClient->GetCoreInstance()->CreateListener( sName, IVACore::VA_AURAMODE_ALL );
    
    	return PyLong_FromLong( iID );
    }