Это на стороне клиентаКак правильно подключить клиента к серверу с помощью websockets?
public class WidgetView extends Region {
private WebView webView;
private WebEngine webEngine;
private ClientService service = new ClientService();
public WidgetView() {
setPrefSize(1000, 600);
service.start();
webView = new WebView();
webView.setContextMenuEnabled(false);
webEngine = webView.getEngine();
webEngine.setOnAlert(event -> {
System.out.println(event.getData().toString());
sendToServer(event.getData().toString());
//do something...
});
URL url = getClass().getResource("/ru/parus/imctax/web/index.html");
webEngine.load(url.toExternalForm());
getChildren().add(webView);
}
private void sendToServer(String json) {
service.sendJson(json);
System.out.println("Данные были отправлены!");
}
class ClientService extends Service<Session> {
private Session session;
@Override
protected Task<Session> createTask() {
Task<Session> task = new Task<Session>() {
@Override
protected Session call() throws Exception {
ClientManager client = ClientManager.createClient();
ClientEndpointConfig endpointConfig = ClientEndpointConfig.Builder.create().build();
URI uri = new URI("imc://localhost:8080/imc");
session = client.connectToServer(new ClientEndpoint(), endpointConfig, uri);
return session;
}
};
return task;
}
void sendJson(String json) {
//---------
if (session == null) {
System.out.println("Session is null ((");
//This message printed on console
}//---------
if (session != null) {
try {
System.out.println("Объект отправлен");
session.getBasicRemote().sendText(json);
} catch (IOException e) {
e.printStackTrace();
}
}
}
void closeSession() {
if (session != null) {
try {
session.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
}
ClientEndpoint
public class ClientEndpoint extends Endpoint {
public ClientEndpoint() {
}
@Override
public void onOpen(Session session, EndpointConfig endpointConfig) {
session.addMessageHandler(new MessageHandler.Whole<String>() {
@Override
public void onMessage(String s) {
System.out.println("Called method 'onMessage'. Parameter: "+s);
}
});
}
}
стороне сервера
public class ServerMain {
public static void main(String[] args) {
Server server = new Server("localhost", 8080, "/imc", PurchaseServerEndpoint.class);
try {
server.start();
} catch (DeploymentException e) {
e.printStackTrace();
server.stop();
}
}
}
//Another class in Server side
@ServerEndpoint("/imc")
public class PurchaseServerEndpoint {
@OnOpen
public void open(Session session) {
System.out.println("Session ["+session+"] is open!");
}
@OnClose
public void close(Session session) {
System.out.println("Session ["+session+"] is closed!");
}
@OnMessage
public void receiveJson(String message, Session session) {
System.out.println("I'm receive json: " + message);
}
}
Я начинаю ServerApplication, то я буду запускать ClientApp (FxApp с WebView). Данные не передаются, поскольку сеанс имеет значение null. Возможно, данная строка неправильная?
session = client.connectToServer(new ClientEndpoint(), endpointConfig, uri);
Как это сделать?
Спасибо, но это не сработает. – Dmitry