Class WebClientSocketThread

  • All Implemented Interfaces:
    java.lang.Runnable, IWebServer

    public class WebClientSocketThread
    extends java.lang.Thread
    implements IWebServer
    This implements the webserver/client communication at client side. It implements the server interface on client side; i.e. something server wanted to execute for a client, is read from the client socket input stream, parsed, and executed by the (WebClient)SocketThread. This also contains the methods which are called by the client (WebClient's GUI) and are sent over the socket to the server (note that those calls mostly happen in the EDT).
    Author:
    Clemens Katzer
    • Field Detail

      • LOGGER

        private static final java.util.logging.Logger LOGGER
      • gameHash

        private final java.util.HashMap<java.lang.String,​GameInfo> gameHash
      • hostname

        private java.lang.String hostname
      • port

        private final int port
      • username

        private java.lang.String username
      • password

        private java.lang.String password
      • force

        private boolean force
      • email

        private java.lang.String email
      • socket

        private java.net.Socket socket
      • in

        private java.io.BufferedReader in
      • out

        private java.io.PrintWriter out
      • stillNeedsRun

        private boolean stillNeedsRun
      • loggedIn

        private boolean loggedIn
      • counter

        private static int counter
      • closingForcefullyToCancel

        private boolean closingForcefullyToCancel
      • connectOngoingMutex

        private static final java.lang.Object connectOngoingMutex
      • charset

        private final java.nio.charset.Charset charset
    • Constructor Detail

      • WebClientSocketThread

        public WebClientSocketThread​(IWebClient wcGUI,
                                     java.lang.String hostname,
                                     int port,
                                     java.lang.String username,
                                     java.lang.String password,
                                     boolean force,
                                     java.lang.String email,
                                     java.lang.String confCode,
                                     java.util.HashMap<java.lang.String,​GameInfo> gameHash)
    • Method Detail

      • getOneLine

        public java.lang.String getOneLine()
                                    throws java.io.IOException
        Throws:
        java.io.IOException
      • cancelConnectAttempt

        public static void cancelConnectAttempt()
      • closeSocketForcefully

        private void closeSocketForcefully()
      • stillNeedsRun

        public boolean stillNeedsRun()
      • getUsername

        public java.lang.String getUsername()
      • run

        public void run()
        Specified by:
        run in interface java.lang.Runnable
        Overrides:
        run in class java.lang.Thread
      • restoreGameInfo

        private GameInfo restoreGameInfo​(java.lang.String[] tokens)
      • doCleanup

        private void doCleanup()
      • dispose

        public void dispose()
      • send

        private void send​(java.lang.String s)
      • changeProperties

        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)
        Specified by:
        changeProperties in interface IWebServer
      • handleAckNack

        private void handleAckNack​(java.lang.String command,
                                   java.lang.String[] tokens)
      • proposeGame

        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)
        Specified by:
        proposeGame in interface IWebServer
      • enrollUserToGame

        public void enrollUserToGame​(java.lang.String gameId,
                                     java.lang.String username)
        Specified by:
        enrollUserToGame in interface IWebServer
      • unenrollUserFromGame

        public void unenrollUserFromGame​(java.lang.String gameId,
                                         java.lang.String username)
        Specified by:
        unenrollUserFromGame in interface IWebServer
      • cancelGame

        public void cancelGame​(java.lang.String gameId,
                               java.lang.String byUser)
        Specified by:
        cancelGame in interface IWebServer
      • startGame

        public void startGame​(java.lang.String gameId,
                              User byUser)
        Specified by:
        startGame in interface IWebServer
      • startGameOnPlayerHost

        public void startGameOnPlayerHost​(java.lang.String gameId,
                                          java.lang.String hostingPlayer,
                                          java.lang.String playerHost,
                                          int port)
        Description copied from interface: IWebServer
        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.
        Specified by:
        startGameOnPlayerHost in interface IWebServer
      • chatSubmit

        public void chatSubmit​(java.lang.String chatId,
                               java.lang.String sender,
                               java.lang.String message)
        Specified by:
        chatSubmit in interface IWebServer
      • pingResponse

        public void pingResponse​(java.lang.String arg1,
                                 java.lang.String arg2,
                                 java.lang.String arg3)
      • watchGame

        public void watchGame​(java.lang.String gameId,
                              java.lang.String username)
        Specified by:
        watchGame in interface IWebServer
      • sleepFor

        public void sleepFor​(long millis)
      • confirmCommand

        public void confirmCommand​(java.lang.String cmd,
                                   java.lang.String arg1,
                                   java.lang.String arg2,
                                   java.lang.String arg3)
      • requestUserAttention

        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)
        Specified by:
        requestUserAttention in interface IWebServer
      • submitAnyText

        public void submitAnyText​(java.lang.String text)
      • writeLog

        private void writeLog​(java.lang.String s)