1
0
Fork 0
mirror of https://github.com/luanti-org/luanti.git synced 2025-07-02 16:38:41 +00:00
luanti/src/network/connection.h

74 lines
1.4 KiB
C
Raw Normal View History

// Minetest
// SPDX-License-Identifier: LGPL-2.1-or-later
#pragma once
2010-11-27 01:02:21 +02:00
#include "irrlichttypes.h"
2010-11-27 01:02:21 +02:00
#include "socket.h"
#include "networkprotocol.h" // session_t
2010-11-27 01:02:21 +02:00
class NetworkPacket;
class PeerHandler;
2010-11-27 01:02:21 +02:00
namespace con
{
enum rtt_stat_type {
MIN_RTT,
MAX_RTT,
AVG_RTT,
MIN_JITTER,
MAX_JITTER,
AVG_JITTER
};
2024-03-07 15:10:52 +01:00
enum rate_stat_type {
CUR_DL_RATE,
AVG_DL_RATE,
CUR_INC_RATE,
AVG_INC_RATE,
CUR_LOSS_RATE,
AVG_LOSS_RATE,
2010-11-27 01:02:21 +02:00
};
class IPeer {
2010-11-27 01:02:21 +02:00
public:
// Unique id of the peer
const session_t id;
virtual const Address &getAddress() const = 0;
protected:
IPeer(session_t id) : id(id) {}
~IPeer() {}
};
class IConnection
2010-11-27 01:02:21 +02:00
{
public:
virtual ~IConnection() = default;
virtual void Serve(Address bind_addr) = 0;
virtual void Connect(Address address) = 0;
virtual bool Connected() = 0;
virtual void Disconnect() = 0;
virtual void DisconnectPeer(session_t peer_id) = 0;
virtual bool ReceiveTimeoutMs(NetworkPacket *pkt, u32 timeout_ms) = 0;
bool TryReceive(NetworkPacket *pkt) {
return ReceiveTimeoutMs(pkt, 0);
}
virtual void Send(session_t peer_id, u8 channelnum, NetworkPacket *pkt, bool reliable) = 0;
virtual session_t GetPeerID() const = 0;
virtual Address GetPeerAddress(session_t peer_id) = 0;
virtual float getPeerStat(session_t peer_id, rtt_stat_type type) = 0;
virtual float getLocalStat(rate_stat_type type) = 0;
2010-11-27 01:02:21 +02:00
};
// MTP = Minetest Protocol
IConnection *createMTP(float timeout, bool ipv6, PeerHandler *handler);
2010-11-27 01:02:21 +02:00
} // namespace