2

さまざまな理由から、アプリケーション コンテナーなしで実行する必要がある Web サービスを介して、いくつかのゲームのフレームワークをまとめています。

この時点で後は、各プレイヤーが認証を行い、ログイン サービスにアクセスすることだけです。ログイン サービスは、すべてのプレイヤーがログインするまで返されないため、プレイヤーは呼び出しが完了するとプレイを開始できることを認識します。

私が抱えている問題は、これが認証なしで正常に機能することですが、認証を有効にするとすぐに、最初のプレーヤーが認証されて正しく接続されますが、最初のプレーヤーがログイン サービスを待っている限り、2 番目のプレーヤーは接続できません。戻る。

サービスは次のようになります。

public void login()
{
    Game game = Game.getInstance();
    while (game.getStatus() != Status.RUNNING)
    {
        try
        {
            Thread.sleep(10);               
        } 
        catch (InterruptedException e)
        {
            // swallow it, doesn't matter
        }
    }
}

クライアントは次のようになります (接続ロジックに取り除かれます)。

public void clientLogin()
{
    Authenticator.setDefault(new Authenticator()
    {
        @Override
        protected PasswordAuthentication getPasswordAuthentication()
        {
            return new PasswordAuthentication(getUsername(), getPassword());
        }
    });

    QName qName = new QName("http://namespace/", "ChallengeService");
    URL url = new URL(endPoint);
    ChallengeService wsClient = new ChallengeService(url, qName);
    System.out.println("Got Client");
    wsPort = wsClient.getChallengePort();
    wsPort.login();
}

サーバーは次のように起動されます。

public void startServer()
{
    server.start();
    endpoint = Endpoint.create(new ChallengeService());
    server = HttpServer.create(new InetSocketAddress(7070), 5);
    context = server.createContext("/Challenge/ChallengeService");
    context.setAuthenticator(new StandaloneAuthenticator("Challenge")); // disabling this works
    endpoint.publish(context);
}

何か案は?

4

0 に答える 0