gameroommanager.java
来自「是一款国外的网络游戏平台的源码*不是类似浩方那种虚拟局域网技术」· Java 代码 · 共 220 行
JAVA
220 行
/*
* Created on Mar 12, 2006
*
* TODO To change the template for this generated file go to
* Window - Preferences - Java - Code Style - Code Templates
*/
package org.GTADS.usermanager;
import java.io.IOException;
import java.net.Socket;
import java.util.Vector;
import org.GTADS.messenger.MessageAdapter;
import org.GTADS.protocol.ErrorManager;
import org.GTADS.protocol.MetaData;
import org.GTADS.server.ServerCacheHandler;
/**
* @author Administrator
*
* GameroomManager will manage the additions and removals
* of gameroom objects on the server and make updates available
* to all users on the server
*/
public class GameroomManager {
public static GameroomManager instance;
public static int REMOVE_GAMEROOM = 0;
public static int ADD_GAMEROOM = 1;
public static GameroomManager getInstance(){
if (instance == null){
instance = new GameroomManager();
}
return instance;
}
public static void clearInstance(){
if (instance != null){
instance = null;
}
}
public void updateGameroomList(GameRoom newGameroom, int state){
MetaData updateListHeader = new MetaData(MetaData.FROM_SERVER, MetaData.GAME,
state + "");
String gameroomData = newGameroom.getChatroomName() + "," + newGameroom.getChatroomCreator() + "," +
newGameroom.getGameType() + "," + newGameroom.getNumPlayers() + "/" + newGameroom.getMaxPlayers();
MessageAdapter.sendToAll(updateListHeader,gameroomData);
}
public void refreshGameroomList(GameRoom newGameroom, int state, Socket userSocket){
try{
MetaData updateListHeader = new MetaData(MetaData.FROM_SERVER, MetaData.GAME,
state + "");
String gameroomData = newGameroom.getChatroomName() + "," + newGameroom.getChatroomCreator() + "," +
newGameroom.getGameType() + "," + newGameroom.getNumPlayers() + "/" + newGameroom.getMaxPlayers();
MessageAdapter.sendData(null,userSocket,updateListHeader,gameroomData);
} catch (IOException ioe){
}
}
public void joinGameroom(String userName, String gameRoom){
GameRoom g = (GameRoom)ServerCacheHandler.gameroomNameCache.get(gameRoom);
if (g.getMaxPlayers() != g.getNumPlayers()){
if (!g.getListOfUsers().contains(userName))
g.addUserToChatroom(userName);
ServerCacheHandler.userGameroomCache.put(userName,gameRoom);
try {
MetaData joinroomHeader = new MetaData(gameRoom,MetaData.GAME,MetaData.JOIN_CHATROOM);
sendDataToGameroom(gameRoom,joinroomHeader,userName);
} catch (IOException ioe){
}
sendUserGreeting(userName, gameRoom);
updateGameroomList(g,ADD_GAMEROOM);
}
else {
try {
ErrorManager.sendErrorToClient((Socket)ServerCacheHandler.userSocketCache.get(userName),ErrorManager.CHATROOM_FULL);
} catch (IOException ioe){
}
}
}
public void createGameroom(String userName, String settings){
String[] gameroomSettings = new String[3];
// [0] = Name
// [1] = Game type
// [2] = Max Players
// [3] = Binded IP
if (settings.split(",").length >= 3){
gameroomSettings = settings.split(",");
Integer maxPlayers = Integer.valueOf(gameroomSettings[2]);
// Check if gameroom exists
if (!ServerCacheHandler.gameroomNameCache.containsKey(gameroomSettings[0])){
if (ServerCacheHandler.userGameroomCache.containsKey(userName)){
leaveGameroom(userName,
(String)ServerCacheHandler.userGameroomCache.get(userName));
}
GameRoom newGameroom = new GameRoom(new User(userName), gameroomSettings[0],
gameroomSettings[1], maxPlayers.intValue());
if (gameroomSettings.length > 3){ // Extra parameter for binding IP
newGameroom.setBindIP(gameroomSettings[3]);
}
ServerCacheHandler.gameroomNameCache.put(gameroomSettings[0],newGameroom);
joinGameroom(userName, gameroomSettings[0]);
sendStatus(userName, gameroomSettings[0], gameroomSettings[1], true);
}
}
}
private void sendStatus(String userName, String gameroomName, String gameType, boolean isJoin){
Vector listofUserChatrooms = (Vector)ServerCacheHandler.userChatroomCache.get(userName);
String chatroom = new String();
for (int i = 0; i < listofUserChatrooms.size();i++){
chatroom = (String)listofUserChatrooms.get(i);
MetaData gameroomHeader = new MetaData(MetaData.FROM_SERVER, MetaData.CHATROOM, MetaData.NO_SESSION_NAME);
try {
MessageAdapter.sendToChatroom(gameroomHeader, chatroom, isJoin ?
userName + " has created a new " + gameType + " game: " + gameroomName : userName + " has destroyed their game");
} catch (IOException ioe){}
}
}
public void leaveGameroom(String userName, String gameRoom){
try {
GameRoom g = (GameRoom)ServerCacheHandler.gameroomNameCache.get(gameRoom);
if (g.getNumPlayers() > 0){
MetaData partGameroomHeader = new MetaData(gameRoom,MetaData.GAME,MetaData.PART_CHATROOM);
sendDataToGameroom(gameRoom,partGameroomHeader,userName);
g.removeUserFromChatroom(userName);
ServerCacheHandler.userGameroomCache.remove(userName);
MetaData partroomHeader = new MetaData(gameRoom, MetaData.GAME,MetaData.PART_CHATROOM);
this.sendDataToGameroom(gameRoom,partroomHeader,userName);
}
if (g.getNumPlayers() == 0 || g.getChatroomCreator().equals(userName)){
disposeGameroom(userName, g);
updateGameroomList(g,REMOVE_GAMEROOM);
sendStatus(userName, null,null, false);
}
else{
updateGameroomList(g,ADD_GAMEROOM);
}
} catch (IOException ioe){
return;
}
}
public void sendUserGreeting(String userName, String gameRoom){
try {
GameRoom g = (GameRoom)ServerCacheHandler.gameroomNameCache.get(gameRoom);
Socket userSock = (Socket)ServerCacheHandler.userSocketCache.get(userName);
MetaData greetingHeader = new MetaData(gameRoom,MetaData.GAME,MetaData.GREET);
MessageAdapter.sendData(null,userSock,greetingHeader,gameRoom);
if (g.getNumPlayers() > 0){
Vector gameroomList = g.getListOfUsers();
for (int i = 0; i < gameroomList.size();i++){
String currentUserInList = (String)gameroomList.get(i);
if (!currentUserInList.equals(userName)){
MetaData sendListHeader = new MetaData(gameRoom,MetaData.GAME,MetaData.SEND_LIST);
MessageAdapter.sendData(null,userSock,sendListHeader,currentUserInList);
}
}
}
MetaData sendJoinHeader = new MetaData(gameRoom,MetaData.GAME,MetaData.JOIN_CHATROOM);
sendDataToGameroom(gameRoom,sendJoinHeader,userName);
}
catch (IOException ioe){
return;
}
}
public void sendDataToGameroom(String gameRoom, MetaData header, String message) throws IOException{
GameRoom g = (GameRoom)ServerCacheHandler.gameroomNameCache.get(gameRoom);
if (g.getNumPlayers() > 0){
Vector currentUserInList = g.getListOfUsers();
for (int i = 0; i < currentUserInList.size(); i++){
Socket playerSocket = (Socket)ServerCacheHandler.userSocketCache.get(currentUserInList.get(i));
if (playerSocket == null || playerSocket.isClosed())
continue;
MessageAdapter.sendData(null,playerSocket,header,message);
}
}
return;
}
public void disposeGameroom(String userName, GameRoom g){
Vector players = g.getListOfUsers();
if (g.getNumPlayers() > 0){
for (int i = 0; i < players.size(); i++){
ServerCacheHandler.userGameroomCache.remove((String)players.get(i));
MetaData disposeHeader = new MetaData(userName, MetaData.GAME, MetaData.DISPOSE_GAMEROOM);
try {
MessageAdapter.sendData(null, (Socket)ServerCacheHandler.userSocketCache.get((String)players.get(i)),
disposeHeader,g.getChatroomName());
} catch (IOException ioe){
ioe.printStackTrace();
}
}
}
ServerCacheHandler.gameroomNameCache.remove(g.getChatroomName());
}
public void sendAllGames(){
Vector listOfActiveGames = new Vector(ServerCacheHandler.gameroomNameCache.values());
for (int i = 0; i < listOfActiveGames.size();i++){
this.updateGameroomList((GameRoom)listOfActiveGames.get(i),ADD_GAMEROOM);
}
}
public void sendAllGamesToUser(Socket userSock){
Vector listOfActiveGames = new Vector(ServerCacheHandler.gameroomNameCache.values());
for (int i = 0; i < listOfActiveGames.size();i++){
this.refreshGameroomList((GameRoom)listOfActiveGames.get(i),ADD_GAMEROOM,userSock);
}
}
}
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?