Java 如何让(类似聊天的)服务器接受;“类型”;来自客户端的对象?

Java 如何让(类似聊天的)服务器接受;“类型”;来自客户端的对象?,java,oop,design-patterns,refactoring,idioms,Java,Oop,Design Patterns,Refactoring,Idioms,如何调整WorkerRunnable以接受QueryType,并基于该对象将相应查询的对象发送到客户端?当前,从队列向客户机发送一个对象,然后,当客户机发回该对象时,数据库将相应地更新 实际上,它应该被称为元连接。它可能包含基本安全性的登录凭据、SQL查询、队列类型,或者,实际上,任何内容 现在只有一个队列,但我想添加其他队列和功能 QueryType: package net.bounceme.dur.jdbc; import java.io.Serializable; import jav

如何调整
WorkerRunnable
以接受
QueryType
,并基于该对象将相应查询的对象发送到客户端?当前,从队列向客户机发送一个对象,然后,当客户机发回该对象时,数据库将相应地更新

实际上,它应该被称为
元连接。它可能包含基本安全性的登录凭据、SQL查询、队列类型,或者,实际上,任何内容

现在只有一个队列,但我想添加其他队列和功能

QueryType

package net.bounceme.dur.jdbc;

import java.io.Serializable;
import java.util.logging.Logger;

public class QueryType implements Serializable {

    private static final Logger log = Logger.getLogger(QueryType.class.getName());
    private static final long serialVersionUID = 42L;
    private final Queues query = Queues.FOO;

    public QueryType() {
    }

    public Queues getQuery() {
        return query;
    }

}
WorkerRunnable

package net.bounceme.dur.server.streams;

import net.bounceme.dur.jdbc.Title;
import java.io.IOException;
import java.io.ObjectInputStream;
import java.io.ObjectOutputStream;
import java.net.Socket;
import java.util.NoSuchElementException;
import java.util.logging.Level;
import java.util.logging.Logger;
import net.bounceme.dur.jdbc.Queries;

public class WorkerRunnable implements Runnable {

    private static final Logger log = Logger.getLogger(WorkerRunnable.class.getName());
    protected Socket socket = null;
    private RecordsQueueWrapper recordsQueue = null;
    private final Queries queries = new Queries();

    public WorkerRunnable(Socket clientSocket, RecordsQueueWrapper recordsQueue) {
        this.socket = clientSocket;
        this.recordsQueue = recordsQueue;
    }

    @Override
    public void run() {
        Title serverTitle = null;
        Title clientTitle = null;
        boolean queueEmpty = false;
        try (ObjectOutputStream objectOutputStream = new ObjectOutputStream(socket.getOutputStream());
                ObjectInputStream objectInputStream = new ObjectInputStream(socket.getInputStream())) {
            do {
                try {
                    serverTitle = recordsQueue.pop();
                    log.info(serverTitle.toString());
                    objectOutputStream.writeObject(serverTitle);
                    log.fine(serverTitle.getClass().getCanonicalName());
                    clientTitle = (Title) objectInputStream.readObject();
                    queries.updateTitle(clientTitle);
                } catch (NoSuchElementException nse) {
                    queueEmpty = true;
                }
            } while (!queueEmpty);
        } catch (java.io.EOFException eofe) {
            log.log(Level.WARNING, "why is there no record from client?\n", eofe);
        } catch (IOException | ClassNotFoundException ex) {
            Logger.getLogger(WorkerRunnable.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}