I want to send two different objects on the same socket to my client application from my server application. From what I've read I am doing this the right way, but still I cannot send my second object to my client.
Here is my server code:
public class ServerThread implements Runnable {
String name = null;
Socket socket = null;
public ServerThread(Socket s, String name) {
this.name = name;
this.socket = s;
}
@Override
public void run() {
try {
ObjectOutputStream serverOutputStream = new ObjectOutputStream(socket.getOutputStream());
ObjectInputStream serverInputStream = new ObjectInputStream(socket.getInputStream());
RequestType request = (RequestType) serverInputStream.readObject();
switch (request) {
case LOGIN:
serverInputStream = new ObjectInputStream(socket.getInputStream());
RequestManager.manageLogin(serverOutputStream, serverInputStream);
serverOutputStream = new ObjectOutputStream(socket.getOutputStream());
RequestManager.managePopulateTable(serverOutputStream);
}
serverOutputStream.close();
serverInputStream.close();
} catch (Exception e) {
e.printStackTrace();
}
}
}
And this is my server request manager
public class RequestManager {
public static void manageLogin(ObjectOutputStream serverOutputStream, ObjectInputStream serverInputStream) {
ArrayList<ProductEntity> availableProducts = new ArrayList<>();
try {
UserEntity loggedUser = (UserEntity) serverInputStream.readObject();
if (DatabaseManager.userConnect(loggedUser.getUsername(), loggedUser.getPassword())) {
serverOutputStream.writeObject(loggedUser);
}
else
serverOutputStream.writeObject(null);
} catch (Exception e) {
e.printStackTrace();
}
}
public static void managePopulateTable(ObjectOutputStream serverOutputStream) {
ArrayList<ProductEntity> availableProducts = DatabaseManager.getProducts();
try {
serverOutputStream.writeObject(availableProducts);
} catch (IOException e) {
e.printStackTrace();
}
}
}
The problem occurs when I try to send "availableProducts" to client.