Diarkis C++Client Library API Document
udp.h
Go to the documentation of this file.
1 // © 2019-2024 Diarkis Inc. All rights reserved.
2 
3 #pragma once
4 
5 #include <functional>
6 #include <ostream>
7 
8 #include "diarkis/common.h"
14 #include "diarkis/system/Event.h"
15 #include "diarkis/system/Thread.h"
16 #include "diarkis/system/result.h"
17 
18 #if defined(__GNUC__) && !defined(__clang__)
19 #pragma GCC diagnostic push
20 #pragma GCC diagnostic ignored "-Wattributes"
21 #endif
22 
23 // ADD NAMESPACE NAME TAG
24 namespace Diarkis
25 {
26 namespace Network
27 {
28 enum class DIARKIS_EXPORT DiarkisUdpDisconnectionReason : std::uint8_t;
35 enum class DiarkisUdpDisconnectionReason : std::uint8_t
36 {
38  Expected = 0,
40  NoResponse = 1,
42  RetryTimeout = 2,
44  ForcedByServer = 3,
46  Forced = 4,
48  Timeout = 5,
51 };
52 #if defined(__GNUC__) && !defined(__clang__)
53 #pragma GCC diagnostic pop
54 #endif
55 
56 DIARKIS_EXPORT std::ostream& operator<<(std::ostream&, DiarkisUdpDisconnectionReason);
57 
64 class DIARKIS_EXPORT IDiarkisUdp : public IDiarkisTransport
65 {
66  public:
73  virtual ~IDiarkisUdp() {}
74 
91  virtual Diarkis::System::Result ConnectAsync(const char* unresolvedAddress, uint16_t port, uint16_t timeOut = 3000) = 0;
92 
99  virtual Diarkis::System::Result ConnectAsync(const Diarkis::StdString& unresolvedAddress, uint16_t port, uint16_t timeOut = 3000) = 0;
100 
119  virtual Diarkis::System::Result ConnectDualModeAsync(const Diarkis::StdString& unresolvedAddress, uint16_t port, uint16_t timeOut = 3000) = 0;
120 
129  virtual bool IsAsyncConnectRunning() const = 0;
130 
139  virtual System::Result GetAsyncConnectResult() const = 0;
140 
147  virtual std::shared_ptr<IDiarkisEvent<const DiarkisUdpEchoEventArgs&>> GetEchoEvent() = 0;
148 
155  virtual std::shared_ptr<IDiarkisEvent<const DiarkisUdpPingEventArgs&>> GetPingEvent() = 0;
156 
165  virtual std::shared_ptr<IDiarkisEvent<const DiarkisRawPayloadEventArgs&>> GetPacketReceivedEvent() = 0;
166 
167  virtual std::shared_ptr<IDiarkisEvent<const DiarkisP2PDisconnectEventArgs&>> GetP2PDisconnectEvent() = 0;
168 
175  virtual std::shared_ptr<IDiarkisEvent<const DiarkisCheckNATTypeEventArgs&>> GetCheckNATTypeEvent() = 0;
176 
183  virtual Diarkis::StdString& GetGlobalAddress() = 0;
184 
191  virtual Diarkis::StdVector<StdString>& GetLocalAddressLists() = 0;
192 
201  virtual Diarkis::System::Result SetEchoTimeout(uint32_t timeoutInMilliseconds) = 0;
202 
209  virtual Diarkis::System::Result SendTo(const Diarkis::StdVector<uint8_t>& msg, const Diarkis::Network::Types::SockAddrStorage& to) = 0;
210 
217  virtual Diarkis::System::Result RSendTo(const Diarkis::StdVector<uint8_t>& msg, const Diarkis::Network::Types::SockAddrStorage& to, bool bFixedOrder) = 0;
218 
233  virtual Diarkis::System::Result RSend(uint8_t version, uint16_t command, const uint8_t* payload, size_t payloadSize) = 0;
234 
241  virtual Diarkis::System::Result RSend(uint8_t version, uint16_t command, const Diarkis::StdVector<uint8_t>& payload) = 0;
242 
257  virtual Diarkis::System::Result Send(uint8_t version, uint16_t command, const uint8_t* payload, size_t payloadSize) = 0;
258 
265  virtual Diarkis::System::Result Send(uint8_t version, uint16_t command, const Diarkis::StdVector<uint8_t>& payload) = 0;
266 
275  virtual Diarkis::System::Result Echo() = 0;
276 
285  virtual Diarkis::System::Result Ping() = 0;
286 
295  virtual Diarkis::System::Result Migrate() = 0;
296 
307  virtual Diarkis::System::Result Migrate(const Diarkis::StdString& serverType) = 0;
308 
315  virtual DiarkisUdpDisconnectionReason GetDisconnectionReason() = 0;
316 
323  virtual Diarkis::System::Result GetSocketErrorReason() = 0;
324 
339  virtual void SetSendThreadParam(const Diarkis::System::DiarkisThreadScheduler& scheduler) = 0;
340 
355  virtual void SetRecvThreadParam(const Diarkis::System::DiarkisThreadScheduler& scheduler) = 0;
356 
363  virtual void ClearRecvSocket(void) = 0;
364 
371  virtual void ClearSendPendingBuffer(void) = 0;
372 
373  virtual System::Result SetEncryptionP2PKeys(const Diarkis::StdVector<uint8_t>& key,
374  const Diarkis::StdVector<uint8_t>& iv,
375  const Diarkis::StdVector<uint8_t>& mackey) = 0;
376  virtual void SetP2PBuffering(bool bSendBuffering) = 0;
377  virtual System::Result RegisterPeer(const Types::SockAddrStorage& sockAddr, const StdVector<StdString>& candidateList, const StdString& uid) = 0;
378  virtual System::Result UnregisterPeer(StdString peerAddr) = 0;
379  virtual std::shared_ptr<IDiarkisProfile> GetProfileInterface() = 0;
380  virtual void SetRoomID(const StdString& id) = 0;
381 
403  virtual void SetSendRetryInterval(uint32_t minMs, uint32_t maxMs) = 0;
404 
415  virtual void SetSendRetryInterval(uint32_t timeInMs) = 0;
416 
429  virtual void SetSendRetryMaxCount(uint32_t count) = 0;
430 
451  virtual void SetSendRetryIntervalP2P(uint32_t minMs, uint32_t maxMs) = 0;
452 
460  virtual void SetSendRetryIntervalP2P(uint32_t timeInMs) = 0;
461 
473  virtual void SetSendRetryMaxCountP2P(uint32_t count) = 0;
474 
493  virtual void SetEnableRecreateSocketOnError(bool enable) = 0;
494 
503  virtual void SetRecreateSocketRetryInterval(uint32_t timeInMs) = 0;
504 
513  virtual void SetRecreateSocketRetryMaxCount(uint32_t count) = 0;
514 
523  virtual System::Result SendCheckNATType() = 0;
524 };
525 
538 DIARKIS_EXPORT IDiarkisUdp* DiarkisCreateUdp(uint32_t sendInterval = 100, uint32_t echoInterval = 5000);
539 
540 } // namespace Network
541 } // namespace Diarkis
542 // ADD NAMESPACE } TAG
Diarkis::Network::IDiarkisTransport
Definition: transport.h:37
profile.h
LoggerFactory.h
Diarkis::Network::DiarkisUdpDisconnectionReason::Timeout
@ Timeout
Initial connection to UDP server timed out.
Diarkis::Network::DiarkisUdpDisconnectionReason::RetryTimeout
@ RetryTimeout
RUDP retransmission count reached limit.
Diarkis::Network::DiarkisUdpDisconnectionReason::ForcedByServer
@ ForcedByServer
Force termination from server.
Diarkis::Network::IDiarkisUdp
Interface class for UDP function.
Definition: udp.h:64
Diarkis::Network::DiarkisUdpDisconnectionReason::NormalDisconnect
@ NormalDisconnect
Disconnected by the application.
Diarkis::Network::DiarkisUdpDisconnectionReason
DiarkisUdpDisconnectionReason
Reason for disconnection from UDP server.
Definition: udp.h:35
Diarkis::StdString
Definition: common.h:432
Diarkis::System::Result
Contains information about a specific result value. Can be compared against another Result structure....
Definition: result.h:37
Diarkis::StdVector
Definition: common.h:406
Diarkis::Network::operator<<
DIARKIS_EXPORT std::ostream & operator<<(std::ostream &, DiarkisTcpConnectionState)
eventArgs.h
Diarkis::Network::IDiarkisUdp::~IDiarkisUdp
virtual ~IDiarkisUdp()
Destructor of IDiarkisUdp.
Definition: udp.h:73
Diarkis
Definition: commands.h:9
result.h
Diarkis::Network::DiarkisUdpDisconnectionReason::NoResponse
@ NoResponse
No echo response from server.
Thread.h
Event.h
Diarkis::Network::DiarkisUdpDisconnectionReason::Expected
@ Expected
Expected.
common.h
Diarkis::Network::DiarkisCreateUdp
DIARKIS_EXPORT IDiarkisUdp * DiarkisCreateUdp(uint32_t sendInterval=100, uint32_t echoInterval=5000)
Initialization of UDP class instance.
network.h
transport.h
Diarkis::Network::DiarkisUdpDisconnectionReason::Forced
@ Forced
e.g. Socket error
Diarkis::System::DiarkisThreadScheduler
Thread scheduler.
Definition: Thread.h:62