Diarkis C++Client Library API Document
tcp.h
Go to the documentation of this file.
1 // © 2019-2024 Diarkis Inc. All rights reserved.
2 
3 #pragma once
4 
5 #include <cstdint>
6 #include <functional>
7 
8 #include "diarkis/common.h"
12 #include "diarkis/system/Event.h"
13 #include "diarkis/system/result.h"
14 
15 #define DIARKIS_TCP_DEFAULT_HEARTBEAT_INTERVAL 5000
16 
17 #if defined(__GNUC__) && !defined(__clang__)
18 #pragma GCC diagnostic push
19 #pragma GCC diagnostic ignored "-Wattributes"
20 #endif
21 
22 // ADD NAMESPACE NAME TAG
23 namespace Diarkis
24 {
25 namespace Network
26 {
27 enum class DIARKIS_EXPORT DiarkisTcpConnectionState : std::uint8_t;
28 
29 enum class DiarkisTcpConnectionState : std::uint8_t
30 {
31  NOT_CONNECTED = 0,
32  CONNECTING,
33  CONNECTED,
35  BROKEN
36 };
37 #if defined(__GNUC__) && !defined(__clang__)
38 #pragma GCC diagnostic pop
39 #endif
40 
41 DIARKIS_EXPORT std::ostream& operator<<(std::ostream&, DiarkisTcpConnectionState);
42 
50 {
51  public:
58  virtual ~IDiarkisTcp() {}
59 
66  virtual std::shared_ptr<IDiarkisEvent<const DiarkisTcpConnectionStateChangedEventArgs&>> GetConnectionStateChangedEvent() = 0;
67 
74  virtual std::shared_ptr<IDiarkisEvent<void*>> GetHeartbeatEvent() = 0;
75 
84  virtual Diarkis::System::Result SetHeartbeatInterval(size_t heartbeatInterval) = 0;
85 
94  virtual Diarkis::System::Result SetNoDelay(bool noDelay) = 0;
95 
102  virtual DiarkisTcpConnectionState GetState() const = 0;
103 
110  virtual Diarkis::StdString GetLocalAddress() = 0;
111 
124  virtual Diarkis::System::Result Connect(const Diarkis::StdString& unresolvedAddress,
125  uint16_t port,
126  int32_t perConnectionTimeoutMs) = 0;
127 
140  virtual Diarkis::System::Result ConnectDualMode(const Diarkis::StdString& unresolvedAddress,
141  uint16_t port,
142  int32_t perConnectionTimeoutMs) = 0;
143 
158  virtual Diarkis::System::Result Send(uint8_t version, uint16_t command, const uint8_t* payload, size_t payloadSize) = 0;
159 
166  virtual Diarkis::System::Result Send(uint8_t version, uint16_t command, const Diarkis::StdVector<uint8_t>& payload) = 0;
167 
182  virtual Diarkis::System::Result RSend(uint8_t version, uint16_t command, const uint8_t* payload, size_t payloadSize) = 0;
183 
190  virtual Diarkis::System::Result RSend(uint8_t version, uint16_t command, const Diarkis::StdVector<uint8_t>& payload) = 0;
191 
194 
206 
215  virtual Diarkis::System::Result Migrate() = 0;
216 
227  virtual Diarkis::System::Result Migrate(const Diarkis::StdString& serverType) = 0;
228 
229  virtual void SetRoomID(const Diarkis::StdString& id) = 0;
230  virtual const Diarkis::StdString& GetRoomID() = 0;
231 };
232 
239 DIARKIS_EXPORT IDiarkisTcp* DiarkisCreateTcp(size_t heartbeatInterval = 5000);
240 
241 } // namespace Network
242 } // namespace Diarkis
243  // ADD NAMESPACE } TAG
Diarkis::Network::IDiarkisTransport
Definition: transport.h:37
Diarkis::Network::IDiarkisTcp::SendHeartbeat
virtual Diarkis::System::Result SendHeartbeat()=0
Sends a heartbeat to the.
Diarkis::Network::IDiarkisTcp::GetRoomID
virtual const Diarkis::StdString & GetRoomID()=0
LoggerFactory.h
Diarkis::Network::IDiarkisTcp::Send
virtual Diarkis::System::Result Send(uint8_t version, uint16_t command, const uint8_t *payload, size_t payloadSize)=0
Send command to TCP server.
Diarkis::Network::DiarkisTcpConnectionState::DISCONNECTING
@ DISCONNECTING
Diarkis::Network::IDiarkisTcp::GetLocalAddress
virtual Diarkis::StdString GetLocalAddress()=0
Get local IP address.
Diarkis::StdString
Definition: common.h:432
NOT_CONNECTED
@ NOT_CONNECTED
Before connection.
Definition: protocol.h:48
Diarkis::Network::IDiarkisTcp::SetRoomID
virtual void SetRoomID(const Diarkis::StdString &id)=0
Diarkis::System::Result
Contains information about a specific result value. Can be compared against another Result structure....
Definition: result.h:37
Diarkis::StdVector< uint8_t >
Diarkis::Network::operator<<
DIARKIS_EXPORT std::ostream & operator<<(std::ostream &, DiarkisTcpConnectionState)
eventArgs.h
Diarkis::Network::DiarkisCreateTcp
DIARKIS_EXPORT IDiarkisTcp * DiarkisCreateTcp(size_t heartbeatInterval=5000)
Create IDiarkisTcp class.
Diarkis::Network::IDiarkisTcp::Connect
virtual Diarkis::System::Result Connect(const Diarkis::StdString &unresolvedAddress, uint16_t port, int32_t perConnectionTimeoutMs)=0
Connect to TCP server.
Diarkis::Network::DiarkisTcpConnectionState::CONNECTED
@ CONNECTED
Diarkis
Definition: commands.h:9
Diarkis::Network::IDiarkisTcp::RSend
virtual Diarkis::System::Result RSend(uint8_t version, uint16_t command, const uint8_t *payload, size_t payloadSize)=0
Send command to TCP server.
Diarkis::Network::IDiarkisTcp::SetNoDelay
virtual Diarkis::System::Result SetNoDelay(bool noDelay)=0
Sets the TCP_NODELAY option on the socket.
Diarkis::Network::DiarkisTcpConnectionState::CONNECTING
@ CONNECTING
Diarkis::Network::IDiarkisTcp::ConnectDualMode
virtual Diarkis::System::Result ConnectDualMode(const Diarkis::StdString &unresolvedAddress, uint16_t port, int32_t perConnectionTimeoutMs)=0
Attemps to connect to the server using socket dual mode (explicit support for IPv6).
result.h
Diarkis::Network::IDiarkisTransport::Connect
virtual Diarkis::System::Result Connect(const Diarkis::StdString &unresolvedAddress, uint16_t port, uint16_t timeOut=3000)=0
Connect with the server.
Event.h
Diarkis::Network::IDiarkisTcp::GetConnectionStateChangedEvent
virtual std::shared_ptr< IDiarkisEvent< const DiarkisTcpConnectionStateChangedEventArgs & > > GetConnectionStateChangedEvent()=0
Get the callback event called when connection state has changed.
Diarkis::Network::IDiarkisTcp
Interface class for TCP function.
Definition: tcp.h:49
common.h
Diarkis::Network::IDiarkisTcp::GetState
virtual DiarkisTcpConnectionState GetState() const =0
Get TCP connection status.
Diarkis::Network::DiarkisTcpConnectionState
DiarkisTcpConnectionState
Definition: tcp.h:29
transport.h
Diarkis::Network::IDiarkisTcp::GetHeartbeatEvent
virtual std::shared_ptr< IDiarkisEvent< void * > > GetHeartbeatEvent()=0
Get the callback event called when receiving heartbeat from server.
Diarkis::Network::DiarkisTcpConnectionState::BROKEN
@ BROKEN
Diarkis::Network::IDiarkisTcp::Migrate
virtual Diarkis::System::Result Migrate()=0
Attempts to change the current connection to a differernt server.
Diarkis::Network::IDiarkisTcp::~IDiarkisTcp
virtual ~IDiarkisTcp()
Destructor of IDiarkisTcp.
Definition: tcp.h:58
Diarkis::Network::IDiarkisTransport::ConnectDualMode
virtual Diarkis::System::Result ConnectDualMode(const Diarkis::StdString &unresolvedAddress, uint16_t port, uint16_t timeOut=3000)=0
Attemps to connect to the server using socket dual mode (explicit support for IPv6) turned on....
Diarkis::Network::IDiarkisTcp::SetHeartbeatInterval
virtual Diarkis::System::Result SetHeartbeatInterval(size_t heartbeatInterval)=0
Sets the interval for sending heartbeats.