Я использую JMS (Java Messaging System) для тестирования стандартного приложения между клиентом и сервером.
Приложение разделено по слоям, в клиентском модуле у меня есть 3 разных файла, есть Main, который похож на само приложение, файл контроллера, который имеет ListView со списком сообщений и, наконец, третий файл, который в основном отвечает за отправку и получение входящих сообщений.
Поскольку он разделен на слои, когда я запускаю приложение, Контроллер запускает экземпляр класса Messaging, чтобы он мог отправлять сообщения, которые написаны в интерфейсе, и, конечно, сохранять их в ListView, который у меня есть. со всей историей сообщений.
Вопрос заключается в следующем: когда я отправляю сообщение, оно передает его от контроллера к классу сообщений, чтобы оно могло быть отправлено на сервер, но когда я делаю обратный процесс, сообщение получает новый сообщение, я не могу найти способ передать его обратно контроллеру, так как именно контроллер инициировал экземпляр обмена сообщениями, а не наоборот.
КОНТРОЛЛЕР СМОТРИТ НА ЭТОМ СПОСОБЕ:
public class LoanClientController implements Initializable{
public ApplicationGateway applicationGateway = new ApplicationGateway(){};
public TextField tfSsn;
public TextField tfAmount;
public TextField tfTime;
public ListView<ListViewLine> lvLoanRequestReply;
@Override
public void initialize(URL location, ResourceBundle resources) {
tfSsn.setText("123456");
tfAmount.setText("80000");
tfTime.setText("30");
}
@FXML
public void btnSendLoanRequestClicked() throws Exception {
int ssn = Integer.parseInt(tfSsn.getText());
int amount = Integer.parseInt(tfAmount.getText());
int time = Integer.parseInt(tfTime.getText());
LoanRequest loanRequest = new LoanRequest(ssn,amount,time);
ListViewLine listViewLine = applicationGateway.sendMessage(loanRequest);
lvLoanRequestReply.getItems().add(listViewLine);
applicationGateway.setLvLoanRequestReply(lvLoanRequestReply);
lvLoanRequestReply.refresh();
}
}
НА ДРУГОЙ СТОРОНЕ, ШКАФ ПРИЛОЖЕНИЯ a.k.a. "СООБЩЕНИЕ КЛАСС" является следующим:
public class ApplicationGateway implements MessageListener {
public MessagingGateway messagingGateway = new MessagingGateway("Client-Broker", "Broker-Client");
public ApplicationGateway(){
try {
messagingGateway.getConsumer().setMessageListener(this);
} catch (JMSException e) {
e.printStackTrace();
}
}
@Override
public void onMessage(Message message) {
try {
Gson gson = new Gson();
LoanReply loanReply = gson.fromJson(((TextMessage) message).getText(), LoanReply.class);
} catch (JMSException e) {
e.printStackTrace();
}
}
}
По сути, я пытаюсь сделать следующее: когда новое сообщение приходит с помощью метода onMessage, отправьте значение в контроллер.