Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
D
DapCash Wallet
Manage
Activity
Members
Labels
Plan
Issues
0
Issue boards
Milestones
Wiki
Code
Merge requests
0
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package Registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
DapCash
DapCash Wallet
Commits
0d5af640
Commit
0d5af640
authored
5 years ago
by
Alexander
Committed by
dmitriy.gerasimov
5 years ago
Browse files
Options
Downloads
Patches
Plain Diff
Features 2581
parent
00f210dc
No related branches found
No related tags found
1 merge request
!11
Cellframe clone
Changes
3
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
DapRPCProtocol/DapRpcServiceRequest.h
+30
-1
30 additions, 1 deletion
DapRPCProtocol/DapRpcServiceRequest.h
DapRPCProtocol/DapRpcSocket.h
+83
-1
83 additions, 1 deletion
DapRPCProtocol/DapRpcSocket.h
DapRPCProtocol/DapRpcTCPServer.h
+34
-2
34 additions, 2 deletions
DapRPCProtocol/DapRpcTCPServer.h
with
147 additions
and
4 deletions
DapRPCProtocol/DapRpcServiceRequest.h
+
30
−
1
View file @
0d5af640
...
@@ -8,24 +8,53 @@
...
@@ -8,24 +8,53 @@
#include
"DapRpcMessage.h"
#include
"DapRpcMessage.h"
class
DapRpcSocket
;
class
DapRpcSocket
;
/**
* @brief The DapRpcServiceRequest class
* Class provides to operate with request message by socket interface
* @see DapRpcSocket
*/
class
DapRpcServiceRequest
class
DapRpcServiceRequest
{
{
/// Request message
DapRpcMessage
m_request
;
DapRpcMessage
m_request
;
/// RPC socket
QPointer
<
DapRpcSocket
>
m_socket
;
QPointer
<
DapRpcSocket
>
m_socket
;
public:
public:
/// Standard constructor
DapRpcServiceRequest
();
DapRpcServiceRequest
();
/// Copy constructor
DapRpcServiceRequest
(
const
DapRpcServiceRequest
&
aDapRpcServiceRequest
);
DapRpcServiceRequest
(
const
DapRpcServiceRequest
&
aDapRpcServiceRequest
);
/// Overloaded constructor
/// @param aRequest Request message
/// @param apSocket Pointer to RPC socket
DapRpcServiceRequest
(
const
DapRpcMessage
&
aRequest
,
DapRpcSocket
*
apSocket
);
DapRpcServiceRequest
(
const
DapRpcMessage
&
aRequest
,
DapRpcSocket
*
apSocket
);
/// Overloaded assignment operator
/// @param aDapRpcServiceRequest Other DapRpcServiceRequest object
/// @return Reference to this object
DapRpcServiceRequest
&
operator
=
(
const
DapRpcServiceRequest
&
aDapRpcServiceRequest
);
DapRpcServiceRequest
&
operator
=
(
const
DapRpcServiceRequest
&
aDapRpcServiceRequest
);
/// Standard destructor
~
DapRpcServiceRequest
();
~
DapRpcServiceRequest
();
/// Validation of request message
/// @return If request message is valid or socket is not null return true.
/// Otherwise return false
bool
isValid
()
const
;
bool
isValid
()
const
;
/// Get request message
/// @return Request message
DapRpcMessage
request
()
const
;
DapRpcMessage
request
()
const
;
/// Get current socket
/// @return Socket
DapRpcSocket
*
socket
()
const
;
DapRpcSocket
*
socket
()
const
;
bool
respond
(
const
DapRpcMessage
&
aResponse
);
/// Create response to following respont by socket
/// @param aReturnValue Return value from service
/// @return False if socket is closed
bool
respond
(
QVariant
aReturnValue
);
bool
respond
(
QVariant
aReturnValue
);
/// Send response to socket
/// @param aResponse Response message
/// @return False if socket is closed
bool
respond
(
const
DapRpcMessage
&
aResponse
);
};
};
#endif // DapRPCSERVICEREQUEST_H
#endif // DapRPCSERVICEREQUEST_H
This diff is collapsed.
Click to expand it.
DapRPCProtocol/DapRpcSocket.h
+
83
−
1
View file @
0d5af640
...
@@ -15,54 +15,136 @@
...
@@ -15,54 +15,136 @@
#define DEFAULT_MSECS_REQUEST_TIMEOUT (30000)
#define DEFAULT_MSECS_REQUEST_TIMEOUT (30000)
/**
* @brief The DapRpcSocket class
* Realization socket interface:
* - Store information about device and data
* - Sending/receiving messages
* - Control sending request by timeout
*/
class
DapRpcSocket
:
public
QObject
class
DapRpcSocket
:
public
QObject
{
{
Q_OBJECT
Q_OBJECT
Q_DISABLE_COPY
(
DapRpcSocket
)
Q_DISABLE_COPY
(
DapRpcSocket
)
/// Pointer to IO device
QPointer
<
QIODevice
>
m_pDevice
;
QPointer
<
QIODevice
>
m_pDevice
;
/// Buffer
QByteArray
m_aBuffer
;
QByteArray
m_aBuffer
;
/// Storage to replies by id
QHash
<
int
,
QPointer
<
DapRpcServiceReply
>>
m_replies
;
QHash
<
int
,
QPointer
<
DapRpcServiceReply
>>
m_replies
;
/// Default request timeout
int
m_defaultRequestTimeout
;
int
m_defaultRequestTimeout
;
protected:
protected:
/// TODO: not implement
/// @param asMessage Request message
virtual
void
processRequestMessage
(
const
DapRpcMessage
&
asMessage
);
virtual
void
processRequestMessage
(
const
DapRpcMessage
&
asMessage
);
public:
public:
/// Standard constructor
explicit
DapRpcSocket
(
QObject
*
apParent
=
nullptr
);
explicit
DapRpcSocket
(
QObject
*
apParent
=
nullptr
);
/// Overloaded constructor
/// @param apDevice Device whick provides both a common implementation and
/// an abstract interface for devices that support reading and writing of blocks of data
explicit
DapRpcSocket
(
QIODevice
*
apDevice
,
QObject
*
apParent
=
nullptr
);
explicit
DapRpcSocket
(
QIODevice
*
apDevice
,
QObject
*
apParent
=
nullptr
);
/// Virtual destructor
virtual
~
DapRpcSocket
();
virtual
~
DapRpcSocket
();
/// Validation initialization and open device
/// @return True if device initilized and opened. Otherwise return false
virtual
bool
isValid
()
const
;
virtual
bool
isValid
()
const
;
/// Set default request timeout
/// @param aiMsecs Miliseconds
void
setDefaultRequestTimeout
(
int
aiMsecs
);
void
setDefaultRequestTimeout
(
int
aiMsecs
);
/// Get default request timeout
/// @return Default request timeout
int
getDefaultRequestTimeout
()
const
;
int
getDefaultRequestTimeout
()
const
;
/// Set IO Device
/// @param Pointer to IO device
void
setIODevice
(
QIODevice
*
pDevice
);
void
setIODevice
(
QIODevice
*
pDevice
);
signals:
signals:
/// The signal emitted when message was received
/// @param asMessage Request message
void
messageReceived
(
const
DapRpcMessage
&
asMessage
);
void
messageReceived
(
const
DapRpcMessage
&
asMessage
);
private
slots
:
private
slots
:
/// Read data from device and prepare reply
virtual
void
processIncomingData
();
virtual
void
processIncomingData
();
/// Find end of Json document
/// @param aJsonData Json data where need to find end
/// @return Index of end json document. If file empty return -1
int
findJsonDocumentEnd
(
const
QByteArray
&
aJsonData
);
int
findJsonDocumentEnd
(
const
QByteArray
&
aJsonData
);
/// Write data from message to device
/// @param asMessage Request message
void
writeData
(
const
DapRpcMessage
&
asMessage
);
void
writeData
(
const
DapRpcMessage
&
asMessage
);
public
slots
:
public
slots
:
/// Notify to new request message and try to send to device
/// @param asMessage Request message
virtual
void
notify
(
const
DapRpcMessage
&
asMessage
);
virtual
void
notify
(
const
DapRpcMessage
&
asMessage
);
/// Send message with delay for sending message
/// @param asMessage Request message
/// @param aMsecs Delay request timeout. If not pass parameter uses default value
/// @return Response from reply
virtual
DapRpcMessage
sendMessageBlocking
(
const
DapRpcMessage
&
asMessage
,
int
aMsecs
=
DEFAULT_MSECS_REQUEST_TIMEOUT
);
virtual
DapRpcMessage
sendMessageBlocking
(
const
DapRpcMessage
&
asMessage
,
int
aMsecs
=
DEFAULT_MSECS_REQUEST_TIMEOUT
);
/// Send request message to device
/// @param asMessage Request message
/// @return Pointer of service reply
virtual
DapRpcServiceReply
*
sendMessage
(
const
DapRpcMessage
&
asMessage
);
virtual
DapRpcServiceReply
*
sendMessage
(
const
DapRpcMessage
&
asMessage
);
/// Invoke remote method and create response to send to IO device with delay
/// @param asMethod Method's name
/// @param aMsecs Delay time for send
/// @param arg1 First argument
/// @param arg2 Second argument
/// @param arg3 Third argument
/// @param arg4 Fourth argument
/// @param arg5 Fifth argument
/// @param arg6 Six argument
/// @param arg7 Seven argument
/// @param arg8 Eight argument
/// @param arg9 Nine argument
/// @param arg10 Ten argument
/// @return Response from reply
DapRpcMessage
invokeRemoteMethodBlocking
(
const
QString
&
asMethod
,
int
aMsecs
,
const
QVariant
&
arg1
=
QVariant
(),
DapRpcMessage
invokeRemoteMethodBlocking
(
const
QString
&
asMethod
,
int
aMsecs
,
const
QVariant
&
arg1
=
QVariant
(),
const
QVariant
&
arg2
=
QVariant
(),
const
QVariant
&
arg3
=
QVariant
(),
const
QVariant
&
arg2
=
QVariant
(),
const
QVariant
&
arg3
=
QVariant
(),
const
QVariant
&
arg4
=
QVariant
(),
const
QVariant
&
arg5
=
QVariant
(),
const
QVariant
&
arg4
=
QVariant
(),
const
QVariant
&
arg5
=
QVariant
(),
const
QVariant
&
arg6
=
QVariant
(),
const
QVariant
&
arg7
=
QVariant
(),
const
QVariant
&
arg6
=
QVariant
(),
const
QVariant
&
arg7
=
QVariant
(),
const
QVariant
&
arg8
=
QVariant
(),
const
QVariant
&
arg9
=
QVariant
(),
const
QVariant
&
arg8
=
QVariant
(),
const
QVariant
&
arg9
=
QVariant
(),
const
QVariant
&
arg10
=
QVariant
());
const
QVariant
&
arg10
=
QVariant
());
/// Invoke remote method and create response to send to IO device with default delay time
/// @param asMethod Method's name
/// @param arg1 First argument
/// @param arg2 Second argument
/// @param arg3 Third argument
/// @param arg4 Fourth argument
/// @param arg5 Fifth argument
/// @param arg6 Six argument
/// @param arg7 Seven argument
/// @param arg8 Eight argument
/// @param arg9 Nine argument
/// @param arg10 Ten argument
/// @return Response from reply
DapRpcMessage
invokeRemoteMethodBlocking
(
const
QString
&
asMethod
,
const
QVariant
&
arg1
=
QVariant
(),
DapRpcMessage
invokeRemoteMethodBlocking
(
const
QString
&
asMethod
,
const
QVariant
&
arg1
=
QVariant
(),
const
QVariant
&
arg2
=
QVariant
(),
const
QVariant
&
arg3
=
QVariant
(),
const
QVariant
&
arg2
=
QVariant
(),
const
QVariant
&
arg3
=
QVariant
(),
const
QVariant
&
arg4
=
QVariant
(),
const
QVariant
&
arg5
=
QVariant
(),
const
QVariant
&
arg4
=
QVariant
(),
const
QVariant
&
arg5
=
QVariant
(),
const
QVariant
&
arg6
=
QVariant
(),
const
QVariant
&
arg7
=
QVariant
(),
const
QVariant
&
arg6
=
QVariant
(),
const
QVariant
&
arg7
=
QVariant
(),
const
QVariant
&
arg8
=
QVariant
(),
const
QVariant
&
arg9
=
QVariant
(),
const
QVariant
&
arg8
=
QVariant
(),
const
QVariant
&
arg9
=
QVariant
(),
const
QVariant
&
arg10
=
QVariant
());
const
QVariant
&
arg10
=
QVariant
());
/// Invoke remote method and create response to send to IO device
/// @param asMethod Method's name
/// @param arg1 First argument
/// @param arg2 Second argument
/// @param arg3 Third argument
/// @param arg4 Fourth argument
/// @param arg5 Fifth argument
/// @param arg6 Six argument
/// @param arg7 Seven argument
/// @param arg8 Eight argument
/// @param arg9 Nine argument
/// @param arg10 Ten argument
/// @return Pointer to service reply
DapRpcServiceReply
*
invokeRemoteMethod
(
const
QString
&
asMethod
,
const
QVariant
&
arg1
=
QVariant
(),
DapRpcServiceReply
*
invokeRemoteMethod
(
const
QString
&
asMethod
,
const
QVariant
&
arg1
=
QVariant
(),
const
QVariant
&
arg2
=
QVariant
(),
const
QVariant
&
arg3
=
QVariant
(),
const
QVariant
&
arg2
=
QVariant
(),
const
QVariant
&
arg3
=
QVariant
(),
const
QVariant
&
arg4
=
QVariant
(),
const
QVariant
&
arg5
=
QVariant
(),
const
QVariant
&
arg4
=
QVariant
(),
const
QVariant
&
arg5
=
QVariant
(),
...
...
This diff is collapsed.
Click to expand it.
DapRPCProtocol/DapRpcTCPServer.h
+
34
−
2
View file @
0d5af640
...
@@ -8,36 +8,68 @@
...
@@ -8,36 +8,68 @@
#include
"DapRpcSocket.h"
#include
"DapRpcSocket.h"
#include
"DapRpcAbstractServer.h"
#include
"DapRpcAbstractServer.h"
/**
* @brief The DapRpcTCPServer class
* TCP server class realize interface DapRpcAbstractServer
* @see DapRpcAbstractServer
* @see QTcpServer
*/
class
DapRpcTCPServer
:
public
QTcpServer
,
public
DapRpcAbstractServer
class
DapRpcTCPServer
:
public
QTcpServer
,
public
DapRpcAbstractServer
{
{
Q_OBJECT
Q_OBJECT
Q_DISABLE_COPY
(
DapRpcTCPServer
)
Q_DISABLE_COPY
(
DapRpcTCPServer
)
/// Lookup's tcp sockets witj Rpc sockets
QHash
<
QTcpSocket
*
,
DapRpcSocket
*>
m_socketLookup
;
QHash
<
QTcpSocket
*
,
DapRpcSocket
*>
m_socketLookup
;
protected:
protected:
/// This virtual function is called by QTcpServer when a new connection is available
/// @param aSocketDescriptor The socketDescriptor argument is the native socket
/// descriptor for the accepted connection
virtual
void
incomingConnection
(
qintptr
aSocketDescriptor
);
virtual
void
incomingConnection
(
qintptr
aSocketDescriptor
);
public:
public:
/// Standard constructor
explicit
DapRpcTCPServer
(
QObject
*
apParent
=
nullptr
);
explicit
DapRpcTCPServer
(
QObject
*
apParent
=
nullptr
);
/// Virtual destructor
virtual
~
DapRpcTCPServer
();
virtual
~
DapRpcTCPServer
();
/// Tells the server to listen for incoming connections on address
/// @param asAddress Address
/// @param aPort Port. If port is 0, a port is chosen automatically
/// @param If address is QHostAddress::Any, the server will listen on all network interfaces
/// @return Returns true on success; otherwise returns false.
/// @see isListening()
virtual
bool
listen
(
const
QString
&
asAddress
=
QString
(),
quint16
aPort
=
0
);
virtual
bool
listen
(
const
QString
&
asAddress
=
QString
(),
quint16
aPort
=
0
);
/// Add new service
/// @param apService New service
/// @return If service add successfully return true. Otherwise return false
bool
addService
(
DapRpcService
*
apService
);
bool
addService
(
DapRpcService
*
apService
);
/// Remove service
/// @param apService Service for removing
/// @return If service add successfully return true. Otherwise return false
bool
removeService
(
DapRpcService
*
apService
);
bool
removeService
(
DapRpcService
*
apService
);
signals:
signals:
/// The signal is emitted when client was connected
void
onClientConnected
();
void
onClientConnected
();
/// The signal is emitted when client was disconnected
void
onClientDisconnected
();
void
onClientDisconnected
();
protected
slots
:
protected
slots
:
/// Calls when client disconnected
void
clientDisconnected
();
void
clientDisconnected
();
/// When receive message from client prepare message by type of message
/// @param asMessage Message
void
messageProcessing
(
const
DapRpcMessage
&
asMessage
);
void
messageProcessing
(
const
DapRpcMessage
&
asMessage
);
// DapRpcAbstractServer interface
// DapRpcAbstractServer interface
public
slots
:
public
slots
:
/// Notify connected clients. Send all message
/// @param message Message to client
void
notifyConnectedClients
(
const
DapRpcMessage
&
message
);
void
notifyConnectedClients
(
const
DapRpcMessage
&
message
);
/// Notify connected clients. Send all message
/// @param method Method which clients were notified
/// @param params Parameters of message in JSON format
void
notifyConnectedClients
(
const
QString
&
method
,
const
QJsonArray
&
params
);
void
notifyConnectedClients
(
const
QString
&
method
,
const
QJsonArray
&
params
);
};
};
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
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!
Save comment
Cancel
Please
register
or
sign in
to comment