Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Submit feedback
Sign in
Toggle navigation
VAPython
Project overview
Project overview
Details
Activity
Releases
Cycle Analytics
Insights
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Security & Compliance
Security & Compliance
Dependency List
Packages
Packages
Container Registry
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Commits
Issue Boards
Open sidebar
Institute of Technical Acoustics (ITA)
VAPython
Commits
cf38808d
Commit
cf38808d
authored
Aug 22, 2017
by
Dipl.-Ing. Jonas Stienen
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Improving error handling and fixing problems with connection method
parent
d0999363
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
78 additions
and
70 deletions
+78
-70
CMakeLists.txt
CMakeLists.txt
+4
-4
distutils_build.bat
distutils_build.bat
+3
-3
src/vasingletonmethods.hpp
src/vasingletonmethods.hpp
+64
-60
tests/va_test_connection.py
tests/va_test_connection.py
+7
-3
No files found.
CMakeLists.txt
View file @
cf38808d
...
...
@@ -32,10 +32,10 @@ endif( )
add_custom_command
(
TARGET VAPython POST_BUILD COMMAND
"distutils_build.
${
BATCH_SCRIPT_EXTENSION
}
"
WORKING_DIRECTORY
${
CMAKE_CURRENT_SOURCE_DIR
}
COMMENT
"Running distutils"
VERBATIM
)
# configure
vista_configure_lib
(
VAPython
)
vista_install
(
VAPython
)
vista_create_cmake_configs
(
VAPython
)
vista_create_default_info_file
(
VAPython
)
#
vista_configure_lib( VAPython )
#
vista_install( VAPython )
#
vista_create_cmake_configs( VAPython )
#
vista_create_default_info_file( VAPython )
set_property
(
TARGET VAPython PROPERTY FOLDER
"VA/Bindings"
)
...
...
distutils_build.bat
View file @
cf38808d
python
.exe
setup
.py
clean
python
.exe
setup
.py
build
python
.exe
setup
.py
build
-
-force
python
.exe
setup
.py
install
-
-prefix
dist
python
.exe
setup
.py
sdist
-
-formats
=
zip
#
later
:
#
python.exe
setup
.py
bdist_wininst
rem
later:
rem
python.exe setup.py bdist_wininst
python
.exe
setup
.py
check
src/vasingletonmethods.hpp
View file @
cf38808d
...
...
@@ -11,117 +11,121 @@
static
IVANetClient
*
g_pVANetClient
=
nullptr
;
//!< Static pointer to VANetClient instance
static
PyObject
*
g_pVAError
=
nullptr
;
//!< Static pointer to error instance
// Ugly definitions to ease try-catching VA exceptions
#define VAPY_REQUIRE_CONN_TRY try { RequireCoreAvailable();
#define VAPY_CATCH_RETURN } catch (const CVAException& oError) { PyErr_SetString(PyExc_Exception, oError.ToString().c_str()); return NULL; }
//! Helper for API dev
static
PyObject
*
va_not_implemented
(
PyObject
*
pSelf
,
PyObject
**
ppArgs
,
Py_ssize_t
nArgs
,
PyObject
*
pKeywordNames
)
static
PyObject
*
va_not_implemented
(
PyObject
*
pSelf
,
PyObject
**
ppArgs
,
Py_ssize_t
nArgs
,
PyObject
*
pKeywordNames
)
{
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
)
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."
);
}
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
*
pSelf
,
PyObject
**
ppArgs
,
Py_ssize_t
nArgs
,
PyObject
*
pKeywordNames
)
static
PyObject
*
va_connect
(
PyObject
*
pSelf
,
PyObject
**
ppArgs
,
Py_ssize_t
nArgs
,
PyObject
*
pKeywordNames
)
{
if
(
!
g_pVANetClient
)
if
(
!
g_pVANetClient
)
g_pVANetClient
=
IVANetClient
::
Create
();
if
(
g_pVANetClient
->
IsConnected
()
)
if
(
g_pVANetClient
->
IsConnected
()
)
{
PyErr_Warn
(
pSelf
,
"Was still connected, forced disconnect."
);
PyErr_Warn
(
pSelf
,
"Was still connected, forced disconnect."
);
g_pVANetClient
->
Disconnect
();
}
static
const
char
*
const
_keywords
[]
=
{
"server"
,
"port"
,
NULL
};
static
_PyArg_Parser
_parser
=
{
"Oi:connect"
,
_keywords
,
0
};
PyObject
*
pServer
;
PyObject
*
pPort
;
if
(
!
_PyArg_ParseStack
(
ppArgs
,
nArgs
,
pKeywordNames
,
&
_parser
,
&
pServer
,
&
pPort
)
)
return
PyBool_FromLong
(
0
);
std
::
string
sServerIP
=
"localhost"
;
char
*
pcServerIP
=
nullptr
;
if
(
PyArg_ParseTuple
(
pPort
,
"i"
,
&
pcServerIP
)
)
sServerIP
=
std
::
string
(
pcServerIP
);
static
_PyArg_Parser
_parser
=
{
"|si:connect"
,
_keywords
,
0
};
char
*
pcServerIP
;
int
iServerPort
=
12340
;
int
*
piServerPort
=
nullptr
;
if
(
PyArg_ParseTuple
(
pPort
,
"i"
,
&
piServerPort
)
)
iServerPort
=
*
piServerPort
;
if
(
IVANetClient
::
VA_NO_ERROR
==
g_pVANetClient
->
Initialize
(
sServerIP
,
iServerPort
)
)
return
PyBool_FromLong
(
1
)
;
if
(
!
_PyArg_ParseStack
(
ppArgs
,
nArgs
,
pKeywordNames
,
&
_parser
,
pcServerIP
,
&
iServerPort
)
)
return
NULL
;
PyErr_SetString
(
PyExc_ConnectionError
,
std
::
string
(
"Could not connect to "
+
sServerIP
+
" on "
+
std
::
to_string
(
(
long
)
iServerPort
)
).
c_str
()
)
;
std
::
string
sServerIP
=
pcServerIP
?
std
::
string
(
pcServerIP
)
:
"localhost"
;
if
(
IVANetClient
::
VA_NO_ERROR
==
g_pVANetClient
->
Initialize
(
sServerIP
,
iServerPort
))
return
PyBool_FromLong
(
1
);
PyErr_SetString
(
PyExc_ConnectionError
,
std
::
string
(
"Could not connect to "
+
sServerIP
+
" on "
+
std
::
to_string
((
long
)
iServerPort
)).
c_str
());
return
NULL
;
}
}
;
static
PyObject
*
va_disconnect
(
PyObject
*
pSelf
,
PyObject
**
ppArgs
,
Py_ssize_t
nArgs
,
PyObject
*
pKeywordNames
)
static
PyObject
*
va_disconnect
(
PyObject
*
pSelf
,
PyObject
**
ppArgs
,
Py_ssize_t
nArgs
,
PyObject
*
pKeywordNames
)
{
if
(
g_pVANetClient
)
if
(
g_pVANetClient
)
g_pVANetClient
->
Disconnect
();
else
PyErr_Warn
(
pSelf
,
"Was not connected, doing nothing. Use is_connected to avoid this message."
);
return
PyBool_FromLong
(
1
);
};
return
PyBool_FromLong
(
1
);
}
static
PyObject
*
va_is_connected
(
PyObject
*
pSelf
,
PyObject
**
ppArgs
,
Py_ssize_t
nArgs
,
PyObject
*
pKeywordNames
)
static
PyObject
*
va_is_connected
(
PyObject
*
pSelf
,
PyObject
**
ppArgs
,
Py_ssize_t
nArgs
,
PyObject
*
pKeywordNames
)
{
if
(
!
g_pVANetClient
)
return
PyBool_FromLong
(
0
);
if
(
!
g_pVANetClient
)
return
PyBool_FromLong
(
0
);
else
return
PyBool_FromLong
(
g_pVANetClient
->
IsConnected
()
);
}
return
PyBool_FromLong
(
g_pVANetClient
->
IsConnected
()
);
}
;
static
PyObject
*
va_reset
(
PyObject
*
pSelf
,
PyObject
**
ppArgs
,
Py_ssize_t
nArgs
,
PyObject
*
pKeywordNames
)
static
PyObject
*
va_reset
(
PyObject
*
pSelf
,
PyObject
**
ppArgs
,
Py_ssize_t
nArgs
,
PyObject
*
pKeywordNames
)
{
RequireCoreAvailable
()
;
VAPY_REQUIRE_CONN_TRY
;
g_pVANetClient
->
GetCoreInstance
()
->
Reset
();
return
PyBool_FromLong
(
1
);
return
PyBool_FromLong
(
1
)
;
}
VAPY_CATCH_RETURN
;
}
;
static
PyObject
*
va_enumerate_modules
(
PyObject
*
pSelf
,
PyObject
**
ppArgs
,
Py_ssize_t
nArgs
,
PyObject
*
pKeywordNames
)
static
PyObject
*
va_enumerate_modules
(
PyObject
*
pSelf
,
PyObject
**
ppArgs
,
Py_ssize_t
nArgs
,
PyObject
*
pKeywordNames
)
{
RequireCoreAvailable
()
;
VAPY_REQUIRE_CONN_TRY
;
VA_EXCEPT_NOT_IMPLEMENTED
;
return
NULL
;
}
static
PyObject
*
va_call_module
(
PyObject
*
pSelf
,
PyObject
**
ppArgs
,
Py_ssize_t
nArgs
,
PyObject
*
pKeywordNames
)
VAPY_CATCH_RETURN
;
};
static
PyObject
*
va_call_module
(
PyObject
*
pSelf
,
PyObject
**
ppArgs
,
Py_ssize_t
nArgs
,
PyObject
*
pKeywordNames
)
{
RequireCoreAvailable
()
;
VAPY_REQUIRE_CONN_TRY
;
VA_EXCEPT_NOT_IMPLEMENTED
;
return
NULL
;
}
static
PyObject
*
va_add_search_path
(
PyObject
*
pSelf
,
PyObject
**
ppArgs
,
Py_ssize_t
nArgs
,
PyObject
*
pKeywordNames
)
VAPY_CATCH_RETURN
;
};
static
PyObject
*
va_add_search_path
(
PyObject
*
pSelf
,
PyObject
**
ppArgs
,
Py_ssize_t
nArgs
,
PyObject
*
pKeywordNames
)
{
RequireCoreAvailable
()
;
VAPY_REQUIRE_CONN_TRY
;
VA_EXCEPT_NOT_IMPLEMENTED
;
return
NULL
;
}
static
PyObject
*
va_create_listener
(
PyObject
*
pSelf
,
PyObject
**
ppArgs
,
Py_ssize_t
nArgs
,
PyObject
*
pKeywordNames
)
VAPY_CATCH_RETURN
;
};
static
PyObject
*
va_create_listener
(
PyObject
*
pSelf
,
PyObject
**
ppArgs
,
Py_ssize_t
nArgs
,
PyObject
*
pKeywordNames
)
{
RequireCoreAvailable
()
;
VAPY_REQUIRE_CONN_TRY
;
std
::
string
sName
=
"PyListener"
;
int
iID
=
g_pVANetClient
->
GetCoreInstance
()
->
CreateListener
(
sName
,
IVACore
::
VA_AURAMODE_ALL
);
int
iID
=
g_pVANetClient
->
GetCoreInstance
()
->
CreateListener
(
sName
,
IVACore
::
VA_AURAMODE_ALL
);
return
PyLong_FromLong
(
iID
);
}
return
PyLong_FromLong
(
iID
);
VAPY_CATCH_RETURN
;
};
tests/va_test_connection.py
View file @
cf38808d
# VA is used as a singleton.
# You can access va in every script, function and method.
print
(
"Testing va extension connection."
)
# Add va module if it was not installed
import
sys
sys
.
path
.
append
(
'../Lib/site-packages'
)
# deploy structure
import
va
if
va
.
connect
(
"localhost"
,
12340
)
==
1
:
print
(
"Testing va extension connection."
)
if
va
.
connect
(
"pc-jst"
)
:
print
(
"Successfully connected"
)
else
:
print
(
"Connection failed"
)
if
va
.
is_connected
()
==
1
:
if
va
.
is_connected
()
:
va
.
disconnect
()
print
(
"Test done."
)
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment