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

📄 sessionhandler.java

📁 是一款国外的网络游戏平台的源码*不是类似浩方那种虚拟局域网技术
💻 JAVA
📖 第 1 页 / 共 3 页
字号:
				}
				
				else if (session != null && session.equalsIgnoreCase(MetaData.GET_NUM_GAMEROOMS)){
					MetaData sendUsersHeader = new MetaData(MetaData.FROM_SERVER,MetaData.DASHBOARD,MetaData.GET_NUM_GAMEROOMS);
					MessageAdapter.sendData(null,clientInstance,sendUsersHeader,ServerCacheHandler.gameroomNameCache.size() + "");
				}
			}
			
			else if (context != null && context.equalsIgnoreCase(MetaData.CHATROOM + "")){
				if (session != null) {
					// Session can be a username or chatroom in this case
					if (ServerCacheHandler.userSocketCache.containsKey(session)){ 
						/* Chat to user */ 
						sendChatMessageToUser(MessageAdapter.getMetaDataFromString(dataIn)
								, session, message);
					}
					else if (ServerCacheHandler.chatroomNameCache.containsKey(session)){
						// Check Access rights 
						// Send to all chatroom clients with Message
						//MessageAdapter.sendToChatroom(MessageAdapter.getMetaDataFromString(dataIn),session,message);
						Chatroom chatroom = (Chatroom)ServerCacheHandler.chatroomNameCache.get(session);
						sendChatMessage(MessageAdapter.getMetaDataFromString(dataIn), chatroom, message);
					}
				}
			}
			else if (context != null && context.equalsIgnoreCase(MetaData.FRIENDSLIST + "")){
				String friendsListUser = currentUser.getUsername();
				if (session != null && session.equalsIgnoreCase(FriendsList.SEND_FRIENDSLIST)){
					FriendsListManager.getInstance().sendWholeFriendsList(friendsListUser);
				}
				//TODO: ADD and DELETE commands here
				
				else if (session != null && session.equalsIgnoreCase("ADD_FRIEND")){
					if (message != null)
						FriendsListManager.getInstance().addUsertoFriendsList(friendsListUser,message);
				}
				else if (session != null && session.equalsIgnoreCase("REMOVE_FRIEND")){
					if (message != null)
						FriendsListManager.getInstance().removeUserFromFriendsList(friendsListUser,message);
				}
			}
			else if (context != null && context.equalsIgnoreCase(MetaData.GAME + "")){
				if (session != null){
					if (session.equalsIgnoreCase(MetaData.SEND_LIST)){
						GameroomManager.getInstance().sendAllGamesToUser(clientInstance);
					}
					else if (session.equalsIgnoreCase(MetaData.JOIN_CHATROOM)){
						//if (ServerCacheHandler.userProxyPortState.get(recipient).equals(new Boolean(true))){
							if (ServerCacheHandler.gameroomNameCache.containsKey(message)){
								GameroomManager.getInstance().joinGameroom(recipient, message);
							}
						//}
//						else {
//							ErrorManager.sendErrorToClient(clientInstance, ErrorManager.GAMEROOM_DENIED);
//						}
					}
					else if (session.equalsIgnoreCase(MetaData.PART_CHATROOM)){
						if (ServerCacheHandler.gameroomNameCache.containsKey(message)){
							GameroomManager.getInstance().leaveGameroom(recipient, message);
						}
					}
					else if (session.equalsIgnoreCase(MetaData.IS_HOST)){
						if (ServerCacheHandler.userGameroomCache.containsKey(recipient)){
							if (ServerCacheHandler.userGameroomCache.get(recipient).equals(message)){
								GameRoom g = (GameRoom)ServerCacheHandler.gameroomNameCache.get(message);
								MetaData whoIsHost = new MetaData(message,MetaData.GAME, MetaData.IS_HOST);
								MessageAdapter.sendData(null,clientInstance, whoIsHost, g.getChatroomCreator());
							}
						}
					}
					else if (session.equalsIgnoreCase(MetaData.START_PROXY)){
						if (ServerCacheHandler.gameroomNameCache.containsKey(message)){
							if (ServerCacheHandler.userGameroomCache.containsKey(recipient)){
								if (((String)ServerCacheHandler.userGameroomCache.get(recipient)).equalsIgnoreCase(message)){
									String inetAddr = new String();
									GameRoom tempGM = (GameRoom)ServerCacheHandler.gameroomNameCache.get(message);
									if (tempGM.getBindIP() != null){
										inetAddr = tempGM.getBindIP();
									} else {
										Socket hostSocket = (Socket)ServerCacheHandler.userSocketCache.get(recipient);
										inetAddr = hostSocket.getInetAddress().getHostAddress();
									}
									MetaData startGameHeader = new MetaData(recipient,MetaData.GAME,MetaData.START_PROXY);
									GameroomManager.getInstance().sendDataToGameroom(message,startGameHeader,inetAddr);
								}
							}
						}
					}
					else if (session.equalsIgnoreCase(MetaData.HOST_READY)){
						if (ServerCacheHandler.gameroomNameCache.containsKey(message)){
							if (((String)ServerCacheHandler.userGameroomCache.get(recipient)).equalsIgnoreCase(message)){
								MetaData startGameHeader = new MetaData(recipient,MetaData.GAME,MetaData.HOST_READY);
								GameroomManager.getInstance().sendDataToGameroom(message,startGameHeader,message);
							}
						}
					}
					else if (session.equalsIgnoreCase(MetaData.STOP_PROXY)){
						if (ServerCacheHandler.gameroomNameCache.containsKey(message)){
							if (((String)ServerCacheHandler.userGameroomCache.get(recipient)).equalsIgnoreCase(message)){
								MetaData startGameHeader = new MetaData(recipient,MetaData.GAME,MetaData.STOP_PROXY);
								GameroomManager.getInstance().sendDataToGameroom(message,startGameHeader,message);
							}
						}
					}
					else if (session.equalsIgnoreCase(MetaData.PROXY_CONNECTED)){
						if (((String)ServerCacheHandler.userGameroomCache.get(recipient)) != null){
							String gameRoomName = (String)ServerCacheHandler.userGameroomCache.get(recipient);
							if (gameRoomName != null){
								MetaData startGameHeader = new MetaData(recipient,MetaData.GAME,MetaData.PROXY_CONNECTED);
								GameroomManager.getInstance().sendDataToGameroom(gameRoomName,startGameHeader,message);
							}
						}
					}
					else if (session.equalsIgnoreCase(MetaData.GAME_STARTED)){
						if (((String)ServerCacheHandler.userGameroomCache.get(recipient)) != null){
							String gameRoomName = (String)ServerCacheHandler.userGameroomCache.get(recipient);
							if (gameRoomName != null){
								MetaData startGameHeader = new MetaData(recipient,MetaData.GAME,MetaData.GAME_STARTED);
								GameroomManager.getInstance().sendDataToGameroom(gameRoomName,startGameHeader,message);
							}
						}
					}
					else if (session.equalsIgnoreCase(MetaData.GAME_STOPPED)){
						if (((String)ServerCacheHandler.userGameroomCache.get(recipient)) != null){
							String gameRoomName = (String)ServerCacheHandler.userGameroomCache.get(recipient);
							if (gameRoomName != null){
								MetaData startGameHeader = new MetaData(recipient,MetaData.GAME,MetaData.GAME_STOPPED);
								GameroomManager.getInstance().sendDataToGameroom(gameRoomName,startGameHeader,message);
							}
						}
					}
					else { // Assume its a chat message
						if (ServerCacheHandler.gameroomNameCache.containsKey(session)){
							MetaData chatHeader = new MetaData(recipient,Integer.valueOf(context).intValue(),session);							
							GameroomManager.getInstance().sendDataToGameroom(session,chatHeader,message);
						}
					}
				}
			}
		}
		
	}

	public void sendInitialChatroomUserList(Chatroom joinedRoom, User currentUser) throws IOException {
		MetaData sendListHeader = new MetaData(joinedRoom.getChatroomName(),MetaData.CHATROOM, MetaData.SEND_LIST);
		Vector usersInChatroom = new Vector(joinedRoom.getListOfUsers());
		
		if (usersInChatroom.isEmpty())
			return;
		
		for (int i = 0; i < usersInChatroom.size(); i++){
			String userOnList = usersInChatroom.elementAt(i).toString();
			MessageAdapter.sendData(null, clientInstance, sendListHeader, userOnList);
		}
	}
	
	private void announceUserJoin(Chatroom joinedRoom, User currentUser) throws IOException {
		MetaData announceListHeader = new MetaData(joinedRoom.getChatroomName(), MetaData.CHATROOM, MetaData.JOIN_CHATROOM);
		Vector usersInChatroom = new Vector(joinedRoom.getListOfUsers());
		
		if (usersInChatroom.isEmpty())
			return;
		
		for (int i = 0; i < usersInChatroom.size(); i++){
			String userOnList = usersInChatroom.elementAt(i).toString();
			Socket chatroomUserSocket = (Socket)ServerCacheHandler.userSocketCache.get(userOnList);
			if (chatroomUserSocket == null){
				ServerLogger.sendConsoleDebugMessage("Socket broken for user " 
						+ userOnList + ". Recommended action: kill the user", this.getClass());
				continue;
			}
			MessageAdapter.sendData(null, chatroomUserSocket, announceListHeader, currentUser.getUsername());
		}
	}
	
	private void announceUserPart(Chatroom joinedRoom, User currentUser) throws IOException {
		MetaData announceListHeader = new MetaData(joinedRoom.getChatroomName(), MetaData.CHATROOM, MetaData.PART_CHATROOM);
		Vector usersInChatroom = new Vector(joinedRoom.getListOfUsers());
		
		if (usersInChatroom.isEmpty())
			return;
		
		for (int i = 0; i < usersInChatroom.size(); i++){
			String userOnList = usersInChatroom.elementAt(i).toString();
			Socket chatroomUserSocket = (Socket)ServerCacheHandler.userSocketCache.get(userOnList);
			if (chatroomUserSocket == null){
				ServerLogger.sendConsoleDebugMessage("Socket broken for user " 
						+ userOnList + ". Recommended action: kill the user", this.getClass());
				continue;
			}
			MessageAdapter.sendData(null, chatroomUserSocket, announceListHeader, currentUser.getUsername());
		}
	}
	
	private void sendChatMessage(MetaData chatListHeader, Chatroom chatroom, String message) throws IOException {
		Vector usersInChatroom = new Vector(chatroom.getListOfUsers());
		
		if (usersInChatroom.isEmpty()){
			return;
		}
		
		for (int i = 0; i < usersInChatroom.size(); i++){
			String userOnList = usersInChatroom.elementAt(i).toString();
			Socket chatroomUserSocket = (Socket)ServerCacheHandler.userSocketCache.get(userOnList);
			if (chatroomUserSocket == null){
				ServerLogger.sendConsoleDebugMessage("Socket broken for user " 
						+ userOnList + ". Recommended action: kill the user", this.getClass());
				continue;
			}
			MessageAdapter.sendData(null, chatroomUserSocket, chatListHeader, message);
		}	
	}
	
	private void sendChatMessageToUser(MetaData IMHeader, String userName, String message) throws IOException{
		// Treat IM almost like a chatroom by using chatroom function
		// Make an empty blank chatroom and add the user
		String currentUser = (String)ServerCacheHandler.socketUserCache.get(clientInstance);
		
		Chatroom IMSession = new Chatroom(new User(currentUser),null);
		IMSession.addUserToChatroom(userName);
		//IMSession.addUserToChatroom(currentUser);
		
		sendChatMessage(IMHeader, IMSession, message);
	}
	
	private void welcomeUserToChatroom(String chatroom) throws IOException{
		MetaData welcomeHeader = new MetaData(chatroom, MetaData.CHATROOM, MetaData.GREET);
		MessageAdapter.sendData(null, clientInstance, welcomeHeader, chatroom);
	}
	
	private void sendUptimeRequest(String requestedUser) throws IOException{
		Long requestedUptime;
		MetaData uptimeResponse;
		Date d = new Date();
		if (requestedUser != null){
			uptimeResponse = new MetaData(requestedUser, MetaData.GENERIC, MetaData.UPTIME);
			if (requestedUser.equalsIgnoreCase(MetaData.SYSTEM_VAR)){
				requestedUptime = new Long(d.getTime() - ((Long)ServerCacheHandler.userUptimeCache.get(MetaData.SYSTEM_VAR)).longValue());
			}
			else {
				if (!DSChatServer.isUserOnline(requestedUser)){
					MessageAdapter.sendData(null, clientInstance, uptimeResponse, "OFFLINE");
					return;
				}
				requestedUptime = new Long(d.getTime() - ((Long)ServerCacheHandler.userUptimeCache.get(requestedUser)).longValue());				
			}
			MessageAdapter.sendData(null, clientInstance,uptimeResponse,requestedUptime.longValue() + "");
		}
	}
	
	private void sendChatroomListings () throws IOException {
		Enumeration chatroomList;
		chatroomList = ServerCacheHandler.chatroomNameCache.keys();
		
		while (chatroomList.hasMoreElements()){
			String chatroomString = new String();
			int chatroomUsersNumber;
			chatroomString = (String)chatroomList.nextElement();
			chatroomUsersNumber = ((Chatroom)ServerCacheHandler.chatroomNameCache.get(chatroomString)).getListOfUsers().size();
			
			MetaData chatListHeader = new MetaData(MetaData.FROM_SERVER, MetaData.GENERIC, MetaData.SEND_CHATROOM_LIST);
			MessageAdapter.sendData(null,clientInstance,chatListHeader, chatroomString + ":" + chatroomUsersNumber);
		}
	}
	
	private void checkUserLimit(String userName) throws SocketException{
		int offsetLimit = 5000;
		long offset;
		Long timeNow = new Long(0);
		Long lastTime = new Long(0);
		Date d = new Date();
		
		if (ServerCacheHandler.userLimitCache.containsKey(userName)){
			lastTime = (Long)ServerCacheHandler.userLimitCache.get(userName);
			timeNow = new Long(d.getTime());
			offset = timeNow.longValue() - lastTime.longValue();
			
			if (offset <= offsetLimit)
				throw new SocketException();
		}
		ServerCacheHandler.userLimitCache.put(userName,new Long(d.getTime()));
	}
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -