Remember that the server can connect to multiple clients at the same time so design your client/server applications appropriately. For example, Structure your code appropriately to allow the server to hold multiple connections open. The client/server pair should send and receive objects of a class of your own design, which describes the robot movement. It should include the following properties: robot name, current position, velocity, direction, time of update, and any other properties that you deem necessary. The Robot Client Application In this application each robot application should run on the desktop device. The client should have the following features: You should pass the server address and the robot name (e.g., localhost) to the client as a command line argument when you execute it The client application should have a GUI that allows you to push buttons to go forward, backward, rotate left, rotate right, and to choose a speed. The client should send an update every 30 seconds, regardless of whether the robot is moved or not. The client should display the current connection status and the last time that a message was successfully sent to the server. Add a novel feature of your own design. Testing You should demonstrate that your architecture is working correctly by simultaneously connecting at least three robot clients to the server simultaneously. Show screen captures of your system in action under this condition to demonstrate that it is working correctly. Code Provided I have provided you with template code and it MUST BE USED AS THE BASIS OF YOUR SOLUTION. Do "not" use RMI or any other Java Messaging Protocols, only use the template code provided for network communication. This code is in the following files: ThreadedServer.java Threaded ConnectionHandler.java Date Time Service.java Client.java