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 }