【Processing】クライアント側で接続の確立を確認するコード

 Processing(P5)でサーバとクライアントを作るのはすごく簡単で便利なのですが、クライアント側でサーバに正常に接続できたのかを確認するメソッドがない。サーバが立ってない状態でクライアント起動した時に、確認するメソッドてか方法がない。try-catchしても例外受け取ってくれない。TimeOut処理できない。って状態だったので、適当にディスカスを調べていたら、

...
If you look at Client.java source, you will see that nearly all the Client constructor is surrounded by a try/catch which just dumps the stack trace.
A bit annoying for a finer control...

Now, at least, you can check the active() status after creating the client: if it returns false, you know your client haven't been properly initialized
...
Processing 1.0 - Processing Discourse - try-catch for socket exception

「え、"active()"なんてメソッドはリファレンスに書いてないんだけど。てか、ソースコード読めよ(笑)って言われてるよ。こわいよ。」とか思いつつ、ライブラリ内のソース(Client.java)を眺めていたら、ありました。このメソッド。これを呼んであげるだけで、接続の有無を確認できます。

import processing.net.*;

Client myClient;

void setup() {
    size(100, 100);

    myClient = new Client(this, "127.0.0.1", 5204);
    
    if(myClient.active()){
        println("Success.");
    }
    else{
        println("Connection refused.");
        exit();
    }
}

void draw() {
}

 これで、接続の有無を確認できるので、後は適当にタイムアウト処理追加してあげたりリトライしてあげるだけで、よくある「サーバーが居なかったら、自分がサーバーになる。」という処理ができますね。

 Processingがメディアアート方面に人気なだけあって、こういう処理をする人は少ないんですかね。それとも「こんな事しなくても、確認する方法あるのかな。」とか、「実はtry-catchの使い方間違ってるのかな。」とか考えつつ、とりあえず短いコードで動いたので良しとします。「これ他の方法でも出来るよ!」などなどありましたら、コメントいただけると助かります。

 ではでは。