Wicket8 + Tomcat9 + Websocket native broadcast - Oboe吹きプログラマの黙示録
を書いた時に思った。
メッセージを送る契機のメソッドで、指定する IWebSocketPushMessage にセットするメッセージオブジェクトを
ラムダで書きたくなった。
WebSocketPushBroadcasterExtra broadcaster
= new WebSocketPushBroadcasterExtra(WebSocketSettings.Holder.get(getApplication()).getConnectionRegistry());
broadcaster.broadcastAll(getApplication(), ()->”メッセージ”);
WebSocketPushBroadcasterExtra は、WebSocketPushBroadcasterを継承してラムダで表現できるようにした
IWebSocketPushMessage 拡張で、broadcastAll またはbroadcastを実行するようにしたもの。
そこまでしなくてもとは思ったけど。。。
import org.apache.wicket.protocol.ws.api.message.IWebSocketPushMessage; /** * WebsocketMessage */ @FunctionalInterface public interface WebsocketMessage<T> extends IWebSocketPushMessage{ public T get(); public static <T> WebsocketMessage of(T t){ return new WebsocketMessage<>(){ @Override public T get(){ return t; } }; } }
WebSocketPushBroadcaster を継承します。
import org.apache.wicket.Application; import org.apache.wicket.protocol.ws.api.WebSocketPushBroadcaster; import org.apache.wicket.protocol.ws.api.message.ConnectedMessage; import org.apache.wicket.protocol.ws.api.registry.IWebSocketConnectionRegistry; /** * WebSocketPushBroadcasterExtra.java */ public class WebSocketPushBroadcasterExtra extends WebSocketPushBroadcaster{ public WebSocketPushBroadcasterExtra(IWebSocketConnectionRegistry registry){ super(registry); } public void broadcastAll(Application application, WebsocketMessage message){ super.broadcastAll(application, message); } public void broadcast(ConnectedMessage connection, WebsocketMessage message){ super.broadcast(connection, message); } }
IWebSocketPushMessage は、元々 Serializable です。