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