1 module userstorage; 2 3 import derelict.enet.enet; 4 import connection; 5 6 struct User 7 { 8 string name; 9 ENetPeer* peer; 10 } 11 12 struct UserStorage 13 { 14 private User*[UserId] users; 15 16 UserId addUser(ENetPeer* peer) 17 { 18 UserId id = nextPeerId; 19 User* user = new User; 20 user.peer = peer; 21 users[id] = user; 22 return id; 23 } 24 25 void removeUser(UserId id) 26 { 27 users.remove(id); 28 } 29 30 User* findUser(UserId id) 31 { 32 return users.get(id, null); 33 } 34 35 UserId nextPeerId() @property 36 { 37 return _nextPeerId++; 38 } 39 40 string[UserId] userNames() 41 { 42 string[UserId] names; 43 foreach(id, user; users) 44 { 45 names[id] = user.name; 46 } 47 48 return names; 49 } 50 51 string userName(UserId id) 52 { 53 return users[id].name; 54 } 55 56 ENetPeer* userPeer(UserId id) 57 { 58 return users[id].peer; 59 } 60 61 auto byUser() 62 { 63 return users.byValue; 64 } 65 66 size_t length() 67 { 68 return users.length; 69 } 70 71 private UserId _nextPeerId = 1; 72 }