OOP Lab Task 6: Diferență între versiuni

De la WikiLabs
(Requirements)
(Requirements)
Linia 28: Linia 28:
 
#* Remember! All fields are private, all methods are public.
 
#* Remember! All fields are private, all methods are public.
 
# The client will be enclosed in a GUI frame, with two areas, one for typing the messages to be sent, and another area that displays in real time all messages. A message is sent the moment you press the ''Enter'' key. Also, when ''Enter'' is pressed the write area is emptied and your message is shown as the last message in the display area. All messages, sent and received, are displayed as formatted strings ''name'':''message''. Add to your package a class named <code style="color:green;">Client</code>, that will manage the GUI frame and the ClientPeer. You may reuse the '''Client''' class from the previous package, but it needs to be thorougly modified, so it's better to create it from scratch. This class will be designed in two steps. First, you design the GUI frame. Then you will add the functionality, coupling the GUI frame to the ClientPeer object.
 
# The client will be enclosed in a GUI frame, with two areas, one for typing the messages to be sent, and another area that displays in real time all messages. A message is sent the moment you press the ''Enter'' key. Also, when ''Enter'' is pressed the write area is emptied and your message is shown as the last message in the display area. All messages, sent and received, are displayed as formatted strings ''name'':''message''. Add to your package a class named <code style="color:green;">Client</code>, that will manage the GUI frame and the ClientPeer. You may reuse the '''Client''' class from the previous package, but it needs to be thorougly modified, so it's better to create it from scratch. This class will be designed in two steps. First, you design the GUI frame. Then you will add the functionality, coupling the GUI frame to the ClientPeer object.
# The '''Client''' class extends the '''JFrame''' class from the '''javax.swing''' package. It will be a GUI frame, to be open as a separate window on your screen. The GUI frame to design is the following:[[Fişier:lab6_client.png|thumb|Client GUI]]
+
# The '''Client''' class extends the '''JFrame''' class from the '''javax.swing''' package. It will be a GUI frame, to be open as a separate window on your screen. The GUI frame to design is the following:
 +
[[Fişier:lab6_client.png]][[Fişier:lab6_client1.png]]
 +
 
 
<syntaxhighlight lang="java">
 
<syntaxhighlight lang="java">
 
Object o = ois.readOject();
 
Object o = ois.readOject();

Versiunea de la data 12 ianuarie 2016 21:41

Required Tutorials

Requirements

  1. Create a new project, named oop_lab6.
  2. For this task you need the previously designed classes Message, ClientPeer and Server, from OOP Lab Task 5. Copy their source .java files inside this package (letting NetBeans to refactor them or manually changing their package statement to make these classes part of this package).
  3. Modify the class Server so that its main method, instead of instantiating and running a ServerPeer object, instantiates a Client object. The Client arguments are a string (the name of the client on the server side) and the Socket reference, returned by the accept method called for the ServerSocket object.
  4. The class ClientPeer, which was used in the previous laboratory only to send messages, will manage a bidirectional connection, to send AND receive messages through it.
    • Beside the ObjectOutputStream you need an input stream to read Message objects from. The following things need to be added to this class:
      • a reference to an ObjectInputStream object;
      • The ObjectInputStream is a filter stream that encloses the input stream of the socket. You get the reference to that input stream using the Socket's method getInputStream. The filter stream will automatically deserialize the received Message objects. The input and output streams instantiations are done inside the constructor.
      • a method, named readMessage, without arguments, that returns the formatted string of the received Message object. Inside this method you read a single object from the input stream, using the proper method of the ObjectInputStream object, downcast the read object to a Message type and call the proper method of the received object to get the formatted string. This method may throw various exceptions of type IOException when called, and also an exception of type ClassNotFoundException when the downcasting is not possible. These are checked exceptions; though you do not catch them they need to be declared by the method.
      • The close method needs now to close both streams, the input stream and the output stream.
    • Remember! All fields are private, all methods are public.
  5. The client will be enclosed in a GUI frame, with two areas, one for typing the messages to be sent, and another area that displays in real time all messages. A message is sent the moment you press the Enter key. Also, when Enter is pressed the write area is emptied and your message is shown as the last message in the display area. All messages, sent and received, are displayed as formatted strings name:message. Add to your package a class named Client, that will manage the GUI frame and the ClientPeer. You may reuse the Client class from the previous package, but it needs to be thorougly modified, so it's better to create it from scratch. This class will be designed in two steps. First, you design the GUI frame. Then you will add the functionality, coupling the GUI frame to the ClientPeer object.
  6. The Client class extends the JFrame class from the javax.swing package. It will be a GUI frame, to be open as a separate window on your screen. The GUI frame to design is the following:

Lab6 client.pngLab6 client1.png

Object o = ois.readOject();
if(o instanceof String){
    String s = (String)o;
    System.out.print(s);
}else{
    System.out.print("The object is not a String!");
}

Submitting

  • The assignment will be evaluated automatically by the Web-CAT platform.
  • You could access the Web-CAT platform using the username and the password with which you acces the electronica.curs.pub.ro intranet.
  • Select the OOP Lab Task 6 assignment.
  • Submit your work as a single .zip archive (give it whatever name you choose) containing only the Java source code files.
  • Attention Any deviation from these instructions may lead to the loss of the entire amount of points.