14
14
package net.sf.goodgame.server.user;
16
16
import net.sf.goodgame.shared.UserInfoElement;
17
import net.sf.goodgame.server.*;
18
17
import java.nio.channels.SocketChannel;
19
18
import java.util.Collection;
20
19
import java.util.HashMap;
41
40
public int compareTo(Object o) {
42
41
return o.toString().compareTo(currentUsername);
44
private final static String GUEST_PREFIX = "guest";
45
private final static NumberPool guestNumbers = new NumberPool(Integer.MAX_VALUE);
46
43
private final static Map<String, User> users = new HashMap<String, User>();
47
44
public final SocketChannel socket;
48
private final String guestName;
49
private final int guestNum;
50
45
private String currentUsername;
51
46
private boolean initialized;
52
47
private UserType type;
62
57
assert DatabaseManager.getDatabase() != null;
63
58
assert IOManager.getIO() != null;
64
59
this.socket = socket;
65
guestNum = guestNumbers.nextNumber();
66
guestName = GUEST_PREFIX + guestNum;
67
currentUsername = guestName;
68
60
initialized = false;
69
type = UserType.guest;
70
62
myInfo = new Vector<UserInfoElement>();
71
63
friendsList = null;
73
instructionSemaphore = new Semaphore(1,true);
65
instructionSemaphore = new Semaphore(1, true);
76
68
public static User getUser(String username) {
105
97
return currentUsername;
108
public String getGuestName() {
112
100
public UserType getType() {
104
public boolean isLoggedIn() {
116
108
public void disconnect() {
117
109
DatabaseManager.getDatabase().logout(currentUsername);
118
guestNumbers.returnNumber(guestNum);
120
111
if (currentLobby != null) {
121
112
currentLobby.removeUser(this);
131
122
public void initialized() {
132
123
//Todo: Change this to something more friendly. x
133
124
users.put(currentUsername, this);
134
NetworkMessage userLogin = ServerToClientLogic.loginOk(this);
135
this.send(userLogin);
136
Lobby.addLobbyListener(this);
137
GameType.gameTypeList.addListener(this);
138
this.switchLobby(Lobby.getLobby((short) 0));
139
125
initialized = true;
149
135
synchronized (users) {
150
136
type = db.getType(name);
151
137
users.remove(currentUsername);
152
String previousName = currentUsername;
153
138
currentUsername = name;
154
139
myInfo = db.getUserInfo(currentUsername);
155
140
users.put(name, this);
156
currentLobby.modifyUser(this, previousName);
157
141
friendsList = db.getFriendsList(this);
158
142
friendsOf = db.getFriendsOfList(this.getUsername());
159
143
for (String friendOf : friendsOf) {
166
150
send(ServerToClientLogic.loginOk(this));
167
151
friendsList.initialize();
152
Lobby.addLobbyListener(this);
153
GameType.gameTypeList.addListener(this);
154
this.switchLobby(Lobby.getLobby((short) 0));
170
158
send(ServerToClientLogic.loginFailed());
181
169
user.friendLoggedOut(this);
183
171
DatabaseManager.getDatabase().logout(currentUsername);
184
173
users.remove(currentUsername);
185
String previousName = currentUsername;
186
currentUsername = guestName;
187
users.put(currentUsername, this);
188
type = UserType.guest;
189
//UserInfo myInfo = new UserInfo();
190
currentLobby.modifyUser(this, previousName);
174
Lobby.removeLobbyListener(this);
175
GameType.gameTypeList.removeListener(this);
191
179
send(ServerToClientLogic.logout(this));
180
currentUsername = null;
204
196
public void switchGameType(GameType gt) {
205
if(gt == currentGameType)
197
if (gt == currentGameType) {
207
200
this.send(ServerToClientLogic.switchGameType(gt));
208
201
currentLobby.changeUserGameType(this, gt);
209
202
currentGameType = gt;
235
228
currentGame = null;
231
public void leaveLobby() {
232
if(currentLobby != null) {
233
currentLobby.removeUser(this);
239
238
public void send(NetworkMessage message) {
240
239
if (socket.isConnected()) {
262
261
public String toString() {
263
262
return currentUsername;
266
265
public void addFriend(String username) {
267
if (getType() != UserType.guest && ! username.equalsIgnoreCase(getUsername())) {
266
if (username.equalsIgnoreCase(getUsername())) {
268
267
friendsList.addFriend(username);
269
268
DatabaseManager.getDatabase().addFriend(this, username);
273
272
public void removeFriend(String username) {
274
if (getType() != UserType.guest) {
275
friendsList.removeFriend(username);
276
DatabaseManager.getDatabase().removeFriend(this, username);
273
friendsList.removeFriend(username);
274
DatabaseManager.getDatabase().removeFriend(this, username);
280
277
public void friendLoggedIn(User friend) {
281
if (getType() != UserType.guest) {
282
friendsList.friendLoggedIn(friend);
278
friendsList.friendLoggedIn(friend);
286
281
public void friendLoggedOut(User friend) {
287
if (getType() != UserType.guest) {
288
friendsList.friendLoggedOut(friend);
282
friendsList.friendLoggedOut(friend);
292
285
public void addFriendOf(String user) {
293
if (getType() != UserType.guest) {
298
289
public void removeFriendOf(String user) {
299
if (getType() != UserType.guest) {
300
friendsOf.remove(user);
290
friendsOf.remove(user);