Conventions. Class names are generally "NameClass", where Name indicates what it is, and Class indicates the Class it derives from. BootApplet.java. Our index.html has a login form, which calls a script login.cgi which generates the appropriate html code and applet tags (including the username and password typed into the index.html login form). This file BootApplet.java is thus the first code loaded into the browser. It's job is to load ProgressBar, and then to load all the other classes, showing progress at each one. Finally BootApplet calls Login to try to establish a connection to the server, login, and then create the Club. (This BootApplet code is tricky, as there are differences with class loading between Netscape and IE.) ChatPanel.java. The main code to handle chat input and output, and the Chat menu. Club.java. This is really the "main()" code for the entire client application. It builds the entire user interface, and has a few global variables shared by all modules. Connection.java. Responsible for input and output to the server. There is one horrible bug somewhere in here which causes us to occassionally lose a move or chat! This is a classic two thread consumer/producer on one IO channel. FormLayout.java. A minor class which makes it easier to use GridBagLayout to layout GUI components. GameCanvas.java. This is responsible for drawing the game board. It is currently xiangqi specific, and needs to be broken into a portable module and a game specific module. GamePanel.java. Higher level than GameCanvas, the GamePanel manages state, and also the setup of the GUI including the GameCanvas and the VCR buttons. GameRule.java. A minor module which enforces the rules of xiangqi. We need to figure out a clean way to make this module replaceable for each game. ImageButton.java. This manages our buttons (which have tooltips) such as our VCR buttons. I also stuck a few generic image loading methods in here. Login.java. Make initial connection to the server. Called by BootApplet. PlayerPanel.java. Manages the little panel of buttons for each player shown above/below the board. For now this is player name, time left, and rating (for now fixed at 1200 for everyone-- see http://xiangqi.com/ratings.html for more info about plans). Note for small VGA screens, we display only the timer, and above chat vs above/below the GameCanvas, to give us more resolution for game pieces. ProgressBar.java. Used by BootApplet to show progress in loading the initial classes. RadioMenu.java. Minor class to manage exclusive choice menus, such as Options->Pieces-> menu which allow the user to choose pieces in Chinese, Graphic, etc. SliderCanvas.java. Minor class to display the slider ball at top of client, allowing you to dynamically reallocate horizontal real estate between GamePanel and ChatPanel. SponsorCanvas.java. Our ad server. Right now calls a CGI but I'm going to rewrite this to do its own logic so we can run on servers which do not have CGI setup (such as our us-game SPARC we are borrowing from our ISP). Stickup.java. Semi-minor utility class to produce little popup windows to ask for input or show info. This code is somewhat of a hack. Bugs for MSIE in reading input from a dialog, e.g,. for Member->Profile command. Tables.java. Semi-hack class to manage the Club menu commands to list the tables and allow someone to select which table they would like to join.