Skip to content
GitLab
Projects
Groups
Snippets
/
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in
Toggle navigation
Menu
Open sidebar
Cameo
cameo
Commits
b32ea7e2
Commit
b32ea7e2
authored
Nov 25, 2020
by
Shervin Nourbakhsh
Browse files
(split) Fixed Rapidjson download from GIT if not installed in the system
parent
330d7e63
Changes
3
Hide whitespace changes
Inline
Side-by-side
CMakeLists.txt
View file @
b32ea7e2
...
...
@@ -3,6 +3,7 @@ if(NOT DEFINED PROJECT_NAME)
# Project name and version
project
(
cameo VERSION 1.0.1 LANGUAGES CXX
)
#cmake_policy(SET CMP0048 NEW)
endif
()
message
(
"========================================"
)
...
...
@@ -10,9 +11,11 @@ message("Project ${PROJECT_NAME}, major version: ${PROJECT_VERSION_MAJOR}, versi
include
(
GNUInstallDirs
)
include
(
CMakePackageConfigHelpers
)
include
(
FetchContent
)
if
(
NOT DEFINED BUILD_SHARED_LIBS
)
set
(
BUILD_SHARED_LIBS True
)
option
(
BUILD_SHARED_LIBS
"Building dynamic (ON) or static (OFF)"
ON
)
#set(BUILD_SHARED_LIBS True)
endif
()
if
(
NOT DEFINED CMAKE_CXX_STANDARD
)
...
...
@@ -32,9 +35,22 @@ endif()
#------------------------------------------------------------
list
(
APPEND CMAKE_MODULE_PATH
${
CMAKE_CURRENT_SOURCE_DIR
}
)
find_package
(
ZeroMQ REQUIRED
)
find_package
(
Rapidjson REQUIRED
)
find_package
(
Rapidjson QUIET
)
if
(
NOT Rapidjson_FOUND
)
message
(
WARNING
"Using Rapidjson from GIT repository"
)
FetchContent_Declare
(
rapidjson
GIT_REPOSITORY https://github.com/Tencent/rapidjson.git
GIT_TAG v1.1.0
GIT_SHALLOW True
#INSTALL_COMMAND "make install"
)
FetchContent_GetProperties
(
rapidjson
)
FetchContent_Populate
(
rapidjson
)
set
(
Rapidjson_ROOT
${
rapidjson_SOURCE_DIR
}
)
find_package
(
Rapidjson REQUIRED
)
endif
()
message
(
${
Rapidjson_INCLUDE_DIRS
}
)
#------------------------------------------------------------
# Libraries
#------------------------------------------------------------
...
...
@@ -42,9 +58,6 @@ find_package(Rapidjson REQUIRED)
#---------------
# Files
file
(
GLOB_RECURSE CAMEO_SOURCE_FILES
"src/*.cpp"
)
#file(GLOB CAMEO_PUBLIC_HEADER_FILES "./*.h")
#message(${CAMEO_PUBLIC_HEADER_FILES})
#message(${CAMEO_SOURCE_FILES})
add_library
(
cameo
${
CAMEO_SOURCE_FILES
}
)
target_link_libraries
(
cameo PRIVATE zmq
)
...
...
@@ -53,6 +66,9 @@ target_include_directories(cameo
PUBLIC $<BUILD_INTERFACE:
${
CMAKE_CURRENT_SOURCE_DIR
}
/include>
PUBLIC $<INSTALL_INTERFACE:
${
CMAKE_INSTALL_INCLUDEDIR
}
>
)
target_include_directories
(
cameo
SYSTEM PRIVATE
${
Rapidjson_INCLUDE_DIRS
}
/
)
#target_include_directories(cameo PRIVATE ${DOCTEST_INCLUDE_DIR})
#target_compile_features(cameo PUBLIC cxx_std_11)
...
...
@@ -156,7 +172,7 @@ if (DOXYGEN_FOUND)
message
(
"Doxygen build started"
)
# note the option ALL which allows to build the docs together with the application
add_custom_target
(
doc
add_custom_target
(
cameo_
doc
COMMAND
${
DOXYGEN_EXECUTABLE
}
${
DOXYGEN_OUT
}
WORKING_DIRECTORY
${
CMAKE_CURRENT_BINARY_DIR
}
COMMENT
"Generating API documentation with Doxygen"
...
...
include/Application.h
View file @
b32ea7e2
...
...
@@ -40,8 +40,8 @@
namespace
cameo
{
enum
Option
{
NONE
=
0
,
OUTPUTSTREAM
=
1
NONE
=
0
,
OUTPUTSTREAM
=
1
};
class
Server
;
...
...
@@ -72,23 +72,23 @@ typedef int32_t State;
#undef ERROR
const
State
UNKNOWN
=
0
;
const
State
STARTING
=
1
;
const
State
RUNNING
=
2
;
const
State
STOPPING
=
4
;
const
State
KILLING
=
8
;
const
State
UNKNOWN
=
0
;
const
State
STARTING
=
1
;
const
State
RUNNING
=
2
;
const
State
STOPPING
=
4
;
const
State
KILLING
=
8
;
const
State
PROCESSING_ERROR
=
16
;
const
State
FAILURE
=
32
;
const
State
SUCCESS
=
64
;
const
State
STOPPED
=
128
;
const
State
KILLED
=
256
;
/** \class This
* \brief class managing the current CAMEO application.
*
* \details The application has to be launched by CAMEO command line or another CAMEO app
* \todo why this does not inherit from the Instance class?
*/
const
State
FAILURE
=
32
;
const
State
SUCCESS
=
64
;
const
State
STOPPED
=
128
;
const
State
KILLED
=
256
;
/** \class This
* \brief class managing the current CAMEO application.
*
* \details The application has to be launched by CAMEO command line or another CAMEO app
* \todo why this does not inherit from the Instance class?
*/
class
This
:
private
Services
,
private
EventListener
{
friend
class
cameo
::
application
::
Publisher
;
...
...
@@ -103,7 +103,7 @@ class This : private Services, private EventListener {
friend
class
cameo
::
Server
;
friend
std
::
ostream
&
operator
<<
(
std
::
ostream
&
,
const
cameo
::
application
::
This
&
);
typedef
std
::
function
<
void
()
>
StopFunctionType
;
typedef
std
::
function
<
void
()
>
StopFunctionType
;
public:
/**
...
...
@@ -123,25 +123,27 @@ public:
void
releasePort
(
int
port
)
const
;
private:
Com
(
Server
*
server
,
int
applicationId
);
Com
(
Server
*
server
,
int
applicationId
);
Server
*
m_server
;
Server
*
m_server
;
int
m_applicationId
;
};
This
();
~
This
();
static
void
init
(
int
argc
,
char
*
argv
[]);
static
void
init
(
int
argc
,
char
*
argv
[]);
static
void
init
(
const
std
::
string
&
name
,
const
std
::
string
&
endpoint
);
/**
* The terminate call is not necessary unless the static instance of This is not destroyed automatically.
* The terminate call is not necessary unless the static instance of This is not destroyed
* automatically.
*/
static
void
terminate
();
static
const
std
::
string
&
getName
();
///< returns the name of the CAMEO application corresponding to this instance
static
int
getId
();
///< returns the ID number of the instance
/// \brief returns the name of the CAMEO application corresponding to this instance
static
const
std
::
string
&
getName
();
static
int
getId
();
///< returns the ID number of the instance
static
void
setTimeout
(
int
timeout
);
static
int
getTimeout
();
static
const
Endpoint
&
getEndpoint
();
///< returns the TCP address of this instance
...
...
@@ -156,9 +158,10 @@ public:
static
bool
isStopping
();
/**
* Sets the stop handler with stopping time that overrides the one that may be defined in the configuration of the server.
* Sets the stop handler with stopping time that overrides the one that may be defined in the
* configuration of the server.
*/
template
<
typename
Type
>
template
<
typename
Type
>
static
void
handleStop
(
Type
function
,
int
stoppingTime
=
-
1
)
{
m_instance
.
handleStopImpl
(
function
,
stoppingTime
);
}
...
...
@@ -179,7 +182,7 @@ public:
static
std
::
unique_ptr
<
Instance
>
connectToStarter
();
private:
void
initApplication
(
int
argc
,
char
*
argv
[]);
void
initApplication
(
int
argc
,
char
*
argv
[]);
void
initApplication
(
const
std
::
string
&
name
,
const
std
::
string
&
endpoint
);
static
State
parseState
(
const
std
::
string
&
value
);
...
...
@@ -222,7 +225,7 @@ class Instance : private EventListener {
friend
std
::
ostream
&
operator
<<
(
std
::
ostream
&
,
const
Instance
&
);
public:
typedef
std
::
function
<
void
(
State
)
>
StateHandlerType
;
typedef
std
::
function
<
void
(
State
)
>
StateHandlerType
;
class
Com
{
...
...
@@ -232,9 +235,9 @@ public:
std
::
string
getKeyValue
(
const
std
::
string
&
key
)
const
;
private:
Com
(
Server
*
server
);
Com
(
Server
*
server
);
Server
*
m_server
;
Server
*
m_server
;
int
m_applicationId
;
};
...
...
@@ -291,7 +294,7 @@ public:
std
::
shared_ptr
<
OutputStreamSocket
>
getOutputStreamSocket
();
private:
Instance
(
Server
*
server
);
Instance
(
Server
*
server
);
void
setId
(
int
id
);
void
setErrorMessage
(
const
std
::
string
&
message
);
...
...
@@ -300,7 +303,7 @@ private:
void
setInitialState
(
State
state
);
State
waitFor
(
int
states
,
const
std
::
string
&
eventName
,
KeyValue
&
keyValue
,
StateHandlerType
handler
,
bool
blocking
);
Server
*
m_server
;
Server
*
m_server
;
std
::
shared_ptr
<
OutputStreamSocket
>
m_outputStreamSocket
;
int
m_id
;
std
::
string
m_errorMessage
;
...
...
@@ -379,7 +382,8 @@ public:
bool
isEnded
()
const
;
private:
Publisher
(
application
::
This
*
application
,
int
publisherPort
,
int
synchronizerPort
,
const
std
::
string
&
name
,
int
numberOfSubscribers
);
Publisher
(
application
::
This
*
application
,
int
publisherPort
,
int
synchronizerPort
,
const
std
::
string
&
name
,
int
numberOfSubscribers
);
std
::
unique_ptr
<
PublisherImpl
>
m_impl
;
std
::
unique_ptr
<
WaitingImpl
>
m_waiting
;
...
...
@@ -397,7 +401,7 @@ class Subscriber {
public:
~
Subscriber
();
static
std
::
unique_ptr
<
Subscriber
>
create
(
Instance
&
instance
,
const
std
::
string
&
publisherName
);
static
std
::
unique_ptr
<
Subscriber
>
create
(
Instance
&
instance
,
const
std
::
string
&
publisherName
);
const
std
::
string
&
getPublisherName
()
const
;
const
std
::
string
&
getInstanceName
()
const
;
...
...
@@ -423,7 +427,9 @@ public:
void
cancel
();
private:
Subscriber
(
Server
*
server
,
int
publisherPort
,
int
synchronizerPort
,
const
std
::
string
&
publisherName
,
int
numberOfSubscribers
,
const
std
::
string
&
instanceName
,
int
instanceId
,
const
std
::
string
&
instanceEndpoint
,
const
std
::
string
&
statusEndpoint
);
Subscriber
(
Server
*
server
,
int
publisherPort
,
int
synchronizerPort
,
const
std
::
string
&
publisherName
,
int
numberOfSubscribers
,
const
std
::
string
&
instanceName
,
int
instanceId
,
const
std
::
string
&
instanceEndpoint
,
const
std
::
string
&
statusEndpoint
);
void
init
();
std
::
unique_ptr
<
SubscriberImpl
>
m_impl
;
...
...
@@ -461,7 +467,7 @@ public:
std
::
unique_ptr
<
Server
>
getServer
();
private:
Request
(
std
::
unique_ptr
<
RequestImpl
>
&
impl
);
Request
(
std
::
unique_ptr
<
RequestImpl
>&
impl
);
std
::
unique_ptr
<
RequestImpl
>
m_impl
;
std
::
unique_ptr
<
Server
>
m_requesterServer
;
...
...
@@ -487,7 +493,7 @@ public:
void
cancel
();
/** \brief Receive a request
/** \brief Receive a request
* blocking command
*/
std
::
unique_ptr
<
Request
>
receive
();
...
...
@@ -496,7 +502,7 @@ public:
bool
isCanceled
()
const
;
private:
Responder
(
application
::
This
*
application
,
int
responderPort
,
const
std
::
string
&
name
);
Responder
(
application
::
This
*
application
,
int
responderPort
,
const
std
::
string
&
name
);
std
::
unique_ptr
<
ResponderImpl
>
m_impl
;
std
::
unique_ptr
<
WaitingImpl
>
m_waiting
;
...
...
@@ -507,7 +513,7 @@ private:
class
Requester
{
friend
std
::
ostream
&
operator
<<
(
std
::
ostream
&
,
const
Requester
&
);
friend
std
::
ostream
&
operator
<<
(
std
::
ostream
&
,
const
Requester
&
);
public:
~
Requester
();
...
...
@@ -516,7 +522,7 @@ public:
* Returns the responder with name.
* throws RequesterCreationException.
*/
static
std
::
unique_ptr
<
Requester
>
create
(
Instance
&
instance
,
const
std
::
string
&
name
);
static
std
::
unique_ptr
<
Requester
>
create
(
Instance
&
instance
,
const
std
::
string
&
name
);
const
std
::
string
&
getName
()
const
;
...
...
@@ -532,7 +538,8 @@ public:
bool
isCanceled
()
const
;
private:
Requester
(
application
::
This
*
application
,
const
std
::
string
&
url
,
int
requesterPort
,
int
responderPort
,
const
std
::
string
&
name
,
int
responderId
,
int
requesterId
);
Requester
(
application
::
This
*
application
,
const
std
::
string
&
url
,
int
requesterPort
,
int
responderPort
,
const
std
::
string
&
name
,
int
responderId
,
int
requesterId
);
std
::
unique_ptr
<
RequesterImpl
>
m_impl
;
std
::
unique_ptr
<
WaitingImpl
>
m_waiting
;
...
...
@@ -546,7 +553,8 @@ class Configuration {
friend
std
::
ostream
&
operator
<<
(
std
::
ostream
&
,
const
Configuration
&
);
public:
Configuration
(
const
std
::
string
&
name
,
const
std
::
string
&
description
,
bool
singleInfo
,
bool
restart
,
int
startingTime
,
int
stoppingTime
);
Configuration
(
const
std
::
string
&
name
,
const
std
::
string
&
description
,
bool
singleInfo
,
bool
restart
,
int
startingTime
,
int
stoppingTime
);
const
std
::
string
&
getName
()
const
;
const
std
::
string
&
getDescription
()
const
;
...
...
@@ -572,7 +580,8 @@ class Info {
friend
std
::
ostream
&
operator
<<
(
std
::
ostream
&
,
const
Info
&
);
public:
Info
(
const
std
::
string
&
name
,
int
id
,
int
pid
,
State
applicationState
,
State
pastApplicationStates
,
const
std
::
string
&
args
);
Info
(
const
std
::
string
&
name
,
int
id
,
int
pid
,
State
applicationState
,
State
pastApplicationStates
,
const
std
::
string
&
args
);
int
getId
()
const
;
State
getState
()
const
;
...
...
@@ -623,9 +632,7 @@ std::ostream& operator<<(std::ostream&, const cameo::application::Configuration&
std
::
ostream
&
operator
<<
(
std
::
ostream
&
,
const
cameo
::
application
::
Info
&
);
std
::
ostream
&
operator
<<
(
std
::
ostream
&
,
const
cameo
::
application
::
Port
&
);
}
}
}
// namespace application
}
// namespace cameo
#endif
tests/CMakeLists.txt
View file @
b32ea7e2
...
...
@@ -19,6 +19,10 @@ target_link_libraries(testapplicationidentity
target_include_directories
(
testapplicationidentity
PRIVATE
${
CMAKE_CURRENT_SOURCE_DIR
}
/../src/
)
target_include_directories
(
testapplicationidentity
SYSTEM PRIVATE
${
Rapidjson_INCLUDE_DIRS
}
/
)
add_test
(
applicationidentity testapplicationidentity
)
...
...
@@ -30,5 +34,8 @@ target_link_libraries(testapplicationwithstarteridentity PRIVATE
target_include_directories
(
testapplicationwithstarteridentity
PRIVATE
${
CMAKE_CURRENT_SOURCE_DIR
}
/../src/
)
target_include_directories
(
testapplicationwithstarteridentity
SYSTEM PRIVATE
${
Rapidjson_INCLUDE_DIRS
}
/
)
add_test
(
applicationwithstarteridentity testapplicationwithstarteridentity
)
Shervin Nourbakhsh
@nourbakhsh
mentioned in commit
46e44691
·
Apr 23, 2021
mentioned in commit
46e44691
mentioned in commit 46e44691a03808a23a464818487b0dd014a9c57e
Toggle commit list
Write
Preview
Supports
Markdown
0%
Try again
or
attach a new 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