Files
2026-08-08 19:30:03 -07:00

48 lines
1.7 KiB
C++

#pragma once
#include "file.h"
class idFile_Metrics : public idFile {
public:
explicit idFile_Metrics(const char* streamName);
~idFile_Metrics() override;
const char* GetName() const override { return name.c_str(); }
const char* GetFullPath() const override;
unsigned int Read(void* buffer, unsigned int len) override;
unsigned int Write(const void* buffer, unsigned int len) override;
std::int64_t Length() const override { return bytesSent; }
std::int64_t Tell() const override { return bytesSent; }
int Seek(std::int64_t offset, fsOrigin_t origin) override;
void Flush() override;
void ForceFlush() override;
static idFile_Metrics* OpenMetricsStream(const char* streamName);
static void CloseMetricsStream(const char* streamName);
// PC recovery controls. The original values came from metrics_* CVars.
static void ConfigureServer(const char* host, unsigned short port,
int initialRetryMilliseconds = 1000,
int maximumRetryMilliseconds = 60000);
static void ShutdownTransport();
private:
static int WriteInternal(const char* streamName, const void* buffer, int len);
static void WriteToQueue(const void* buffer, int len);
static void BufferedWriteInternal(bool& queueTraffic,
const void* buffer, int len);
static void FlushBufferedWrites(bool& queueTraffic);
static bool EnsureConnection();
static void WriteFrame(bool& queueTraffic, const char* streamName,
const void* buffer, int len);
idStr name;
mutable idStr fullpath;
int bytesSent;
};
#if INTPTR_MAX == INT32_MAX
static_assert(sizeof(idFile_Metrics) == 76,
"Recovered idFile_Metrics ABI changed");
#endif