Javaのクライアントサーバークライアントまたは単にサーバークライアントアプリケーションのための非常に軽量で使いやすいライブラリ。接続セットアップ、再接続、タイムアウト、キープアリブなどのすべての作業をバックグラウンドで行います。アプリケーションに何を送信して受け取るかを伝えるだけで、残りはそれ自体で起こります。それはほとんど魔法です!
コード品質とビルドステータス
import java . net . Socket ;
public class MyServer extends Server {
public MyServer ( int port ) {
super ( port );
}
@ Override
public void preStart () {
registerMethod ( "SOME_MESSAGE" , new Executable () {
@ Override
public void run ( Datapackage msg , Socket socket ) {
doSomethingWith ( msg );
sendReply ( socket , "Hey, thanks for your message. Greetings!" )
}
});
}
}MyServer拡張サーバーなどの独自のクラスを作成するだけで、元のコンストラクターを使用してPrestart()メソッドを実装してください。 Prestartメソッドに追加するだけです
registerMethod ( "IDENTIFIER" , new Executable () {
@ Override
public void run ( Datapackage msg , Socket socket ) {
doSomethingWith ( msg , socket );
sendReply ( socket , "Some Reply" );
}
});受信したサーバーが受信したデータパックのすべての識別子について、あなたは反応したいです。
例:したがって、「ping」と実行可能な応答可能な「ポン」をクライアントに登録する場合は、登録するだけです
registerMethod ( "PING" , new Executable () {
@ Override
public void run ( Datapackage msg , Socket socket ) {
sendReply ( socket , "Pong" );
}
});そしてそれだけです。
より多くの識別子が反応するには、これらの行を複数回PRESTART()に入れるだけです。 DataPackgeを入手したクライアントに返信を送信することを忘れないでください。
すべての接続されたクライアントにチャットメッセージをブロードキャストするサーバーの例:
registerMethod ( "Message" , new Executable () {
@ Override
public void run ( Datapackage msg , Socket socket ) {
System . out . println ( "[Message] New chat message arrived, delivering to all the clients..." );
broadcastMessage ( msg ); //The broadcast to all the receivers
sendReply ( socket , String . valueOf ( reveicerCount )); //The reply (NECESSARY! unless you want the client to block while waiting for this package)
}
}); import java . net . Socket ;
public class MyClient extends Client {
public MyClient ( String id , String address , int port ) {
super ( id , address , port );
registerMethod ( "SOME_MESSAGE" , new Executable () {
@ Override
public void run ( Datapackage msg , Socket socket ) {
System . out . println ( "Look! I got a new message from the server: " + msg . get ( 1 ));
}
});
start (); // Do not forget to start the client!
}
}独自のクラス、たとえばMyClient Extendingクライアントを作成するだけで、元のコンストラクターを使用してください。クライアントがログインする準備ができたら、start()を呼び出します。クライアントは、コンストラクターパラメーターに応じてサーバーに接続し、サーバーに登録します。これからは、サーバーからメッセージを受信し、STOP()を呼び出すまで接続を維持します(必要に応じて再接続します)。
着信メッセージに反応するには、追加するだけです
registerMethod ( "IDENTIFIER" , new Executable () {
@ Override
public void run ( Datapackage msg , Socket socket ) {
doSomethingWith ( msg , socket );
}
});どこかで、私はあなたが処理するすべてのメッセージIDについて、コンストラクター自体を提案します。
サーバーからの着信チャットメッセージのExmaple:
registerMethod ( "PING" , new Executable () {
@ Override
public void run ( Datapackage msg , Socket socket ) {
System . out . println ( "Look! I got a new message from the server: " + msg . get ( 1 ));
// msg.get(1); should now return "Pong" in our example.
}
});クライアントとは異なり、サーバーはデフォルトで返信を期待しません。したがって、彼はそのために登録されているエクストラアイデンティファイアメソッドが必要であるため、常に彼に返信パッケージを送信しないでください。
サーバーとして:
クライアントとして:
いくつかのイベントハンドラー(onconnectionGood()、onconnectionProblem()、onclientregistered(...)など)があります。これらのイベントを処理するために上書きできます。
クライアントとサーバーのクラスは、OnlogとOnlogerrorのイベントハンドラーを提供します。これは、コンソールに情報メッセージとエラーメッセージが(のみ)出力されてはならない場合に実装でオーバーライドできます。