RunicVTT Open Source Virtual Tabletop for TTRPG using P2P
Loading...
Searching...
No Matches
IdentityManager.h
Go to the documentation of this file.
1// IdentityManager.h
2#pragma once
3#include <string>
4#include <unordered_map>
5#include <vector>
6#include <optional>
7
9{
10 std::string uniqueId; // stable, persisted
11 std::string username; // last known display name
12 std::string peerId; // last known transport id (ephemeral, can be empty)
13 std::vector<std::string> usernamesHistory; // last few names (optional UX)
14};
15
17{
18public:
19 // ---- my identity (persisted) ----
21 bool saveMyIdentityToFile() const;
22
23 // Set or update my identity (call on first run or rename)
24 void setMyIdentity(const std::string& uniqueId, const std::string& username);
25 const std::string& myUniqueId() const
26 {
27 return myUniqueId_;
28 }
29 const std::string& myUsername() const
30 {
31 return myUsername_;
32 }
33
34 // ---- address book (persisted) ----
36 bool saveAddressBookToFile() const;
37
38 // Bind a live peerId to a uniqueId + username (on DC open)
39 void bindPeer(const std::string& peerId,
40 const std::string& uniqueId,
41 const std::string& username);
42
43 // Lookups
44 std::string usernameForUnique(const std::string& uniqueId) const;
45 std::optional<std::string> uniqueForPeer(const std::string& peerId) const;
46 std::optional<std::string> peerForUnique(const std::string& uniqueId) const;
47 std::optional<std::string> usernameForPeer(const std::string& peerId) const;
48
49 // Update username for a known uniqueId (no uniqueness enforcement)
50 void setUsernameForUnique(const std::string& uniqueId, const std::string& username);
51
52 // Optional: expose book
53 const std::unordered_map<std::string, PeerIdentity>& all() const
54 {
55 return byUnique_;
56 }
57 // IdentityManager.h
58 void erasePeer(const std::string& peerId);
59
60private:
61 // persisted “me”
62 std::string myUniqueId_;
63 std::string myUsername_;
64
65 // address book keyed by uniqueId
66 std::unordered_map<std::string, PeerIdentity> byUnique_;
67
68 // session map: peerId -> uniqueId (only for connected peers)
69 std::unordered_map<std::string, std::string> peerToUnique_;
70
71 // file helpers
72 bool writeMeFile() const;
73 bool readMeFile();
74 bool writeBookFile() const;
75 bool readBookFile();
76
77 // paths
78 static const char* kMeFile();
79 static const char* kBookFile();
80};
void setMyIdentity(const std::string &uniqueId, const std::string &username)
const std::string & myUniqueId() const
bool saveMyIdentityToFile() const
bool saveAddressBookToFile() const
std::optional< std::string > peerForUnique(const std::string &uniqueId) const
void bindPeer(const std::string &peerId, const std::string &uniqueId, const std::string &username)
void setUsernameForUnique(const std::string &uniqueId, const std::string &username)
std::optional< std::string > uniqueForPeer(const std::string &peerId) const
void erasePeer(const std::string &peerId)
bool writeMeFile() const
std::string usernameForUnique(const std::string &uniqueId) const
static const char * kMeFile()
bool writeBookFile() const
std::string myUniqueId_
std::optional< std::string > usernameForPeer(const std::string &peerId) const
std::unordered_map< std::string, PeerIdentity > byUnique_
std::string myUsername_
static const char * kBookFile()
std::unordered_map< std::string, std::string > peerToUnique_
const std::unordered_map< std::string, PeerIdentity > & all() const
const std::string & myUsername() const
std::vector< std::string > usernamesHistory
std::string uniqueId
std::string username
std::string peerId