さまざまな理由から、アプリケーション コンテナーなしで実行する必要がある 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);
}
何か案は?