Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/303.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 保留连接到web服务jax ws的客户端的历史记录_Java_Web Services_Jakarta Ee_Soap_Jax Ws - Fatal编程技术网

Java 保留连接到web服务jax ws的客户端的历史记录

Java 保留连接到web服务jax ws的客户端的历史记录,java,web-services,jakarta-ee,soap,jax-ws,Java,Web Services,Jakarta Ee,Soap,Jax Ws,我有一个多人游戏,我想保留连接玩家的历史,以了解游戏何时开始。 我使用了HttpSession,但它不能解决我的问题。 此外,我还在Web服务中创建了一个玩家的静态数组列表,但它无法解决我的问题:( 还有别的想法吗 @Resource private WebServiceContext wsContext; @WebMethod public PlayerModel connect(String PlayerName) { PlayerMo

我有一个多人游戏,我想保留连接玩家的历史,以了解游戏何时开始。 我使用了HttpSession,但它不能解决我的问题。 此外,我还在Web服务中创建了一个玩家的静态数组列表,但它无法解决我的问题:( 还有别的想法吗

     @Resource
    private WebServiceContext wsContext;    
   @WebMethod
    public PlayerModel connect(String PlayerName) {
        PlayerModel playerModel = null;
        Players players = new Players() ;
        ArrayList<PlayerModel> playerList = players.getPlayers();

        if (playerList.isEmpty()) {
            System.out.println("from service :No payer yet");
             boardModel = new BoardModel(6, 7);
            session.setAttribute("boardModel", boardModel);



            boardModel.setPlayer1(PlayerName);
            playerModel = new PlayerModel(1, PlayerName, boardModel);
            playerList.add(playerModel) ;
        } else if (playerList.size() == 1) {
            boardModel.setPlayer2(PlayerName);
            playerModel = new PlayerModel(2, PlayerName, boardModel);
          playerList.add(playerModel) ;
        }
        return playerModel;

    }

您的代码似乎在多个地方都没有加起来

  • 您的第一个代码块除了缺少重要的位之外,不可能跨多个请求工作

    • playerList
      看起来几乎总是空的
  • 会话感知JAX-WS服务本身对您没有帮助。根据定义,会话与单个用户相关。如果您没有额外的工作,就无法在多个用户之间共享一个用户的webservice会话


  • 代码中一个明显的差距是,您没有识别游戏实例当玩家请求连接时,他们应该请求连接到现有游戏,或者通过传递
    gameId
    来创建一个。如果没有标识特定游戏的令牌,您将难以连接同一游戏的多个用户。
    connect
    应具有(过于简单化的)签名
    connect(stringgameid,stringplayername)
    gameId
    的列表可以由DAO在Web服务端点的上下文之外进行管理。这样,返回的玩家或新玩家可以通过显示已知的
    gameId
    来显示其状态,并且您可以跟踪连接到特定
    gameId
    的用户

     @Resource
     private WebServiceContext wsContext;   
     BoardModel boardModel;
     HttpSession session;
    
    @WebMethod
    public PlayerModel connect(String PlayerName) {
        MessageContext mc = wsContext.getMessageContext();
        session = ((HttpServletRequest) mc.get(MessageContext.SERVLET_REQUEST)).getSession();
    
        if (session == null) {
            System.out.println("from service :No payer yet");
             boardModel = new BoardModel(6, 7);
             session.setAttribute("boardModel", boardModel);
            boardModel.setPlayer1(PlayerName);
            playerModel = new PlayerModel(1, PlayerName, boardModel);
           session.setAttribute("1", playerModel);
        } else if (session.getAttribute("1" != null) {
            boardModel.setPlayer2(PlayerName);
            playerModel = new PlayerModel(2, PlayerName, boardModel);
            session.setAttribute("2", playerModel);
        }
        System.out.println("from service  : player" + PlayerName);
        return playerModel;
    
    }