sotaでtyrusを使って継承を利用することなくWebsocketを使う

今とある用事でsotaの開発を行っていますがsotaを開発するためのVstone MagicというIDEにいろいろハマったのでメモ

Vstone Magic

Vstone Magicとはブロックを配置するだけでjavaプログラムを自動生成し、コンパイル、sotaにプログラムを転送できるIDEです。

細かいことをしようと思うと内部にjavaプログラムを埋め込むことができます。

ただ、javaのクラスに影響を与えるような自由記述は許されておらず、例えばクラスのattributeを指定したりスーパークラスを指定すると、プログラムは転送できるのですがvstone magicでブロックを移動させた瞬間に継承の記述が消えます。

Tyrus

tyrusとはjava用のWebsocketのライブラリですがGetting Startedを見ると利用するにはクラスにattributeを記述するか、Endpointクラスを継承しないと利用できなさそう

しかしvstone magicはattributeや継承の記述を消去してしまいます

無名内部クラス

そこでjavaの無名内部クラスというものを利用することによって、継承もattributeも利用することなく、tyrusを利用できます。

結局はonConnectServerメソッドの第一引数にEndpointを継承したクラスオブジェクトをいれる必要があるだけなので、無名内部クラスを使うことで解決しました

WebSocketContainer container = ContainerProvider.getWebSocketContainer();
ClientEndpointConfig config = ClientEndpointConfig.Builder.create().build();

try {

    this.session = container.connectToServer(new Endpoint() {
        @Override
        public void onOpen(Session session, EndpointConfig endpointConfig) {
            try {
                onOpenSocket(session, endpointConfig);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    }, config, URI.create(URL));


} catch (DeploymentException e) {

    e.printStackTrace();
} catch (IOException e) {
    e.printStackTrace();
}

 

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください