48 lines
1.7 KiB
C++
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
|