Client
クラスには、メッセージをサーバーキューに送信するメソッドがあります。またキューに登録され、それが登録されているクライアントのいずれかから新しいメッセージを受信したときに、サーバがすべてのクライアントに戻って通知が送信されます:私は私のクライアントをinstansiateしたい別のクラスで加入者の変更を追跡するためのより良い方法はありますか?
public class Client {
public void sendMessage(String message) {
// Method to send messages to server
}
public void messageDelivered(String receivedMessage) {
// This is a method subscribed successfull message delivering
}
}
、メッセージを送信し、それはsuccessfuly送信されたことを確認します
public class ParentClass {
protected boolean checkConnection() {
Client client = new Client(); // Lets skip all configuration and connection details
String testMessage = "Test message";
client.sendMessage(testMessage);
// Check that messageDelivered() was called in client with testMessage parameter
return result;
}
}
messageDelivered()
がasynchroniously親checkConnection()
メソッド内で呼ばれたことを確認するための最良の方法は何ですか?
クライアントクラスでフラグを作成し、メッセージが配信されたときにフラグを更新し、親クラスの時間によって制限されるループでこのフラグのラップチェックを行うという簡単な解決策があります。しかし、このオプションは私のために非常に汚く見えます。たぶん、Java SDKには、より良い習慣やウォッチャーがありますか?
それは非同期に呼び出された場合、それは 'checkConnection()'内部で呼び出すことはできません、これらの二つは、あなたのコードサンプルでは、相互に排他的です。 –
@ M.Prokhorovそれは以下の方法で行うことができます: \t retries = 1000; \t DO { \t場合(client.deliveredResult ==真){ \t //成功 \t} \t睡眠(1000); \t retries--; \t} while(再試行回数> 0); 'messageDelivered()'が実行されると、 とclient.deliveredResultはtrueに設定されます。しかし、より洗練されたソリューションがあるかどうかは疑問です。 (申し訳ありません、それはフォーマットを混乱させました) – diko
なぜ 'sendMessage'に2番目のパラメータとしてコールバック(' Runnable'または 'Consumer)を追加しませんか?成功した応答がサーバーから来たときにクライアントがそのパラメータをトリガーします。 –
Andrew