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 }