Search code examples
javawebsocketgrizzlyjava-websocket

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.


Solution

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