aboutsummaryrefslogtreecommitdiff
path: root/zenserver/config.h
blob: a7a7815a88cbb04a755ffe39ff49a1f97d71fab0 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
// Copyright Epic Games, Inc. All Rights Reserved.

#pragma once

#include <zencore/zencore.h>
#include <filesystem>
#include <string>
#include <vector>

#ifndef ZEN_ENABLE_MESH
#	define ZEN_ENABLE_MESH 0
#endif

#ifndef ZEN_USE_NAMED_PIPES
#	define ZEN_USE_NAMED_PIPES 0
#endif

#ifndef ZEN_USE_EXEC
#	define ZEN_USE_EXEC 0
#endif

struct ZenUpstreamJupiterConfig
{
	std::string Name;
	std::string Url;
	std::string OAuthUrl;
	std::string OAuthClientId;
	std::string OAuthClientSecret;
	std::string OpenIdProvider;
	std::string AccessToken;
	std::string Namespace;
	std::string DdcNamespace;
	bool		UseLegacyDdc = false;
};

struct ZenUpstreamHordeConfig
{
	std::string Name;
	std::string Url;
	std::string OAuthUrl;
	std::string OAuthClientId;
	std::string OAuthClientSecret;
	std::string OpenIdProvider;
	std::string AccessToken;
	std::string Cluster;
	std::string Namespace;
};

struct ZenUpstreamZenConfig
{
	std::string				 Name;
	std::vector<std::string> Urls;
	std::vector<std::string> Dns;
};

enum class UpstreamCachePolicy : uint8_t
{
	Disabled  = 0,
	Read	  = 1 << 0,
	Write	  = 1 << 1,
	ReadWrite = Read | Write
};

struct ZenUpstreamCacheConfig
{
	ZenUpstreamJupiterConfig JupiterConfig;
	ZenUpstreamHordeConfig	 HordeConfig;
	ZenUpstreamZenConfig	 ZenConfig;
	int32_t					 UpstreamThreadCount		= 4;
	int32_t					 ConnectTimeoutMilliseconds = 5000;
	int32_t					 TimeoutMilliseconds		= 0;
	UpstreamCachePolicy		 CachePolicy				= UpstreamCachePolicy::ReadWrite;
};

struct ZenCacheEvictionPolicy
{
	uint64_t DiskSizeLimit		= ~uint64_t(0);
	uint64_t MemorySizeLimit	= 1024 * 1024 * 1024;
	int32_t	 MaxDurationSeconds = 24 * 60 * 60;
	bool	 Enabled			= true;
};

struct ZenCasEvictionPolicy
{
	uint64_t LargeStrategySizeLimit = ~uint64_t(0);
	uint64_t SmallStrategySizeLimit = ~uint64_t(0);
	uint64_t TinyStrategySizeLimit	= ~uint64_t(0);
	bool	 Enabled				= true;
};

struct ZenGcConfig
{
	ZenCasEvictionPolicy   Cas;
	ZenCacheEvictionPolicy Cache;
	int32_t				   IntervalSeconds	   = 0;
	bool				   CollectSmallObjects = true;
	bool				   Enabled			   = true;
};

struct ZenServerOptions
{
	ZenUpstreamCacheConfig UpstreamCacheConfig;
	ZenGcConfig			   GcConfig;
	std::filesystem::path  DataDir;						   // Root directory for state (used for testing)
	std::filesystem::path  ContentDir;					   // Root directory for serving frontend content (experimental)
	std::filesystem::path  AbsLogFile;					   // Absolute path to main log file
	std::filesystem::path  ConfigFile;					   // Path to Lua config file
	std::string			   ChildId;						   // Id assigned by parent process (used for lifetime management)
	std::string			   LogId;						   // Id for tagging log output
	std::string			   HttpServerClass;				   // Choice of HTTP server implementation
	std::string			   EncryptionKey;				   // 256 bit AES encryption key
	std::string			   EncryptionIV;				   // 128 bit AES initialization vector
	int					   BasePort				  = 1337;  // Service listen port (used for both UDP and TCP)
	int					   OwnerPid				  = 0;	   // Parent process id (zero for standalone)
	int					   WebSocketPort		  = 0;	   // Web socket port (Zero = disabled)
	int					   WebSocketThreads		  = 0;
	bool				   InstallService		  = false;	// Flag used to initiate service install (temporary)
	bool				   UninstallService		  = false;	// Flag used to initiate service uninstall (temporary)
	bool				   IsDebug				  = false;
	bool				   IsTest				  = false;
	bool				   IsDedicated			  = false;	// Indicates a dedicated/shared instance, with larger resource requirements
	bool				   StructuredCacheEnabled = true;
	bool				   ComputeServiceEnabled  = true;
	bool				   ShouldCrash			  = false;	// Option for testing crash handling
	bool				   IsFirstRun			  = false;
	bool				   NoSentry				  = false;
#if ZEN_WITH_TRACE
	std::string TraceHost;	// Host name or IP address to send trace data to
	std::string TraceFile;	// Path of a file to write a trace
#endif
#if ZEN_ENABLE_MESH
	bool MeshEnabled = false;  // Experimental p2p mesh discovery
#endif
};

void ParseCliOptions(int argc, char* argv[], ZenServerOptions& ServerOptions);