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);
}
}
}