2017-07-11 30 views
0

を(WSClientの初期化)を再生する私は今、私が入ってくるのソケットを扱うソケット俳優を持っている公式のプレイから、クライアントクラスを定義2.6ドキュメント、送信するHTTPリクエスト

import javax.inject.Inject; 
import play.libs.ws.*; 
import java.time.Duration; 
import java.time.temporal.ChronoUnit; 
import java.util.concurrent.CompletionStage; 

public class MyClient implements WSBodyReadables, WSBodyWritables { 
    private WSClient ws; 

    @Inject 
    public MyClient(WSClient ws) { 
     this.ws = ws; 
     sendRequest(); 
    } 

    public void sendRequest() { 
     WSRequest request = ws.url("http://example.com"); 

     WSRequest complexRequest = request.addHeader("headerKey", "headerValue") 
       .setRequestTimeout(Duration.of(1000, ChronoUnit.MILLIS)) 
       .addQueryParameter("paramKey", "paramValue"); 

     CompletionStage<? extends WSResponse> responsePromise = complexRequest.get(); 
    } 
} 

を撮影した以下のコードを持っていますメッセージ。私は新しいメッセージがソケットを介して来るたびにHTTPリクエストを発射したい。

私の問題は、sendRequestメソッドを使用するようにMyClientクラスを初期化する方法がわかりません。

public void onReceive(Object message) throws Exception { 
    if (message instanceof String) { 
     out.tell("I received your message: " + message, self()); 
     MyClient a = new MyClient(); //problem here 
    } 
} 

答えて

1

あなたは、あなたがMyClassでやったのと同じ方法、それを注入する必要があります(例:あなたが俳優を作成する方法を制御いけない)あなたがこれを使ってみましょういけないいくつかの問題がある場合

public class MyActor extends UntypedAbstractActor { 

    private MyClient client; 

    @Inject 
    public MyActor(MyClient client) { 
     this.client = client; 
    } 

    @Override 
    public void onReceive(Object message) throws Exception { 
     client.sendRequest(); 
    } 
} 

を、あなたの質問に情報を追加してください。

+0

以前は、私のようなので、MyActorをインスタンス化: 'WebSocket.Text.acceptを返す(リクエスト - > ActorFlow.actorRef(MyActor ::小道具、 actorSystem、materializer ) );'もはや機能し ので、どのようにそれはできますか? – john

+0

次に、アクターを作成するときに 'MyClient'オブジェクトを挿入し、' MyActor :: props'を使う代わりに 'Props.create(MyActor.class、THE_INJECTED_INSTANCE_OF_MYCLIENT)'を使用するといいと思います。 – Salem

+0

@john動作しましたか? – Salem

関連する問題