⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 sessionhandler.java

📁 是一款国外的网络游戏平台的源码*不是类似浩方那种虚拟局域网技术
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
									}
									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 + -