Weiterleiten von empfangenen Nachrichten eines StompSessionHandlers

Marah

Mitglied
Hallo,

ich bin dabei meine erste noch recht simple Netzwerkapp zu schreiben und hänge seit 2 Tagen an einem Problem, welches ich weder durch Suchmaschinen, Code-Beispiele noch die java-forum.org Suchfunktion lösen konnte. Aus dem Grund habe ich entschieden mich hier anzumelden und hoffe jemand kann mir bei meinem Problem helfen.

Zum Problem:
Ich möchte einen Client schreiben der Nachrichten von einem Server empfängt. Der Server kommuniziert mittels STOMP über WebSockets. Mein Client kann die Nachrichten auch empfangen allerdings weiß ich nicht wie ich die Nachrichten danach an meine Main-Methode übergebe.

Ich habe 3 Klassen und zwar ServerConnection welche die Verbindung aufbaut, MySessionHandler welche die Nachrichten empfängt und eine Message-Klasse, welche die Nachrichten speichert.

ServerConnection:

Java:
public class ServerConnection{

private StompSession session;
private WebSocketStompClient stompClient;
private StompSessionHandler sessionHandler;

private String host;
private String user;
private String pass;

    public ServerConnection(String host, String user, String pass){
        this.host = host;
        this.user = user;
        this.pass = pass;

        connect();
    }

    private void connect(){
        StompHeaders connectHeaders = new StompHeaders();
        connectHeaders.add("login", user);
        connectHeaders.add("passcode", pass);

        List<Transport> transports = new ArrayList<>(1);
        transports.add(
                new WebSocketTransport(
                        new StandardWebSocketClient()));
        SockJsClient sockJsClient = new SockJsClient(transports);
        stompClient = new WebSocketStompClient(sockJsClient);
        stompClient.setMessageConverter(new MappingJackson2MessageConverter());
        sessionHandler = new MyStompSessionHandler();

        session = stompClient.connect(host, (WebSocketHttpHeaders) null,
        connectionHeader(), sessionHandler).get();
    }
}

MySessionHandler
Java:
public class MyStompSessionHandler extends StompSessionHandlerAdapter {

    @Override
    public void afterConnected(StompSession session, StompHeaders connectedHeaders) {

        session.subscribe("/user/queue/messages", new StompFrameHandler(){
            @Override
            public Type getPayloadType(StompHeaders headers){
                return Message[].class;
            }

            @Override
            public void handleFrame(StompHeaders headers, Object payload){
                Message[] Messages = (Message[]) payload;

               [U] //hier bekomme ich die Nachrichten[/U]
            }
        });
    }
}

Message-Klasse
Java:
public class Message
{
    private int id;
    private String message;
    private Timestamp timestamp;
}

Und zu guter letzt meine Main:
Java:
public class Main(){

    public Main(){
        var con = new ServerConnection("myhost", "user", "pass");

        [U]//Hier möchte ich die Narichten auswerten.[/U]
    }
}

Der Code wurde von einem Spring-Stomp-Tutorial adaptiert. Außerdem habe ich die Ausnahmenbehandlung zwecks der besseren Übersicht weg gelassen.

Ich hoffe jemand kann mir ein Stück weiterhelfen. Ich bin echt am verzweifeln :)

Schönen Abend!
 

mrBrown

Super-Moderator
Mitarbeiter
Du bräuchtest einen Container für die Nachrichten, den sowohl deine Main als auch MySessionHandler kennen müssen (=>DependencyInjection).
Der SessionHandler legt sie dann rein, die Main kann sie rausnehmen.
 

Ähnliche Java Themen

Neue Themen


Oben