知道客户端何时调用远程对象RMI

时间:2013-11-12 17:52:24

标签: java swing rmi remoteobject

我正在使用RMI创建一个java swing应用程序,我想知道客户端何时调用服务器的方法以便其他客户端更新。 让我更具体一点,我在java swing中制作一个tic tac toe游戏,我有服务器和2个客户端,我希望当客户端移动时,其板上的其他客户端获得新的移动。以下是当客户按下按钮在一个客户端上移动时发生的情况。

private void btn11ActionPerformed(java.awt.event.ActionEvent evt) {                                      
    try{
        int turno = stub.getTurno();
        int resultado = stub.tirar(1, 1);
        hacerTablero(stub.getPosiciones());
        if (resultado != 3){
            if (turno == 1){
                lblJugador.setText("Turn of player 2");
            }else{
                lblJugador.setText("Turn of player 1");
            }
            if(resultado == 1 || resultado == 2){
                if (resultado == 1){
                    if (turno == 1)
                        JOptionPane.showMessageDialog(this, "Player 1 wins");
                    else
                        JOptionPane.showMessageDialog(this, "Player 2 wins");
                } else
                    JOptionPane.showMessageDialog(this, "It's a tie");
                InterfazGato nuevo=new InterfazGato();
                nuevo.setVisible(true);
                this.dispose();
            }
        } else {
            JOptionPane.showMessageDialog(this, "This place is taken");
        }
    }catch(RemoteException | HeadlessException e){
        System.out.println(Exception from the remote method: " + e.getMessage());
    }
}

在第

int resultado = stub.tirar(1, 1);

是我在远程对象上调用服务器端方法的地方,这是这个方法

public int tirar(int x, int y) throws RemoteException{
    if (gato[x-1][y-1] == 0){
        if (turno == 1){
            gato[x-1][y-1] = 1;
            if (ganar()== 1){
                reiniciar();
                return 1;
            } else if (ganar() == 2){
                reiniciar();
                return 2;
            }
            turno = 2;
        }
        else{
            gato[x-1][y-1] = 2;
            if (ganar()== 1){
                reiniciar();
                return 1;
            } else if (ganar() == 2){
                reiniciar();
                return 2;
            }
            turno = 1;
        }
    } else
        return 3;
    return 0;
}

每次调用方法tirar(int,int)时,它都会检查远程对象上的矩阵以及玩家所做的移动和位置。 方法ganar()是知道游戏何时结束,如果没有完成则返回0,如果有人获胜则返回1,如果是平局则返回2。

另一方面,我仍然不知道有多少客户端连接,我想成为2,如果应用程序等到第2个,如果第三个客户尝试建立连接则拒绝它。 / p>

任何帮助都会受到高度赞赏,我一直在寻找一段时间的答案而且我还没找到任何东西......这是我的最后一个选择..

P.S。我希望我能说清楚,英语不是我的第一语言

1 个答案:

答案 0 :(得分:0)

我不知道这是否是正确的方法但是为了解决我的问题我在两个客户端都使用了计时器,所以客户端每隔一定时间就检查服务器上的更新,所以如果有的话,客户端会更新任何并且当其他客户采取行动时给出他们知道的外观。这对我来说很有把握。