10
10
11
11
#pragma once
12
12
13
+ #include " ASE.h"
13
14
#include " version.h"
14
15
15
16
struct SMasterServerDefinition
@@ -129,10 +130,15 @@ class CMasterServer : public CRefCountable
129
130
if (m_Stage < ANNOUNCE_STAGE_REMINDER)
130
131
{
131
132
m_Stage = ANNOUNCE_STAGE_REMINDER;
133
+
134
+ CArgMap argMap;
135
+ argMap.SetFromString (result.pData );
136
+
137
+ if (result.iErrorCode == 200 )
138
+ m_remoteAddress = argMap.Get (" remote_addr" );
139
+
132
140
if (!m_Definition.bHideSuccess )
133
141
{
134
- CArgMap argMap;
135
- argMap.SetFromString (result.pData );
136
142
SString strOkMessage = argMap.Get (" ok_message" );
137
143
138
144
// Log successful initial announcement
@@ -178,6 +184,9 @@ class CMasterServer : public CRefCountable
178
184
179
185
const SMasterServerDefinition& GetDefinition () const { return m_Definition; }
180
186
187
+ bool HasRemoteAddress () const noexcept { return !m_remoteAddress.empty (); }
188
+ const std::string& GetRemoteAddress () const noexcept { return m_remoteAddress; }
189
+
181
190
//
182
191
// Get http downloader used for master server comms etc.
183
192
//
@@ -192,6 +201,7 @@ class CMasterServer : public CRefCountable
192
201
long long m_llLastAnnounceTime;
193
202
long long m_llLastPushTime;
194
203
const SMasterServerDefinition m_Definition;
204
+ std::string m_remoteAddress;
195
205
};
196
206
197
207
// //////////////////////////////////////////////////////////////////
@@ -270,6 +280,21 @@ class CMasterServerAnnouncer
270
280
}
271
281
}
272
282
283
+ /*
284
+ * @brief Get remote address of the first master server that has it.
285
+ */
286
+ const std::string& GetRemoteAddress () const noexcept
287
+ {
288
+ for (CMasterServer* masterServer : m_MasterServerList)
289
+ {
290
+ if (masterServer->HasRemoteAddress ())
291
+ return masterServer->GetRemoteAddress ();
292
+ }
293
+
294
+ static std::string empty;
295
+ return empty;
296
+ }
297
+
273
298
protected:
274
299
std::vector<CMasterServer*> m_MasterServerList;
275
300
};
0 commit comments