Arkar Aung
Arkar Aung

Reputation: 3584

setBroadcaster(Broadcaster) from the type SimpleWebSocket is not visible in Grizzly java

I use Grizzly to setup websocket server in java. My problem is that I can't set broadcaster to websocket to use optimized one by overriding WebSocketApplication. I followed the way the documentation describe. But I got that error.

The method setBroadcaster(Broadcaster) from the type SimpleWebSocket is not visible.

Here is my code

public class BroadcastApplication extends WebSocketApplication { 

    private final Broadcaster broadcaster;

    public BroadcastApplication(Broadcaster broadcaster) {
        this.broadcaster = broadcaster; 
    }

    @Override public WebSocket createSocket(ProtocolHandler handler, 
            HttpRequestPacket requestPacket, WebSocketListener... listeners) {
        final DefaultWebSocket ws = (DefaultWebSocket) super.createSocket(handler, requestPacket, listeners);
        ws.setBroadcaster(broadcaster); // Got error here
        return ws;
    }

    @Override public void onMessage(WebSocket socket, String data) {
        socket.broadcast(getWebSockets(), data);
    }
}

My grizzly-websockets version is 2.3.22. Any suggestion is welcome.

Upvotes: 0

Views: 74

Answers (1)

alexey
alexey

Reputation: 1979

Something like this should work:

public class BroadcastApplication extends WebSocketApplication { 

    private final Broadcaster broadcaster;

    public BroadcastApplication(Broadcaster broadcaster) {
        this.broadcaster = broadcaster; 
    }

    @Override
    public WebSocket createSocket(ProtocolHandler handler, 
            HttpRequestPacket requestPacket, WebSocketListener... listeners) {
        return new BroadcastWebSocket(broadcaster, handler, requestPacket, listeners);
    }

    @Override
    public void onMessage(WebSocket socket, String data) {
        socket.broadcast(getWebSockets(), data);
    }

    private static class BroadcastWebSocket extends DefaultWebSocket {

        public BroadcastWebSocket(Broadcaster broadcaster,
                ProtocolHandler protocolHandler,
                HttpRequestPacket request,
                WebSocketListener... listeners) {

            super(protocolHandler, request, listeners);
            this.broadcaster = broadcaster;
        }
    }
}

Upvotes: 1

Related Questions