mirror of
https://github.com/luanti-org/luanti.git
synced 2025-07-02 16:38:41 +00:00
73 lines
1.4 KiB
C++
73 lines
1.4 KiB
C++
// Minetest
|
|
// SPDX-License-Identifier: LGPL-2.1-or-later
|
|
|
|
#pragma once
|
|
|
|
#include "irrlichttypes.h"
|
|
#include "socket.h"
|
|
#include "networkprotocol.h" // session_t
|
|
|
|
class NetworkPacket;
|
|
class PeerHandler;
|
|
|
|
namespace con
|
|
{
|
|
|
|
enum rtt_stat_type {
|
|
MIN_RTT,
|
|
MAX_RTT,
|
|
AVG_RTT,
|
|
MIN_JITTER,
|
|
MAX_JITTER,
|
|
AVG_JITTER
|
|
};
|
|
|
|
enum rate_stat_type {
|
|
CUR_DL_RATE,
|
|
AVG_DL_RATE,
|
|
CUR_INC_RATE,
|
|
AVG_INC_RATE,
|
|
CUR_LOSS_RATE,
|
|
AVG_LOSS_RATE,
|
|
};
|
|
|
|
class IPeer {
|
|
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
|
|
{
|
|
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;
|
|
};
|
|
|
|
// MTP = Minetest Protocol
|
|
IConnection *createMTP(float timeout, bool ipv6, PeerHandler *handler);
|
|
|
|
} // namespace
|