public class WebServer extends java.lang.Object implements IWebServer, IRunWebServer
Modifier and Type | Class and Description |
---|---|
(package private) class |
WebServer.GameThreadReaper
Check whether any game executed in an own process has been
finished.
|
private static class |
WebServer.NullWebServerGUI
A Null Object for the web server GUI interface.
|
Modifier and Type | Field and Description |
---|---|
private java.io.PrintWriter |
dumpInfoFile |
private java.util.ArrayList<GameInfo> |
endingGames |
private ChatChannel |
generalChat |
private IWebServerGUI |
gui |
private static java.util.logging.Logger |
LOGGER |
private static java.util.ArrayList<java.lang.String> |
loginMessage |
private IColossusMail |
mailObject |
private int |
maxClients |
private static int |
MIN_FREE_GAME_PORTS |
private WebServerOptions |
options |
private PortBookKeeper |
portBookKeeper |
private java.util.HashMap<java.lang.String,GameInfo> |
proposedGames |
private java.lang.String |
proposedGamesFilename |
private boolean |
proposedGamesListModified |
private boolean |
runGUI
Controls whether the GUI is shown or not.
|
private java.util.ArrayList<GameInfo> |
runningGames |
private static java.lang.String |
sep |
private int |
serverPort
Server port where we listen for WebClient connections
|
private java.net.ServerSocket |
serverSocket
Server actual socket where we listen for WebClient connections
|
private boolean |
shutdownRequested |
private UserDB |
userDB |
private ClientWatchDog |
watchDog |
private FormatWhen |
whenFormatter |
Cancel, ChangePassword, ChatSubmit, ConfirmCommand, ConfirmRegistration, DumpInfo, Echo, Enroll, generalChatName, LocallyGameOver, Login, Logout, PingResponse, Propose, RegisterUser, RequestUserAttention, RereadLoginMessage, ShutdownServer, Start, StartAtPlayer, StartedByPlayer, Unenroll, WebProtocolSeparator
Constructor and Description |
---|
WebServer(java.lang.String optionsFile) |
Modifier and Type | Method and Description |
---|---|
void |
allTellGameInfo(GameInfo gi) |
void |
allTellUserCounts() |
private void |
attemptStartOnServer(GameInfo gi,
User byUser) |
void |
cancelGame(java.lang.String gameId,
java.lang.String byUser) |
void |
cancelIfNecessary(User user) |
java.lang.String |
changeProperties(java.lang.String username,
java.lang.String oldPW,
java.lang.String newPW,
java.lang.String email,
java.lang.Boolean isAdminObj) |
void |
chatSubmit(java.lang.String chatId,
java.lang.String sender,
java.lang.String message) |
private void |
closeAllWebServerClientSocketThreads() |
java.lang.String |
confirmRegistration(java.lang.String username,
java.lang.String confirmationCode) |
private int |
countProposedGames(boolean shallBeScheduled) |
private void |
doReadGamesFromFile() |
private void |
doReadLoginMessage() |
private void |
doReadUsersFromFile() |
void |
dumpInfo()
Dump server state info into a static file, at the moment dump-info.txt
|
void |
dumpInfo(java.io.PrintWriter pw)
Dump info into given PrintWriter
|
void |
enrollUserToGame(java.lang.String gameId,
java.lang.String username) |
private GameInfo |
findByGameId(java.lang.String gameId) |
private GameInfo |
findFromRunningGames(java.lang.String gameId) |
User |
findUserByName(java.lang.String name) |
void |
gameFailed(GameInfo gi,
java.lang.String reason) |
void |
gameStarted(GameInfo gi) |
private IGameRunner |
getGameOnServer(GameInfo gi) |
ChatChannel |
getGeneralChat() |
private int |
getMaximumGameIdFromFiles()
Searches the game directory tree for highest game number for which
a game directory had been earlier created.
|
(package private) java.lang.String |
getPlayerName()
Each user server thread's name is set to it user's name.
|
PortBookKeeper |
getPortBookKeeper() |
IPortProvider |
getPortProvider() |
java.lang.String |
getStringOption(java.lang.String key) |
UserDB |
getUserDB() |
void |
handlePing(java.lang.String sender,
java.lang.String pingCommand) |
void |
handlePingQuotedName(java.lang.String sender,
java.lang.String pingCommand) |
void |
informAllEnrolledAbout(GameInfo gi,
java.lang.String message) |
void |
informAllEnrolledThatStartFailed(GameInfo gi,
java.lang.String reason,
User byUser) |
void |
informLocallyGameOver(java.lang.String gameId) |
private void |
informPingFailed(java.lang.String sender,
java.lang.String failMessage) |
void |
informStartedByPlayer(java.lang.String gameId) |
void |
initiateShutdown(java.lang.String byUserName) |
private GameInfo |
isInvolvedInInstantGame(java.lang.String initiatorName) |
void |
logout() |
static void |
main(java.lang.String[] args) |
void |
makeDummyConnection() |
GameInfo |
proposeGame(java.lang.String initiator,
java.lang.String variant,
java.lang.String viewmode,
long startAt,
int duration,
java.lang.String summary,
java.lang.String expire,
boolean unlimitedMulligans,
boolean balancedTowers,
int min,
int target,
int max) |
private void |
readGamesFromFile(java.lang.String filename,
java.util.HashMap<java.lang.String,GameInfo> proposedGames) |
private void |
readLoginMessageFromFile(java.lang.String filename) |
void |
reEnrollIfNecessary(WebServerClient newclient) |
java.lang.String |
registerUser(java.lang.String username,
java.lang.String password,
java.lang.String email) |
private void |
reject(java.net.Socket socket) |
void |
requestUserAttention(long when,
java.lang.String sender,
boolean isAdmin,
java.lang.String recipient,
java.lang.String message,
int beepCount,
long beepInterval,
boolean windows) |
void |
rereadLoginMessage()
Triggered by remode admin connection
|
(package private) void |
runSocketServer() |
void |
saveGamesIfNeeded() |
void |
sendMessageOfTheDayToOne(WebServerClient client,
java.lang.String chatId) |
void |
sendOldVersionWarningToOne(WebServerClient client,
java.lang.String userName,
java.lang.String chatId) |
void |
shutdownServer() |
void |
startGame(java.lang.String gameId,
User byUser) |
void |
startGameOnPlayerHost(java.lang.String gameId,
java.lang.String hostingPlayer,
java.lang.String playerHost,
int port)
A game was started by a WebClient user locally on his computer
and is ready to accept the other players as remote client;
so we notify them and tell them host and port to where to connect.
|
private java.lang.String |
startOneGame(GameInfo gi) |
private void |
storeGamesToFile(java.lang.String filename) |
void |
systemMessageToAll(java.lang.String message) |
void |
tellAllGamesFromListToOne(WebServerClient client,
java.util.ArrayList<GameInfo> games) |
void |
tellAllProposedGamesToOne(WebServerClient client) |
void |
tellAllRunningGamesToOne(WebServerClient client) |
void |
tellEnrolledGameStartsNow(GameInfo gi,
java.lang.String host,
int port) |
void |
tellEnrolledGameStartsSoon(GameInfo gi) |
void |
tellLastChatMessagesToOne(WebServerClient client,
java.lang.String chatId) |
void |
unenrollUserFromGame(java.lang.String gameId,
java.lang.String username) |
void |
unregisterGame(GameInfo gi,
int port)
unregister a game from runningGames (or proposedGames),
and keep in endingGames until it's reaped
|
void |
unregisterGamePlayerPC(GameInfo gi)
unregister a game (run on player's PC) from runningGames,
keep in endingGames until it's reaped
|
void |
updateGUI() |
void |
updateLoggedinStatus(User u,
WebServerClient wsc) |
(package private) boolean |
updateOnline(GameInfo gi)
When a user logged in or out, this is called for every GameInfo to update
how many of the enrolled players are currently online.
|
void |
updateUserCounts() |
java.lang.String |
verifyLogin(java.lang.String username,
java.lang.String password) |
private boolean |
waitForUser() |
void |
writeBackUsers() |
private static final java.util.logging.Logger LOGGER
private WebServerOptions options
private PortBookKeeper portBookKeeper
private IWebServerGUI gui
private final IColossusMail mailObject
private static final int MIN_FREE_GAME_PORTS
private static final java.util.ArrayList<java.lang.String> loginMessage
private final boolean runGUI
private boolean shutdownRequested
private java.lang.String proposedGamesFilename
private boolean proposedGamesListModified
private final int maxClients
private UserDB userDB
private final java.util.HashMap<java.lang.String,GameInfo> proposedGames
private final java.util.ArrayList<GameInfo> runningGames
private final java.util.ArrayList<GameInfo> endingGames
private static final java.lang.String sep
private final int serverPort
private java.net.ServerSocket serverSocket
private final ChatChannel generalChat
private final ClientWatchDog watchDog
private final FormatWhen whenFormatter
private java.io.PrintWriter dumpInfoFile
public static void main(java.lang.String[] args)
private void doReadGamesFromFile()
private void doReadUsersFromFile()
private void doReadLoginMessage()
public void rereadLoginMessage()
rereadLoginMessage
in interface IWebServer
void runSocketServer()
public ChatChannel getGeneralChat()
public void writeBackUsers()
public void updateLoggedinStatus(User u, WebServerClient wsc)
public void initiateShutdown(java.lang.String byUserName)
public void shutdownServer()
shutdownServer
in interface IWebServer
public void makeDummyConnection()
private boolean waitForUser()
private void reject(java.net.Socket socket)
private void closeAllWebServerClientSocketThreads()
java.lang.String getPlayerName()
public UserDB getUserDB()
public User findUserByName(java.lang.String name)
public java.lang.String verifyLogin(java.lang.String username, java.lang.String password)
public PortBookKeeper getPortBookKeeper()
public IPortProvider getPortProvider()
getPortProvider
in interface IRunWebServer
public void updateGUI()
public void dumpInfo()
dumpInfo
in interface IWebServer
public void dumpInfo(java.io.PrintWriter pw)
pw
- PrintWriter for the file to print dump toprivate GameInfo isInvolvedInInstantGame(java.lang.String initiatorName)
public GameInfo proposeGame(java.lang.String initiator, java.lang.String variant, java.lang.String viewmode, long startAt, int duration, java.lang.String summary, java.lang.String expire, boolean unlimitedMulligans, boolean balancedTowers, int min, int target, int max)
proposeGame
in interface IWebServer
public void cancelIfNecessary(User user)
public void reEnrollIfNecessary(WebServerClient newclient)
public void tellAllGamesFromListToOne(WebServerClient client, java.util.ArrayList<GameInfo> games)
public void tellAllProposedGamesToOne(WebServerClient client)
public void tellAllRunningGamesToOne(WebServerClient client)
public void allTellGameInfo(GameInfo gi)
allTellGameInfo
in interface IRunWebServer
public void tellEnrolledGameStartsSoon(GameInfo gi)
tellEnrolledGameStartsSoon
in interface IRunWebServer
public void tellEnrolledGameStartsNow(GameInfo gi, java.lang.String host, int port)
tellEnrolledGameStartsNow
in interface IRunWebServer
public void gameStarted(GameInfo gi)
gameStarted
in interface IRunWebServer
public void gameFailed(GameInfo gi, java.lang.String reason)
gameFailed
in interface IRunWebServer
public void enrollUserToGame(java.lang.String gameId, java.lang.String username)
enrollUserToGame
in interface IWebServer
public void unenrollUserFromGame(java.lang.String gameId, java.lang.String username)
unenrollUserFromGame
in interface IWebServer
public void cancelGame(java.lang.String gameId, java.lang.String byUser)
cancelGame
in interface IWebServer
public void startGame(java.lang.String gameId, User byUser)
startGame
in interface IWebServer
public void startGameOnPlayerHost(java.lang.String gameId, java.lang.String hostingPlayer, java.lang.String playerHost, int port)
startGameOnPlayerHost
in interface IWebServer
public void informStartedByPlayer(java.lang.String gameId)
informStartedByPlayer
in interface IWebServer
public void informAllEnrolledAbout(GameInfo gi, java.lang.String message)
informAllEnrolledAbout
in interface IRunWebServer
public void systemMessageToAll(java.lang.String message)
public void informAllEnrolledThatStartFailed(GameInfo gi, java.lang.String reason, User byUser)
public void requestUserAttention(long when, java.lang.String sender, boolean isAdmin, java.lang.String recipient, java.lang.String message, int beepCount, long beepInterval, boolean windows)
requestUserAttention
in interface IWebServer
private void informPingFailed(java.lang.String sender, java.lang.String failMessage)
public void informLocallyGameOver(java.lang.String gameId)
informLocallyGameOver
in interface IWebServer
public void updateUserCounts()
public void allTellUserCounts()
public void chatSubmit(java.lang.String chatId, java.lang.String sender, java.lang.String message)
chatSubmit
in interface IWebServer
public void handlePingQuotedName(java.lang.String sender, java.lang.String pingCommand)
public void handlePing(java.lang.String sender, java.lang.String pingCommand)
public void tellLastChatMessagesToOne(WebServerClient client, java.lang.String chatId)
public void sendMessageOfTheDayToOne(WebServerClient client, java.lang.String chatId)
public void sendOldVersionWarningToOne(WebServerClient client, java.lang.String userName, java.lang.String chatId)
private void readLoginMessageFromFile(java.lang.String filename)
public void logout()
logout
in interface IWebServer
public java.lang.String registerUser(java.lang.String username, java.lang.String password, java.lang.String email)
public java.lang.String confirmRegistration(java.lang.String username, java.lang.String confirmationCode)
public java.lang.String changeProperties(java.lang.String username, java.lang.String oldPW, java.lang.String newPW, java.lang.String email, java.lang.Boolean isAdminObj)
changeProperties
in interface IWebServer
boolean updateOnline(GameInfo gi)
userDB
- TODOprivate int countProposedGames(boolean shallBeScheduled)
private GameInfo findByGameId(java.lang.String gameId)
private GameInfo findFromRunningGames(java.lang.String gameId)
private IGameRunner getGameOnServer(GameInfo gi)
private java.lang.String startOneGame(GameInfo gi)
public void unregisterGame(GameInfo gi, int port)
unregisterGame
in interface IRunWebServer
public void unregisterGamePlayerPC(GameInfo gi)
private void readGamesFromFile(java.lang.String filename, java.util.HashMap<java.lang.String,GameInfo> proposedGames)
public void saveGamesIfNeeded()
private void storeGamesToFile(java.lang.String filename)
public java.lang.String getStringOption(java.lang.String key)
private int getMaximumGameIdFromFiles()