📄 sessionhandler.java
字号:
}
v.add(message);
ServerCacheHandler.userChatroomCache.put(currentUser.getUsername(), v);
// Send a list of users in the current chatroom.
Chatroom joinedRoom = (Chatroom)ServerCacheHandler.chatroomNameCache.get(message);
// Announce Users arrival and get list of users
announceUserJoin(joinedRoom, currentUser);
sendInitialChatroomUserList(joinedRoom, currentUser);
welcomeUserToChatroom(joinedRoom.getChatroomName());
}
}
else {
// Check Access Rights on Joining
// Add user to room vector
if (ServerConfig.getInstance().getMaxChatrooms() > 0){
int currentChatCount = ServerCacheHandler.chatroomNameCache.size();
if (currentChatCount >= ServerConfig.getInstance().getMaxChatrooms()){
ErrorManager.sendErrorToClient(clientInstance, ErrorManager.CHATROOM_MAX);
return;
}
}
ServerLogger.sendConsoleDebugMessage("User " + recipient + " is creating chatroom " + message,
this.getClass(), 5);
Chatroom thisChatroom = new Chatroom(currentUser, message);
ServerCacheHandler.chatroomNameCache.put(message, thisChatroom);
Vector v = new Vector();
if (ServerCacheHandler.userChatroomCache.containsKey(currentUser.getUsername())){
v = (Vector)ServerCacheHandler.userChatroomCache.get(currentUser.getUsername());
}
else {
v = new Vector();
}
v.add(message);
ServerCacheHandler.userChatroomCache.put(currentUser.getUsername(), v);
//ServerCacheHandler.userChatroomCache.put(currentUser.getUsername(), message);
welcomeUserToChatroom(thisChatroom.getChatroomName());
}
}
else {
MetaData errorChatroomHeader = new MetaData(MetaData.FROM_SERVER, MetaData.CHATROOM, MetaData.NO_SESSION_NAME);
MessageAdapter.sendData(null, clientInstance, errorChatroomHeader,message + ": Illegal chatroom name");
// SERVER,1,NONE
}
}
}
else if (session != null && session.equalsIgnoreCase(MetaData.PING_REPLY)){
UserPing b = (UserPing)ServerCacheHandler.userPingTimeCache.get(currentUser.getUsername());
if (b != null){
Date d = new Date();
b.setInterval(new Long(d.getTime()));
}
}
else if (session != null && session.equalsIgnoreCase(MetaData.GET_PING)){
if (message != null){
String pingTime = "-";
String pingString = "User ping time is ";
if (ServerCacheHandler.userSocketCache.containsKey(message)){
if (ServerCacheHandler.userPingTimeCache.containsKey(message)){
UserPing requestedPing = (UserPing)ServerCacheHandler.userPingTimeCache.get(message);
if (requestedPing.getPingTime() != null){
pingTime = requestedPing.getPingTime() + "";
}
}
MetaData pingTimeHeader = new MetaData(MetaData.FROM_SERVER,MetaData.CHATROOM, MetaData.NO_SESSION_NAME);
MessageAdapter.sendData(null,clientInstance,pingTimeHeader,pingString + pingTime + "ms");
}
}
}
else if (session != null && session.equalsIgnoreCase(MetaData.PART_CHATROOM)){
// Check if user is in a chatroom
if (ServerCacheHandler.userChatroomCache.get(currentUser.getUsername()) != null &&
!((Vector)ServerCacheHandler.userChatroomCache.get(currentUser.getUsername())).isEmpty()){
Vector v = (Vector)ServerCacheHandler.userChatroomCache.get(currentUser.getUsername());
for (int i = 0; i < v.size(); i++){
String currentChatName = (String)v.get(i);
Chatroom currentChat = (Chatroom)ServerCacheHandler.chatroomNameCache.get(currentChatName);
//ServerCacheHandler.userChatroomCache.remove(currentUser.getChatroom());
v.remove(i);
if (currentChat != null){
currentChat.removeUserFromChatroom(currentUser.getUsername());
MetaData partRoomHeader = new MetaData (currentChat.getChatroomName(),MetaData.CHATROOM, MetaData.PART_CHATROOM);
sendChatMessage(partRoomHeader, currentChat,currentUser.getUsername());
if (currentChat.getListOfUsers().isEmpty()){
ServerCacheHandler.chatroomNameCache.remove(currentChatName);
ServerLogger.sendConsoleDebugMessage("Chatroom " + currentChatName + " being destroyed (Chatroom Empty)"
,this.getClass(), 5);
}
}
}
}
}
else if (session != null && session.equalsIgnoreCase(MetaData.S_KICK)){
// TODO: Load in Admin values from accounts file
// For now we will use the admin account
if (currentUser.getUsername().equals(ServerConfig.getInstance().getAdminAccount())){
if (message != null && ServerCacheHandler.userSocketCache.containsKey(message)){
DSChatServer.getInstance().serverKick((Socket)ServerCacheHandler.userSocketCache.get(message));
MetaData informKickedUser = new MetaData(MetaData.FROM_SERVER, MetaData.CHATROOM, MetaData.NO_SESSION_NAME);
MessageAdapter.sendData(null, (Socket)ServerCacheHandler.userSocketCache.get(message), informKickedUser,
"You have been kicked by " + currentUser.getUsername());
ServerLogger.sendConsoleDebugMessage("User " + message + " kicked off server", this.getClass(), 5);
}
else {
//MetaData noUserFound = new MetaData(MetaData.FROM_SERVER, MetaData.CHATROOM, MetaData.NO_SESSION_NAME);
//MessageAdapter.sendData(null, clientInstance, noUserFound,"User Not Found");
ErrorManager.sendErrorToClient(clientInstance, ErrorManager.USER_NOT_FOUND);
}
}
else {
//MetaData accessDenied = new MetaData(MetaData.FROM_SERVER, MetaData.CHATROOM, MetaData.NO_SESSION_NAME);
//MessageAdapter.sendData(null, clientInstance, accessDenied,"Access Denied");
ErrorManager.sendErrorToClient(clientInstance, ErrorManager.ACCESS_DENIED);
}
}
else if (session != null && session.equalsIgnoreCase(MetaData.QUIT_CHATROOM)){
//DSChatServer.getInstance().killConnection(clientInstance, null);
clientInstance.close();
}
else if (session != null && session.equalsIgnoreCase(MetaData.UPTIME)){
if (message != null)
sendUptimeRequest(message);
}
else if (session != null && session.equalsIgnoreCase(MetaData.SEND_CHATROOM_LIST)){
// Disregard message attribute assume NULL
sendChatroomListings();
}
else if (session != null && session.equalsIgnoreCase(MetaData.REFRESH_MOTD)){
// Only do this if user is admin or error
if (currentUser.getUsername().equals(ServerConfig.getInstance().getAdminAccount())){
ServerConfig.getInstance().readinMotd();
MetaData readInOk = new MetaData(MetaData.FROM_SERVER, MetaData.CHATROOM, MetaData.NO_SESSION_NAME);
MessageAdapter.sendData(null, clientInstance, readInOk, "motd refresh: Ok");
}
else {
ErrorManager.sendErrorToClient(clientInstance,ErrorManager.ACCESS_DENIED);
}
}
else if (session != null && session.equalsIgnoreCase(MetaData.GET_MOTD)){
MetaData motdHeader = new MetaData(MetaData.FROM_SERVER, MetaData.CHATROOM, MetaData.NO_SESSION_NAME);
this.displayMotd(motdHeader,currentUser);
}
else if (session != null && session.equalsIgnoreCase(MetaData.SET_CONFIG)){
if (AuthenticationManager.isAdminAccount(currentUser.getUsername())){
if (message.equalsIgnoreCase(MetaData.SHOW_CONFIG)){
// Display Commands
ServerConfig.getInstance().displayConfigValues(clientInstance);
}
else {
String[] keyValues = ServerConfig.getInstance().getGenericValues(message);
if (keyValues != null){
ServerConfig.getInstance().setGenericValues(keyValues[0], keyValues[1],clientInstance);
}
}
}
else {
ErrorManager.sendErrorToClient(clientInstance,ErrorManager.ACCESS_DENIED);
}
}
else if (session != null && session.equalsIgnoreCase(MetaData.CREATE_GAMEROOM)){
if (ServerCacheHandler.userProxyPortState.get(currentUser.getUsername()).equals(new Boolean(true)))
GameroomManager.getInstance().createGameroom(currentUser.getUsername(), message);
else
ErrorManager.sendErrorToClient(clientInstance, ErrorManager.GAMEROOM_DENIED);
}
else if (session != null && session.equalsIgnoreCase(MetaData.BAN_IP)){
if (message != null){
String[] argString = message.split(",");
Long duration = new Long(0);
if (argString.length > 1){
try {
duration = Long.valueOf(argString[1]);
} catch (NumberFormatException nfe){
duration = new Long(0);
}
}
if (currentUser.getUsername().equals(ServerConfig.getInstance().getAdminAccount())){
BanManagement.getInstance().setBan(argString[0],true,new Long(duration.longValue() * 1000));
ServerLogger.sendConsoleDebugMessage("Banning IP Address: " + argString[0] +
(duration.longValue() == 0 ? " indefinitely" : " for duration of " + (duration.longValue()) +
" seconds"), this.getClass(), 5);
MetaData banOK = new MetaData(MetaData.FROM_SERVER, MetaData.CHATROOM, MetaData.NO_SESSION_NAME);
MessageAdapter.sendData(null, clientInstance, banOK, "IP Address " + argString[0] + " has been banned");
}
else {
ErrorManager.sendErrorToClient(clientInstance,ErrorManager.ACCESS_DENIED);
}
}
}
else if (session != null && session.equalsIgnoreCase(MetaData.UNBAN_IP)){
if (message != null){
String freedIP = message;
if (currentUser.getUsername().equals(ServerConfig.getInstance().getAdminAccount())){
BanManagement.getInstance().removeBan(message,true);
ServerLogger.sendConsoleDebugMessage("Unbanning IP Address: " + message, this.getClass(), 5);
MetaData unbanOK = new MetaData(MetaData.FROM_SERVER, MetaData.CHATROOM, MetaData.NO_SESSION_NAME);
MessageAdapter.sendData(null, clientInstance, unbanOK, "IP Address " + message + " has been unbanned");
}
else {
ErrorManager.sendErrorToClient(clientInstance,ErrorManager.ACCESS_DENIED);
}
}
}
else if (session != null && session.equalsIgnoreCase(MetaData.BAN_USER)){
if (message != null){
String[] argString = message.split(",");
Long duration = new Long(0);
if (argString.length > 1){
try {
duration = Long.valueOf(argString[1]);
} catch (NumberFormatException nfe){
duration = new Long(0);
}
}
if (currentUser.getUsername().equals(ServerConfig.getInstance().getAdminAccount())){
if (BanManagement.getInstance().setBan(argString[0],false,new Long(duration.longValue() * 1000))){
ServerLogger.sendConsoleDebugMessage("Banning username: " + argString[0] +
(duration.longValue() == 0 ? " indefinitely" : " for duration of " + (duration.longValue()) +
" seconds"), this.getClass(), 5);
MetaData banOK = new MetaData(MetaData.FROM_SERVER, MetaData.CHATROOM, MetaData.NO_SESSION_NAME);
MessageAdapter.sendData(null, clientInstance, banOK, "Username " + argString[0] + " has been banned");
}
else {
ErrorManager.sendErrorToClient(clientInstance, ErrorManager.USER_NOT_FOUND);
}
}
else {
ErrorManager.sendErrorToClient(clientInstance,ErrorManager.ACCESS_DENIED);
}
}
}
else if (session != null && session.equalsIgnoreCase(MetaData.UNBAN_USER)){
if (message != null){
String freedIP = message;
if (currentUser.getUsername().equals(ServerConfig.getInstance().getAdminAccount())){
if (BanManagement.getInstance().removeBan(message,false)){
ServerLogger.sendConsoleDebugMessage("Unbanning username: " + message, this.getClass(), 5);
MetaData unbanOK = new MetaData(MetaData.FROM_SERVER, MetaData.CHATROOM, MetaData.NO_SESSION_NAME);
MessageAdapter.sendData(null, clientInstance, unbanOK, "Username " + message + " has been unbanned");
}
else {
ErrorManager.sendErrorToClient(clientInstance, ErrorManager.USER_NOT_FOUND);
}
}
else{
ErrorManager.sendErrorToClient(clientInstance,ErrorManager.ACCESS_DENIED);
}
}
}
else if (session != null && session.equalsIgnoreCase(MetaData.PROXY_CHECK)){
Socket clientSock = (Socket)ServerCacheHandler.userSocketCache.get(recipient);
if (message != null && message.equalsIgnoreCase("NULL")){
MetaData requestProxyCheckHeader = new MetaData(MetaData.FROM_SERVER, MetaData.GENERIC, MetaData.PROXY_CHECK);
MessageAdapter.sendData(null,clientSock,requestProxyCheckHeader,"NULL");
}
// else if (message != null){
// if (clientSock != null){
// if (!checkProxyPortOpen(clientSock, message)){
// MetaData proxyFailed = new MetaData(MetaData.FROM_SERVER, MetaData.GENERIC, MetaData.PROXY_CHECK);
// MessageAdapter.sendData(null, clientSock,proxyFailed,MetaData.PROXY_FAIL);
// ServerCacheHandler.userProxyPortState.put(recipient,new Boolean(false));
// }
// else {
// MetaData proxyPassed = new MetaData(MetaData.FROM_SERVER, MetaData.GENERIC, MetaData.PROXY_CHECK);
// MessageAdapter.sendData(null, clientSock,proxyPassed,MetaData.PROXY_SUCCESS);
// ServerCacheHandler.userProxyPortState.put(recipient,new Boolean(true));
// }
// }
// }
}
}
else if (context != null && context.equalsIgnoreCase(MetaData.DASHBOARD + "")){
if (session != null && session.equalsIgnoreCase(MetaData.GET_NUM_USERS)){
MetaData sendUsersHeader = new MetaData(MetaData.FROM_SERVER,MetaData.DASHBOARD,MetaData.GET_NUM_USERS);
MessageAdapter.sendData(null,clientInstance,sendUsersHeader,ServerCacheHandler.userSocketCache.size()+"");
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -