Select Git revision
vasingletonmethods.hpp

Dipl.-Ing. Jonas Stienen authored
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 );
}