📄 sessionhandler.java
字号:
}
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 + -