Skip to content
GitLab
Projects
Groups
Snippets
Help
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
VAPython
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Locked Files
Issues
0
Issues
0
List
Boards
Labels
Service Desk
Milestones
Iterations
Merge Requests
0
Merge Requests
0
Requirements
Requirements
List
Security & Compliance
Security & Compliance
Dependency List
License Compliance
Operations
Operations
Incidents
Packages & Registries
Packages & Registries
Container Registry
Analytics
Analytics
Code Review
Insights
Issue
Repository
Value Stream
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
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
Show 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
;
std
::
string
sServerIP
=
pcServerIP
?
std
::
string
(
pcServerIP
)
:
"localhost"
;
PyErr_SetString
(
PyExc_ConnectionError
,
std
::
string
(
"Could not connect to "
+
sServerIP
+
" on "
+
std
::
to_string
(
(
long
)
iServerPort
)
).
c_str
()
);
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