Skip to content
Toggle navigation
P
Projects
G
Groups
S
Snippets
Help
ipgallery.common.cpp
/
Microservice
This project
Loading...
Sign in
Toggle navigation
Go to a project
Project
Repository
Registry
Issues
0
Merge Requests
0
Pipelines
Wiki
Settings
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Commit
9466b9ec
authored
Apr 05, 2017
by
amir
Browse files
Options
_('Browse Files')
Download
Email Patches
Plain Diff
finish RestServerZmpImpl
parent
0c17b225
Expand all
Show whitespace changes
Inline
Side-by-side
Showing
25 changed files
with
547 additions
and
136 deletions
CMakeLists.txt
schema/RestMsg.fbs
src/Microservice_App.cpp
src/Microservice_App.h
src/common/Microservice_Defines.h
src/common/Microservice_Iface.cpp
src/common/Microservice_Iface.h
src/handlers/Microservice_MonitorHandler.cpp
src/handlers/Microservice_MonitorHandler.h
src/handlers/Microservice_RMQHandler.cpp
src/handlers/Microservice_RMQHandler.h
src/handlers/Microservice_Reactor.h
src/handlers/Microservice_BaseHandler.h → src/handlers/Microservice_RestHandler.h
src/impl/servers/Microservice_IRestServerCivetWebImpl.cpp
src/impl/servers/Microservice_IRestServerCivetWebImpl.h
src/impl/servers/Microservice_IRestServerRMQImpl.cpp
src/impl/servers/Microservice_IRestServerRMQImpl.h
src/impl/servers/Microservice_IRestServerZmqImpl.cpp
src/impl/servers/Microservice_IRestServerZmqImpl.h
src/utils/CommonUtils.cpp
src/utils/CommonUtils.h
test/Microservice_ClientTest.cpp
test/Microservice_Test.cpp
test/Microservice_ZMQTest.cpp
todo_src/Microservice_RMQHandler.h
CMakeLists.txt
View file @
9466b9ec
...
...
@@ -40,7 +40,7 @@ set (3PARTY_SOURCES ../3party/civetweb/src/civetweb.c ../3party/civetweb/src/Civ
#Generate the shared library from the sources
add_library
(
Microservice SHARED
${
SOURCES
}
${
3PARTY_SOURCES
}
)
add_library
(
Microservice SHARED
${
SOURCES
}
${
3PARTY_SOURCES
}
src/impl/servers/Microservice_IRestServerZmqImpl.cpp src/impl/servers/Microservice_IRestServerZmqImpl.h src/common/Microservice_Iface.cpp
)
target_link_libraries
(
Microservice
${
PROJECT_LINK_LIBS
}
)
set_target_properties
(
Microservice PROPERTIES VERSION
${
Microservice_VERSION_STRING
}
SOVERSION
${
Microservice_VERSION_MAJOR
}
)
...
...
schema/RestMsg.fbs
View file @
9466b9ec
namespace common.context;
enum CrudMethod:byte { Create = 0, Read, Update, Delete }
table RestMsg {
source:string;
crudMethod:CrudMethod = Read;
url:string;
queryString:string;
content:string;
...
...
src/Microservice_App.cpp
View file @
9466b9ec
...
...
@@ -8,7 +8,7 @@
#include <Microservice_App.h>
#include <params/Microservice_Params.h>
#include <handlers/Microservice_
Base
Handler.h>
#include <handlers/Microservice_
Rest
Handler.h>
#include <handlers/Microservice_MonitorHandler.h>
#include <algorithm>
#include <Microservice_Client.h>
...
...
@@ -79,7 +79,7 @@ Microservice_App::Microservice_App(const char* appName) {
Microservice_App
&
Microservice_App
::
withMonitoring
()
{
this
->
mpc_MonitorHandler
=
new
cMicroservice_MonitorHandler
();
return
addHandler
(
nsMicroservice_Constants
::
MON_PREFIX
,
(
cMicroservice_Base
Handler
*
)
mpc_MonitorHandler
);
return
addHandler
(
nsMicroservice_Constants
::
MON_PREFIX
,
(
Microservice_Rest
Handler
*
)
mpc_MonitorHandler
);
}
...
...
@@ -112,7 +112,7 @@ Microservice_App& Microservice_App::withMonitoring() {
// for (std::map<std::string,cMicroservice_BaseHandler*>::iterator itr = mc_HandlersMap.begin();
// itr != mc_HandlersMap.end(); ++itr)
// {
//
cMicroservice_RestHandler* pc_RestHandler = new c
Microservice_RestHandler(itr->first,itr->second);
//
Microservice_RestHandler* pc_RestHandler = new
Microservice_RestHandler(itr->first,itr->second);
// mpc_RestServer->AddHandler(itr->first.c_str(),pc_RestHandler);
// }
//
...
...
@@ -154,7 +154,7 @@ Microservice_App& Microservice_App::addHandler(const char* pba_Prefix, IHandler*
* add handler according to implementation types
*/
std
::
string
prefix
;
cMicroservice_BaseHandler
*
p_microservice_baseHandler
=
dynamic_cast
<
cMicroservice_Base
Handler
*>
(
p_handler
);
Microservice_RestHandler
*
p_microservice_baseHandler
=
dynamic_cast
<
Microservice_Rest
Handler
*>
(
p_handler
);
if
(
p_microservice_baseHandler
){
reactor_
.
RegisterHandler
(
prefix
.
append
(
IRestServer
::
TYPE
).
append
(
nsMicroservice_Constants
::
TYPE_PREFIX_SEPERATOR
).
append
(
pba_Prefix
),
p_handler
);
...
...
src/Microservice_App.h
View file @
9466b9ec
...
...
@@ -24,7 +24,7 @@
class
cMicroservice_RestServerParams
;
class
cMicroservice_RMQServerParams
;
class
cMicroservice_Base
Handler
;
class
Microservice_Rest
Handler
;
//class cMicroservice_RestServer;
//class cMicroservice_RMQServer;
class
cMicroservice_MonitorHandler
;
...
...
@@ -41,7 +41,7 @@ private:
cMicroservice_RMQServerParams
*
mpc_RMQParams
;
std
::
string
mc_AppName
;
std
::
string
mc_AppInstance
;
std
::
map
<
std
::
string
,
cMicroservice_Base
Handler
*>
mc_HandlersMap
;
std
::
map
<
std
::
string
,
Microservice_Rest
Handler
*>
mc_HandlersMap
;
std
::
map
<
std
::
string
,
cMicroservice_Client
*>
mc_ClientMap
;
//std::vector<IRestServer*> mc_ServerList;
std
::
vector
<
IServer
*>
servers_
;
...
...
src/common/Microservice_Defines.h
View file @
9466b9ec
...
...
@@ -49,6 +49,9 @@ namespace nsMicroservice_Constants
static
const
char
*
FAILED_TO_FIND_HANDLER
=
"Failed to find handler for key: "
;
static
const
char
*
INVALID_CONTEXT
=
" Invalid context "
;
static
const
char
*
const
TYPE_PREFIX_SEPERATOR
=
":"
;
static
const
char
*
const
EXIT_MSG
=
"exit"
;
static
const
int
EXIT_MSG_LEN
=
strlen
(
EXIT_MSG
);
}
/*
...
...
src/common/Microservice_Iface.cpp
0 → 100644
View file @
9466b9ec
//
// Created by amir on 05/04/17.
//
#include "Microservice_Iface.h"
#include <Microservice_BaseRestResponse.h>
using
namespace
nsMicroservice_Iface
;
void
IContainer
::
SendErrorResp
(
IResponse
*
pti_Response
,
std
::
string
error
){
/*
* create error rest response
*/
std
::
ostringstream
c_OutputStream
;
c_OutputStream
<<
nsMicroservice_Constants
::
ERROR_REST_RESPONSE_TEMPLATE_PREFIX
<<
error
.
c_str
()
<<
nsMicroservice_Constants
::
ERROR_REST_RESPONSE_TEMPLATE_SUFFIX
<<
'}'
;
/*
* send it
*/
//pti_Response->Send(mba_ErrorBuff);
pti_Response
->
Send
(
c_OutputStream
.
str
().
c_str
());
}
void
IContainer
::
WriteObjectToResponse
(
nsMicroservice_Iface
::
IResponse
*
pti_Response
,
rapidjson
::
Document
&
t_ObjectDoc
)
{
std
::
ostringstream
c_OutputStream
;
if
(
!
t_ObjectDoc
.
IsNull
())
{
rapidjson
::
StringBuffer
buffer
;
rapidjson
::
Writer
<
rapidjson
::
StringBuffer
>
writer
(
buffer
);
t_ObjectDoc
.
Accept
(
writer
);
c_OutputStream
<<
nsMicroservice_Constants
::
SUCCESS_REST_RESPONSE_TEMPLATE
<<
buffer
.
GetString
()
<<
'}'
;
}
else
{
c_OutputStream
<<
nsMicroservice_Constants
::
SUCCESS_NULL_REST_RESPONSE_TEMPLATE
<<
'}'
;
}
pti_Response
->
Send
(
c_OutputStream
.
str
().
c_str
());
}
void
IContainer
::
WriteObjectToResponse
(
nsMicroservice_Iface
::
IResponse
*
pti_Response
,
cMicroservice_BaseRestResponse
&
t_BaseRestResponse
)
{
if
(
t_BaseRestResponse
.
IsSuccess
()){
WriteObjectToResponse
(
pti_Response
,
t_BaseRestResponse
.
GetObjectNode
());
}
else
{
SendErrorResp
(
pti_Response
,
t_BaseRestResponse
.
GetError
());
}
}
void
IContainer
::
WriteStringToResponse
(
nsMicroservice_Iface
::
IResponse
*
pti_Response
,
const
char
*
pba_Doc
)
{
std
::
ostringstream
c_OutputStream
;
c_OutputStream
<<
nsMicroservice_Constants
::
SUCCESS_REST_RESPONSE_TEMPLATE
<<
pba_Doc
<<
'}'
;
pti_Response
->
Send
(
c_OutputStream
.
str
().
c_str
());
}
bool
IContainer
::
ReadObjectFromRequest
(
nsMicroservice_Iface
::
IRequest
*
pti_Request
,
rapidjson
::
Document
&
t_ObjectDoc
)
{
const
char
*
pba_Content
=
pti_Request
->
GetContent
();
if
(
pba_Content
)
{
if
(
!
t_ObjectDoc
.
Parse
<
0
>
(
pba_Content
).
HasParseError
())
return
true
;
}
return
false
;
}
src/common/Microservice_Iface.h
View file @
9466b9ec
...
...
@@ -315,16 +315,16 @@ namespace nsMicroservice_Iface
//public static Pattern seperatorPattern = Pattern.compile("/");
virtual
void
SendErrorResp
(
nsMicroservice_Iface
::
IResponse
*
pti_Response
,
std
::
string
error
)
=
0
;
virtual
void
SendErrorResp
(
nsMicroservice_Iface
::
IResponse
*
pti_Response
,
std
::
string
error
);
/**
* writing the value to resp as json
* @param res
* @param value
*/
virtual
void
WriteObjectToResponse
(
nsMicroservice_Iface
::
IResponse
*
pti_Response
,
rapidjson
::
Document
&
t_ObjectDoc
)
=
0
;
virtual
void
WriteObjectToResponse
(
nsMicroservice_Iface
::
IResponse
*
pti_Response
,
cMicroservice_BaseRestResponse
&
t_BaseRestResponse
)
=
0
;
virtual
void
WriteStringToResponse
(
nsMicroservice_Iface
::
IResponse
*
pti_Response
,
const
char
*
pba_Doc
)
=
0
;
virtual
void
WriteObjectToResponse
(
nsMicroservice_Iface
::
IResponse
*
pti_Response
,
rapidjson
::
Document
&
t_ObjectDoc
);
virtual
void
WriteObjectToResponse
(
nsMicroservice_Iface
::
IResponse
*
pti_Response
,
cMicroservice_BaseRestResponse
&
t_BaseRestResponse
);
virtual
void
WriteStringToResponse
(
nsMicroservice_Iface
::
IResponse
*
pti_Response
,
const
char
*
pba_Doc
);
/**
* reading the object from the request body json
...
...
@@ -332,7 +332,7 @@ namespace nsMicroservice_Iface
* @param ObjClass
* @return
*/
virtual
bool
ReadObjectFromRequest
(
nsMicroservice_Iface
::
IRequest
*
pti_Request
,
rapidjson
::
Document
&
t_ObjectDoc
)
=
0
;
virtual
bool
ReadObjectFromRequest
(
nsMicroservice_Iface
::
IRequest
*
pti_Request
,
rapidjson
::
Document
&
t_ObjectDoc
);
////////// PUB/SUB ////////////////////////////////
/**
...
...
src/handlers/Microservice_MonitorHandler.cpp
View file @
9466b9ec
...
...
@@ -26,7 +26,7 @@ cMicroservice_MonitorHandler::~cMicroservice_MonitorHandler() {
}
void
cMicroservice_MonitorHandler
::
AddHandler
(
nsMicroservice_Iface
::
IHandler
*
p_handler
)
{
if
(
p_handler
!=
(
cMicroservice_Base
Handler
*
)
this
)
if
(
p_handler
!=
(
Microservice_Rest
Handler
*
)
this
)
handlers_
.
push_back
(
p_handler
);
}
...
...
src/handlers/Microservice_MonitorHandler.h
View file @
9466b9ec
...
...
@@ -24,7 +24,7 @@ static const char *const FAILED_RESOLVE_LOG_LEVEL = "Failed to,resolve log level
static
const
char
*
const
LEVEL
=
"level"
;
#include "Microservice_
Base
Handler.h"
#include "Microservice_
Rest
Handler.h"
#include "Microservice_MsgQHandler.h"
#include "Microservice_PubSubHandler.h"
...
...
@@ -33,7 +33,7 @@ class Microservice_App;
/**
* inherit public virtual to support dynamic_cast of the multiple base classes
*/
class
cMicroservice_MonitorHandler
:
public
virtual
cMicroservice_Base
Handler
{
class
cMicroservice_MonitorHandler
:
public
virtual
Microservice_Rest
Handler
{
public
:
cMicroservice_MonitorHandler
();
cMicroservice_MonitorHandler
(
const
cMicroservice_MonitorHandler
&
orig
);
...
...
src/handlers/Microservice_RMQHandler.cpp
View file @
9466b9ec
...
...
@@ -25,7 +25,7 @@
#include <sstream>
cMicroservice_RMQHandler
::
cMicroservice_RMQHandler
(
std
::
string
apiContextPath
,
cMicroservice_Base
Handler
*
pc_Handler
)
:
cMicroservice_RMQHandler
::
cMicroservice_RMQHandler
(
std
::
string
apiContextPath
,
Microservice_Rest
Handler
*
pc_Handler
)
:
mpc_Handler
(
pc_Handler
)
{
mpc_Buffer
=
new
rapidjson
::
StringBuffer
(
0
,
nsMicroservice_Constants
::
MAX_JSON_BUFFER
);
...
...
src/handlers/Microservice_RMQHandler.h
View file @
9466b9ec
...
...
@@ -13,7 +13,7 @@
#include <stddef.h>
#include <writer.h>
#include <stringbuffer.h>
#include "Microservice_
Base
Handler.h"
#include "Microservice_
Rest
Handler.h"
class
cMicroservice_RequestContext
;
...
...
@@ -25,7 +25,7 @@ private:
JsonStringWriter
*
mpc_Writer
;
rapidjson
::
StringBuffer
*
mpc_Buffer
;
std
::
string
apiContextPath
;
cMicroservice_Base
Handler
*
mpc_Handler
;
Microservice_Rest
Handler
*
mpc_Handler
;
nsMicroservice_Iface
::
ILogger
*
mpc_Logger
;
cMicroservice_RequestContext
*
mpc_RequestContext
;
char
mba_Buff
[
nsMicroservice_Constants
::
MAX_URI_LENGTH
];
...
...
@@ -47,7 +47,7 @@ private:
void
GetQueryParams
(
cRMQ_Message
*
pc_Message
);
public
:
cMicroservice_RMQHandler
(
std
::
string
apiContextPath
,
cMicroservice_Base
Handler
*
pc_Handler
);
cMicroservice_RMQHandler
(
std
::
string
apiContextPath
,
Microservice_Rest
Handler
*
pc_Handler
);
void
withLogger
(
nsMicroservice_Iface
::
ILogger
*
pc_Logger
)
{
this
->
mpc_Logger
=
pc_Logger
;
}
...
...
src/handlers/Microservice_Reactor.h
View file @
9466b9ec
...
...
@@ -6,7 +6,7 @@
#define MICROSERVICE_MICROSERVICE_REACTOR_H
#include <string>
#include "Microservice_
Base
Handler.h"
#include "Microservice_
Rest
Handler.h"
/**
...
...
src/handlers/Microservice_
Base
Handler.h
→
src/handlers/Microservice_
Rest
Handler.h
View file @
9466b9ec
...
...
@@ -13,13 +13,13 @@
class
cMicroservice_App
;
class
cMicroservice_Base
Handler
:
public
nsMicroservice_Iface
::
IHandler
class
Microservice_Rest
Handler
:
public
nsMicroservice_Iface
::
IHandler
{
protected
:
JsonStringWriter
*
mpc_Writer
;
public
:
virtual
~
cMicroservice_BaseHandler
()
{
virtual
~
Microservice_RestHandler
()
{
// mpc_Configuration = nullptr;
// mpc_Logger = nullptr;
// mpc_msApp = nullptr;
...
...
src/impl/servers/Microservice_IRestServerCivetWebImpl.cpp
View file @
9466b9ec
...
...
@@ -190,7 +190,7 @@ void cMicroservice_IRestServerCivetWebImpl::HandleNewRequest(mg_connection *p_co
if
(
retStat
.
IsSuccess
())
p_reactor_
->
Delegate
(
key
,
&
ctx
);
else
SendGeneralError
(
p_connection
,
500
,
"Failed in parsing...yored lekafa.."
);
SendGeneralError
(
p_connection
,
500
,
"Failed in parsing...
kus restek!
yored lekafa.."
);
}
...
...
@@ -199,67 +199,6 @@ cMicroservice_IRestServerCivetWebImpl::SendGeneralError(mg_connection *p_connect
mg_printf
(
p_connection
,
"HTTP/1.0 %u %s
\r\n
Content-Length: 0
\r\n\r\n
"
,
respCode
,
error
);
}
void
cMicroservice_IRestServerCivetWebImpl
::
SendErrorResp
(
nsMicroservice_Iface
::
IResponse
*
pti_Response
,
std
::
string
error
)
{
/*
* create error rest response
*/
std
::
ostringstream
c_OutputStream
;
c_OutputStream
<<
nsMicroservice_Constants
::
ERROR_REST_RESPONSE_TEMPLATE_PREFIX
<<
error
.
c_str
()
<<
nsMicroservice_Constants
::
ERROR_REST_RESPONSE_TEMPLATE_SUFFIX
<<
'}'
;
/*
* send it
*/
//pti_Response->Send(mba_ErrorBuff);
pti_Response
->
Send
(
c_OutputStream
.
str
().
c_str
());
}
void
cMicroservice_IRestServerCivetWebImpl
::
WriteObjectToResponse
(
nsMicroservice_Iface
::
IResponse
*
pti_Response
,
rapidjson
::
Document
&
t_ObjectDoc
)
{
std
::
ostringstream
c_OutputStream
;
if
(
!
t_ObjectDoc
.
IsNull
())
{
rapidjson
::
StringBuffer
buffer
;
rapidjson
::
Writer
<
rapidjson
::
StringBuffer
>
writer
(
buffer
);
t_ObjectDoc
.
Accept
(
writer
);
c_OutputStream
<<
nsMicroservice_Constants
::
SUCCESS_REST_RESPONSE_TEMPLATE
<<
buffer
.
GetString
()
<<
'}'
;
}
else
{
c_OutputStream
<<
nsMicroservice_Constants
::
SUCCESS_NULL_REST_RESPONSE_TEMPLATE
<<
'}'
;
}
pti_Response
->
Send
(
c_OutputStream
.
str
().
c_str
());
}
void
cMicroservice_IRestServerCivetWebImpl
::
WriteObjectToResponse
(
nsMicroservice_Iface
::
IResponse
*
pti_Response
,
cMicroservice_BaseRestResponse
&
t_BaseRestResponse
)
{
if
(
t_BaseRestResponse
.
IsSuccess
()){
WriteObjectToResponse
(
pti_Response
,
t_BaseRestResponse
.
GetObjectNode
());
}
else
{
SendErrorResp
(
pti_Response
,
t_BaseRestResponse
.
GetError
());
}
}
void
cMicroservice_IRestServerCivetWebImpl
::
WriteStringToResponse
(
nsMicroservice_Iface
::
IResponse
*
pti_Response
,
const
char
*
pba_Doc
)
{
std
::
ostringstream
c_OutputStream
;
c_OutputStream
<<
nsMicroservice_Constants
::
SUCCESS_REST_RESPONSE_TEMPLATE
<<
pba_Doc
<<
'}'
;
pti_Response
->
Send
(
c_OutputStream
.
str
().
c_str
());
}
bool
cMicroservice_IRestServerCivetWebImpl
::
ReadObjectFromRequest
(
nsMicroservice_Iface
::
IRequest
*
pti_Request
,
rapidjson
::
Document
&
t_ObjectDoc
)
{
const
char
*
pba_Content
=
pti_Request
->
GetContent
();
if
(
pba_Content
)
{
if
(
!
t_ObjectDoc
.
Parse
<
0
>
(
pba_Content
).
HasParseError
())
return
true
;
}
return
false
;
}
MSRetStat
cMicroservice_IRestServerCivetWebImpl
::
ParseRequest
(
mg_connection
*
p_conn
,
...
...
@@ -332,37 +271,8 @@ cMicroservice_IRestServerCivetWebImpl::GetQueryParams(cMicroservice_RequestConte
memcpy
(
mba_Buff
,
p_reqInfo
->
query_string
,
(
queryLen
<
nsMicroservice_Constants
::
MAX_URI_LENGTH
)
?
queryLen
:
nsMicroservice_Constants
::
MAX_URI_LENGTH
-
1
);
mba_Buff
[
queryLen
]
=
CNULL
;
char
*
pba_token
=
strtok
(
mba_Buff
,
nsMicroservice_Constants
::
AND_SEPERATOR
);
CommonUtils
::
BuildQueryParams
(
mba_Buff
,
pc_queryParams
);
while
(
pba_token
)
{
// x=y or just x
char
*
pba_Equal
=
strchr
(
pba_token
,
'='
);
if
(
pba_Equal
)
{
*
pba_Equal
=
CNULL
;
DequeStringMap
::
iterator
t_QueryParamIter
=
pc_queryParams
->
find
(
pba_token
);
if
(
t_QueryParamIter
!=
pc_queryParams
->
end
())
{
// existing query key >> adding to deque
t_QueryParamIter
->
second
.
push_back
(
pba_Equal
+
1
);
}
else
{
// new one
std
::
deque
<
std
::
string
>
t_QueryDeque
;
t_QueryDeque
.
push_back
(
pba_Equal
+
1
);
(
*
pc_queryParams
)[
pba_token
]
=
t_QueryDeque
;
}
}
else
{
// insert empty deque - cannot insert null value
std
::
deque
<
std
::
string
>
t_QueryDeque
;
(
*
pc_queryParams
)[
pba_token
]
=
t_QueryDeque
;
}
pba_token
=
strtok
(
NULL
,
nsMicroservice_Constants
::
AND_SEPERATOR
);
}
}
eCrudMethod
cMicroservice_IRestServerCivetWebImpl
::
GetCrudMethod
(
const
mg_request_info
*
p_reqInfo
)
{
...
...
src/impl/servers/Microservice_IRestServerCivetWebImpl.h
View file @
9466b9ec
...
...
@@ -26,7 +26,7 @@ struct mg_connection;
struct
mg_context
;
struct
mg_request_info
;
//class
c
Microservice_RestHandler;
//class Microservice_RestHandler;
class
cMicroservice_IResponseRestImpl
;
class
cMicroservice_IRequestRestImpl
;
...
...
@@ -52,19 +52,6 @@ public:
void
HandleRequest
(
mg_connection
*
conn
,
const
mg_request_info
*
req_info
);
void
SendNotImplemented
(
mg_connection
*
conn
);
virtual
void
SendErrorResp
(
nsMicroservice_Iface
::
IResponse
*
pti_Response
,
std
::
string
error
)
override
;
virtual
void
WriteObjectToResponse
(
nsMicroservice_Iface
::
IResponse
*
pti_Response
,
rapidjson
::
Document
&
t_ObjectDoc
)
override
;
virtual
void
WriteObjectToResponse
(
nsMicroservice_Iface
::
IResponse
*
pti_Response
,
cMicroservice_BaseRestResponse
&
t_BaseRestResponse
)
override
;
virtual
void
WriteStringToResponse
(
nsMicroservice_Iface
::
IResponse
*
pti_Response
,
const
char
*
pba_Doc
)
override
;
virtual
bool
ReadObjectFromRequest
(
nsMicroservice_Iface
::
IRequest
*
pti_Request
,
rapidjson
::
Document
&
t_ObjectDoc
)
override
;
private
:
cMicroservice_RestServerParams
*
mpc_Param
;
struct
mg_context
*
p_ctx_
;
...
...
@@ -91,6 +78,8 @@ private:
void
GetQueryParams
(
cMicroservice_RequestContext
&
ctx
,
const
mg_request_info
*
p_reqInfo
);
eCrudMethod
GetCrudMethod
(
const
mg_request_info
*
p_reqInfo
);
};
#endif
/* MICROSERVICE_IRESTSERVERMONGOOSEIMPL_H */
...
...
src/impl/servers/Microservice_IRestServerRMQImpl.cpp
View file @
9466b9ec
...
...
@@ -53,7 +53,7 @@ bool cMicroservice_IRestServerRMQImpl::build(std::string& appName,
for
(
auto
prfxHandler
:
msHandlersMap
)
{
cMicroservice_RMQHandler
*
pc_RMQHandler
=
new
cMicroservice_RMQHandler
(
prfxHandler
.
first
,
dynamic_cast
<
cMicroservice_Base
Handler
*>
(
prfxHandler
.
second
));
cMicroservice_RMQHandler
*
pc_RMQHandler
=
new
cMicroservice_RMQHandler
(
prfxHandler
.
first
,
dynamic_cast
<
Microservice_Rest
Handler
*>
(
prfxHandler
.
second
));
pc_RMQHandler
->
withLogger
(
pc_Logger
);
this
->
mc_HandlersMap
[
prfxHandler
.
first
]
=
pc_RMQHandler
;
}
...
...
src/impl/servers/Microservice_IRestServerRMQImpl.h
View file @
9466b9ec
...
...
@@ -20,7 +20,7 @@
class
cMicroservice_RMQServerParams
;
class
cMicroservice_RMQHandler
;
class
cRMQ_MessageRest
;
//class
c
Microservice_RestHandler;
//class Microservice_RestHandler;
class
cMicroservice_IRestServerRMQImpl
:
public
nsMicroservice_Iface
::
IRestServer
{
...
...
src/impl/servers/Microservice_IRestServerZmqImpl.cpp
0 → 100644
View file @
9466b9ec
This diff is collapsed.
Click to expand it.
src/impl/servers/Microservice_IRestServerZmqImpl.h
0 → 100644
View file @
9466b9ec
//
// Created by amir on 05/04/17.
//
#ifndef MICROSERVICE_MICROSERVICE_IRESTSERVERZMQIMPL_H
#define MICROSERVICE_MICROSERVICE_IRESTSERVERZMQIMPL_H
static
const
int
HIGH_WATER_MARK
=
10000
;
#include <common/Microservice_Iface.h>
#include <zmqpp/socket.hpp>
#include <params/Microservice_Params.h>
#include <thread>
#include <zmqpp/context.hpp>
#include <common/RestMsg_generated.h>
class
Microservice_IResponseRestZmqImpl
:
public
nsMicroservice_Iface
::
IResponse
{
// for cloning
Microservice_IResponseRestZmqImpl
(
zmqpp
::
socket
*
p_respConnection
)
:
p_respConnection_
(
p_respConnection
){}
zmqpp
::
socket
*
p_respConnection_
;
public
:
Microservice_IResponseRestZmqImpl
()
:
p_respConnection_
(
nullptr
)
{}
void
Send
(
const
char
*
response
)
override
{
if
(
p_respConnection_
)
p_respConnection_
->
send
(
response
,
zmqpp
::
socket
::
dont_wait
);
}
void
Reset
()
override
{
p_respConnection_
=
nullptr
;
}
void
setRespConnection
(
zmqpp
::
socket
*
p_respConnection
)
{
Microservice_IResponseRestZmqImpl
::
p_respConnection_
=
p_respConnection
;
}
virtual
nsMicroservice_Iface
::
IResponse
*
clone
()
override
{
return
new
Microservice_IResponseRestZmqImpl
(
p_respConnection_
);
}
};
class
Microservice_IRequestRestZmqImpl
:
public
nsMicroservice_Iface
::
IRequest
{
public
:
Microservice_IRequestRestZmqImpl
()
:
p_restMsg_
(
nullptr
)
{}
void
setRestMsg
(
const
common
::
context
::
RestMsg
*
p_restMsg
)
{
Microservice_IRequestRestZmqImpl
::
p_restMsg_
=
p_restMsg
;
}
const
char
*
GetQueryString
()
override
{
if
(
p_restMsg_
)
return
p_restMsg_
->
queryString
()
->
c_str
();
return
nullptr
;
}
const
char
*
GetRelativePath
()
override
{
if
(
p_restMsg_
)
return
p_restMsg_
->
url
()
->
c_str
();
return
nullptr
;
}
const
char
*
GetContent
()
override
{
if
(
p_restMsg_
)
return
p_restMsg_
->
content
()
->
c_str
();
return
nullptr
;
}
void
Reset
()
override
{
p_restMsg_
=
nullptr
;
}
private
:
const
common
::
context
::
RestMsg
*
p_restMsg_
;
};
class
Microservice_IRestServerZmqImpl
:
public
nsMicroservice_Iface
::
IRestServer
,
public
nsMicroservice_Iface
::
IContainer
{
public
:
Microservice_IRestServerZmqImpl
(
const
Microservice_ZMQServerParams
&
params
)
:
params_
(
params
),
p_logger_
(
nullptr
),
p_runThread_
(
nullptr
){
serverType_
.
assign
(
getType
());
}
virtual
~
Microservice_IRestServerZmqImpl
();
bool
init
()
override
;
void
run
()
override
;
void
stop
()
override
;
bool
build
(
std
::
string
&
appName
,
const
std
::
map
<
std
::
string
,
nsMicroservice_Iface
::
IHandler
*>
&
msHandlersMap
,
nsMicroservice_Iface
::
ILogger
*
pc_Logger
,
nsMicroservice_Iface
::
IPubSub
*
pc_PubSub
,
nsMicroservice_Iface
::
IMetricsFactory
*
p_metrics_factory
)
override
;
void
registerService
(
nsMicroservice_Iface
::
IServiceDiscovery
*
pc_ServiceDiscovery
,
std
::
string
&
id
)
override
;
private
:
Microservice_ZMQServerParams
params_
;
nsMicroservice_Iface
::
ILogger
*
p_logger_
;
std
::
thread
*
p_runThread_
;
zmqpp
::
context
context_
;
zmqpp
::
socket
*
p_server_
;
std
::
string
serverType_
;
struct
RequestWorkParams
;
void
HandleRequest
(
RequestWorkParams
*
p_requestWorkParams
);
void
HandleNewRequest
(
RequestWorkParams
*
p_rwp
,
std
::
string
&
key
,
std
::
string
&
apiContextPath
);
void
SendNotImplemented
(
RequestWorkParams
*
p_rwp
);
MSRetStat
ParseRequest
(
RequestWorkParams
*
p_rwp
,
cMicroservice_RequestContext
&
context
,
std
::
string
&
apiContextPath
);
eCrudMethod
GetCrudMethod
(
common
::
context
::
CrudMethod
method
)
{
switch
(
method
){
case
common
:
:
context
::
CrudMethod
::
CrudMethod_Create
:
return
eCrudMethod
::
eCreate
;
case
common
:
:
context
::
CrudMethod
::
CrudMethod_Read
:
return
eCrudMethod
::
eRead
;
case
common
:
:
context
::
CrudMethod
::
CrudMethod_Update
:
return
eCrudMethod
::
eUpdate
;
case
common
:
:
context
::
CrudMethod
::
CrudMethod_Delete
:
return
eCrudMethod
::
eDelete
;
}
return
eCrudMethod
::
eMaxMethods
;
}
void
GetQueryParams
(
cMicroservice_RequestContext
&
ctx
,
RequestWorkParams
*
p_rwp
,
const
common
::
context
::
RestMsg
*
p_restMsg
);
void
LogRequest
(
const
common
::
context
::
RestMsg
*
p_restMsg
);
};
#endif //MICROSERVICE_MICROSERVICE_IRESTSERVERZMQIMPL_H
src/utils/CommonUtils.cpp
View file @
9466b9ec
...
...
@@ -3,3 +3,38 @@
//
#include "CommonUtils.h"
void
CommonUtils
::
BuildQueryParams
(
char
*
buffer
,
DequeStringMap
*
p_queryParams
)
{
char
*
pba_token
=
strtok
(
buffer
,
nsMicroservice_Constants
::
AND_SEPERATOR
);
while
(
pba_token
)
{
// x=y or just x
char
*
pba_Equal
=
strchr
(
pba_token
,
'='
);
if
(
pba_Equal
)
{
*
pba_Equal
=
CNULL
;
auto
t_QueryParamIter
=
p_queryParams
->
find
(
pba_token
);
if
(
t_QueryParamIter
!=
p_queryParams
->
end
())
{
// existing query key >> adding to deque
t_QueryParamIter
->
second
.
push_back
(
pba_Equal
+
1
);
}
else
{
// new one
std
::
deque
<
std
::
string
>
t_QueryDeque
;
t_QueryDeque
.
push_back
(
pba_Equal
+
1
);
(
*
p_queryParams
)[
pba_token
]
=
t_QueryDeque
;
}
}
else
{
// insert empty deque - cannot insert null value
std
::
deque
<
std
::
string
>
t_QueryDeque
;
(
*
p_queryParams
)[
pba_token
]
=
t_QueryDeque
;
}
pba_token
=
strtok
(
NULL
,
nsMicroservice_Constants
::
AND_SEPERATOR
);
}
}
src/utils/CommonUtils.h
View file @
9466b9ec
...
...
@@ -10,6 +10,7 @@
#include <utility>
#include <string.h>
#include <unistd.h>
#include <common/Microservice_RequestContext.h>
/**
* common utils
...
...
@@ -50,6 +51,10 @@ public:
cpunum
=
1
;
return
(
int
)
cpunum
;
}
static
void
BuildQueryParams
(
char
*
buffer
,
DequeStringMap
*
p_queryParams
);
};
...
...
test/Microservice_ClientTest.cpp
View file @
9466b9ec
...
...
@@ -16,7 +16,7 @@
#include <utils/ClientFactory.h>
#include <utils/CommonUtils.h>
#include <flatbuffers/flatbuffers.h>
#include <common/RestMsg
Context
_generated.h>
#include <common/RestMsg_generated.h>
static
const
char
*
const
PUBSUBHOST
=
"zmqpubsub"
;
...
...
test/Microservice_Test.cpp
View file @
9466b9ec
...
...
@@ -7,7 +7,7 @@
#include <stdio.h>
#include <stdlib.h>
#include <Microservice_App.h>
#include <handlers/Microservice_
Base
Handler.h>
#include <handlers/Microservice_
Rest
Handler.h>
#include <Microservice_Client.h>
#include <params/Microservice_Params.h>
#include <document.h> //rapidjson
...
...
@@ -55,7 +55,7 @@ public:
std
::
chrono
::
steady_clock
::
time_point
start_
;
};
class
cMicroserviceHandler
:
public
virtual
cMicroservice_Base
Handler
class
cMicroserviceHandler
:
public
virtual
Microservice_Rest
Handler
{
char
mba_GetReturnedString
[
1024
];
cMicroservice_Client
*
p_rest_client_
;
...
...
@@ -304,7 +304,7 @@ void runNewMS(){
Microservice_ZMQServerParams
::
eProtocol
::
eIpc
))
.
addServer
(
ServerFactory
::
createIRestServerCivetWebImpl
(
""
,
50010
,
1
))
// .addRestServer(new cMicroservice_IRestServerCivetWebImpl(new cMicroservice_RestServerParams(50010,"",1)))
.
addServer
(
ServerFactory
::
createIMsgQueueServerZmqImpl
(
msApp
.
name
(),
0
,
Microservice_ZMQServerParams
::
eProtocol
::
eIpc
))
.
addHandler
(
"/xxx"
,(
cMicroservice_Base
Handler
*
)
new
cMicroserviceHandler
(
"hello"
))
.
addHandler
(
"/xxx"
,(
Microservice_Rest
Handler
*
)
new
cMicroserviceHandler
(
"hello"
))
.
addHandler
(
"/zmq"
,
new
MSMsgQHandler
())
.
build
()
.
run
();
...
...
test/Microservice_ZMQTest.cpp
View file @
9466b9ec
...
...
@@ -10,7 +10,7 @@
#include <thread>
#include <utils/CommonUtils.h>
#include <flatbuffers/flatbuffers.h>
#include <common/RestMsg
Context
_generated.h>
#include <common/RestMsg_generated.h>
#include <common/RestResponse_generated.h>
static
const
char
*
const
IPC_FILE1
=
"/tmp/service-name1.ipc"
;
...
...
todo_src/Microservice_RMQHandler.h
View file @
9466b9ec
...
...
@@ -13,7 +13,7 @@
#include <stddef.h>
#include <writer.h>
#include <stringbuffer.h>
#include <handlers/Microservice_
Base
Handler.h>
#include <handlers/Microservice_
Rest
Handler.h>
class
cMicroservice_RequestContext
;
...
...
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