This is the update log for my first ever multiplayer game, which I worked on throughout 2018-2019. I started making this after taking a computer networking class in college. I don't have any visual representation of this game at the moment, but here is the update log for historical purposes.
Update Pack 1: Server Core
The first big thing needed to get this game started is a communicating server and client. This collection of updates will provide a foundation for sending messages to and from any client that wishes to connect and play the game, as well as any other miscellaneous functionality that will be necessary for a game server to function properly.
To-Do:
- Client disconnection protocol
- Make clients return to login state when disconnected from server
- Add appropriate login rejection responses
- Recycle old client IDs from those who have disconnected
- Add custom signatures to packets
- Reject packets from clients that do not attach their custom signature so that only legitimate clients may connect to the server
- Use signature to check if client is out-of-date
Done:
- Created server-side command kernelĀ [12/23/2018]
- Added ‘talk <id>’ command for server users
- Added ‘kick <id>’ command for server root
- Added CommandHandler to process server-side commands and enable easy building of future commands
- Created various helper classes for serverĀ [12/22/2018]
- ClientHandler to keep track of connections and handle client-related actions
- PacketHandler to process incoming packets
- Client Disconnection Protocol:
- Client-initiated disconnections [6/22/2018]
- Server-initiated disconnections [6/22/2018]
- Update server-side number of connected clients when disconnections occur [6/25/2018]
- Server-side commands [6/25/2018]
- Fixed an issue causing sockets to close for actively connected clients when other clients disconnect [6/10/2018]
- Implement data saving and loading on server [6/9/2018]
- Capacity for number of connected clients [6/9/2018]
- Communication between two connected clients [6/7/2018]
- Test multiple connected clients [6/7/2018]
- Send certain messages to certain clients [6/7/2018]
- Broadcast messages to all clients [6/7/2018]
- Add array of connected clients to server so that any client can be selected and messaged at any given time using a specified ID that the client is registered with upon connection to the server [6/7/2018]
- Add keyboard input to clients so that they can send custom messages to the server at any given point [5/29/2018]
- Create format for client-server packets and add packet extraction from streams of incoming data (including streams that contain multiple packets) [5/27/2018]
- Upgrade client-server program to be non-blocking using Java NIO and selectors to support multiple connected clients which can send data whenever they please and can do other things while waiting to receive data [5/25/2018]
- Create a simple client-server program using Java sockets to get an idea of how socket programming works in Java [5/23/2018]
Update Pack 2: Client GUI + Login Authentication
Now that I have a properly communicating server and client, the next step is to create the basis for the game itself. This set of updates will establish an interface for clients to interact with and play the game on, as well as a login system to verify username/password requests from clients. By the end of this set of updates, users will be able to open the client, type their username and password into the GUI, and click “enter” to submit a login request. Once the request completes, the client will enter a blank game state. This state will be established in the next set of code-related updates.
To-Do:
- Add restrictions to usernames and passwords
- Prevent text fields from being appended in certain states
- Make logout button return the client to login state
Done:
- Add support for server detecting when client has improperly disconnected [1-22-2019]
- detect the event of an improper disconnection
- send a “check alive” poll to all clients upon detection of this event
- client ID list and number of connected clients will update appropriately now
- Add polling support [1-21-2019]
- polls created with ‘message’ and ‘time’ arguments
- poll sends ‘message’ to all client IDs that are currently registered with the server
- poll expires after ‘time’ milliseconds have passed since it was created
- upon expiration, poll removes any client IDs that have not responded with the appropriate response to the ‘message’ that was sent out
- Add Game state [1-17-2019]
- added logout button
- loads in response to successful login request notification from server
- Add Login state [1-17-2019]
- added login buttons
- username and password text fields
- submit login request to server
- loading screen that displays while client waits for login request to complete
- Add login support to server [1-17-2019]
- store/read player character files
- format for login request packets
- verify login requests by checking (username,password) pairs
- create new player account for non-existing entries
- deny login for existing username entries with non-matching passwords
- accept login for existing entries with matching passwords and send character data to the client as a response
- Add GUI support for dynamic text fields [1-14-2019]
- support for appending data from key manager to text fields
- support for toggling text fields
- password text fields which display text as asterisks
- Reprogram client to multi-threaded structure [1-13-2019]
- client’s server connection handler runs in its own thread
- client’s GUI runs in its own thread
- Add support for client state [1-12-2019]
- render the current client state in the main rendering loop
- support for switching states
- activate a specific set of buttons upon loading of a state
- Add support for clickable buttons [1-12-2019]
- added ButtonHandler to manage all GUI buttons
- ButtonHandler takes input from mouse manager to determine if button has been clicked
- support for buttons to be deactivated and reactivated
- buttons become invisible when deactivated and do not respond to clicks
- Add graphics rendering support to GUI [1-12-2019]
- support for loading/displaying images from files
- Add mouse input support to GUI [1-8-2019]
- Add keyboard input support to GUI [1-6-2019]
- Added alphabet, space, numbers, enter, dash, equals to key manager
Update Pack 3: Documentation and Presentation
For this set of updates, I took a break from coding features and decided to spend some effort making my project presentable before continuing. I wanted to get this done at an early stage before I had too much content to work with.
To-Do:
- Upload distributive jar files to a remote hosting site and make the link publicly available
- Create presentation videos of current progress
- Upload presentation videos to YouTube
- Create project presentation section on website
- Todos from previous update packs
- Add restrictions to usernames and passwords
- Prevent text fields from being appended in certain states
- Make logout button return the client to login state
- Client disconnection protocol
- Make clients return to login state when disconnected from server
- Add appropriate login rejection responses
- Recycle old client IDs from those who have disconnected
- Add custom signatures to packets
- Reject packets from clients that do not attach their custom signature so that only legitimate clients may connect to the server
- Use signature to check if client is out-of-date
Done:
- Build jar files to distribute programs [1-22-2019]
- Upload client and server code to respective Git repositories [1-22-2019]
- Create a GitHub account and establish repositories for client and server [1-22-2019]
- Draw class interaction diagrams for client and server [1-22-2019]
- Document all classes and methods in client and server code
- client [1-21-2019]
- server [1-22-2019]