KryoNet - Как запустить клиент с логическим значением xx = new clientprocess(); чтобы получить возвращаемое значение?

Я создаю небольшую многопользовательскую игру JAVA, используя kryonet для управления серверной/клиентской частью. У меня небольшой вопрос: в моей серверной программе я запускаю клиент с новым вызываемым методом "на" логическом значении:

Boolean xx = new clientprocess();

В моем clientprocess(); я получаю новый client();, client.connect и регистрацию класса для нового клиента. Он также содержит 3 метода conn/receive/disconn. Теперь я не знаю, как использовать возвращаемые данные для получения логического значения. (На самом деле, я просто использую этот клиент для подключения к серверу BDD, чтобы получить пароль/проверку пользователя, поэтому мне просто нужно логическое значение для обработки с клиентом.)

Я пытался остановить и закрыть клиентское соединение, удалить прослушиватель и т. д., но не могу выйти из Received(); или Отключено(); метод. И поскольку они являются методом Void, я не могу сделать возвращаемое значение внутри методов. (Фактически мой возврат происходит в конце clientprocess(); после disconnected(); но код никогда не достигается.)

Есть ли что-нибудь, чтобы полностью остановить процесс клиента, чтобы достичь моего оператора return boolean; и продолжить процесс входа в систему?

Вот часть моего кода, начинающаяся с Boolean xx = new loginProcess():

 boolean loginProcess(final String usernamereceived, final String passwordreceived, final int todologin){
    System.out.println("In LOGIN PROCESS");
    final Client loginclient = new Client();
    Kryo kryologin = loginclient.getKryo(); //encodage des packets
    //kryo.register(byte[].class); Si on utilise le system de BYTE
    kryologin.register(Packet0LoginRequest.class);
    kryologin.register(Packet1LoginAnswer.class);
    kryologin.register(Packet2Message.class);
    kryologin.register(Packet2login.class);
    kryologin.register(Packet2login1.class);
    kryologin.register(Packet2login2.class);
    kryologin.register(InetSocketAddress.class); //useless
    kryologin.register(Inet4Address.class); //useless
    kryologin.register(PacketupdateTest.class);
    kryologin.register(LoginServerConnect.class);
    kryologin.register(LoginServerConnectAnswer.class);
    kryologin.register(java.util.ArrayList.class);
    kryologin.register(java.util.List.class);
    kryologin.register(User.class);
    kryologin.register(String[].class);
    System.out.println("Login registration over");
    loginclient.start();
    loginclient.addListener(new Listener() {
        @Override
                    public void connected (Connection connection1) {
                        System.out.println("Connected login");
                            LoginServerConnect loginserverconnect = new LoginServerConnect();
                            connection1.sendTCP(loginserverconnect);
                             System.out.println("Loginserverconnect sended: "+loginserverconnect);
                    }
        @Override
                    public void received (Connection connection1, Object object) {
                         System.out.println("Reception dun packet du login server HASH: "+object);
                                if (object instanceof LoginServerConnectAnswer) {
                                    if (todologin==1){
                                        System.out.println("LOGIN PROCESS");
                                    Packet2login1 loginask = new Packet2login1();
                                    loginask.Password = passwordreceived;
                                    loginask.Username = usernamereceived;
                                     connection1.sendTCP(loginask);
                                        System.out.println("Fichier packet2login1 sended: User *"+loginask.Username+"*, et pass: *"+loginask.Password);
                                    }
                                    else if (todologin == 2){
                                        System.out.println("ADD USER PROCESS");
                                        Packet2AddUser adduserask = new Packet2AddUser();
                                        adduserask.password = passwordreceived;
                                        adduserask.username = usernamereceived;
                                        connection1.sendTCP(adduserask);
                                        System.out.println("Fichier packet2AddUser sended: user *"+adduserask.username+"*, et pass: *"+adduserask.password);
                                    }
                                }
                                if (object instanceof Packet2login2){
                                    Boolean result = ((Packet2login2) object).Result;
                                    String usernamefromlogin = ((Packet2login2) object).Username;
                                   System.out.println("reception de la reponse de login: **"+result+"** pour l'utilisateur: "+usernamefromlogin);

                                   //creation nouvel user - ajout if useramefromlogin == usernamereceived
                                   user.name = usernamefromlogin;

                                   if(result){
                                        System.out.println("user received from login server: "+ user.name+", and KryoId: "+Kryoid);                                            System.out.println("Kryoid du client actu (depuis le packet0 C-S: "+ Kryoid);
                                        int lastid  = players.lastIndexOf(user);
                                                if (players.lastIndexOf(user) == 0){
                                                    user.Id = lastid;
                                                }
                                                else {user.Id = lastid +1;}
                                        players.add(user);
                                        System.out.println("Players.add over");
                                        System.out.println("BDD result returned0: "+mtx);
                                        mtx = true;
                                        System.out.println("BDD result returned1: "+mtx);
                                       /* connection1.close();
                                        loginclient.close();
                                        loginclient.stop();*/
                                        loginclient.removeListener(this);
                                   }

                                   else{
                                       System.out.println("Username or Password incorrect for user: "+ usernamefromlogin);
                                       mtx = false;
                                   }

                                }

                                if (object instanceof Packet2AddUser1){
                                    Boolean addresult = ((Packet2AddUser1) object).adduserresult;
                                    String usernamefromlogin = ((Packet2AddUser1) object).username;
                                    if(addresult){
                                        System.out.println("Nouvel utilisateur enregistre en BDD: *"+ usernamefromlogin);
                                        mtx = true;
                                    }
                                    else {
                                        System.out.println("Erreur lors de lenregistrement en BDD pour: *"+ usernamefromlogin);
                                        mtx = false;
                                    }
                                 }
                                System.out.println("END of received");
                    }

        @Override
public void disconnected (Connection connection1){
       System.out.println("public void DISCONN passé OK cote LISTENER");

}
            });
    try {
        System.out.println("loginclient.connect");
        loginclient.connect(loginstimeout, loginsip, loginsPORT);
        System.out.println("end of conn");
     } catch (IOException ex) {
        Logger.getLogger(NetworkListener.class.getName()).log(Level.SEVERE, null, ex);
    }
    System.out.println("BDD result returned: "+mtx);
    return mtx;
}

person Mtx z    schedule 23.06.2012    source источник


Ответы (1)


Использовать удаленный вызов метода Kryonet RMI

или сделайте так, чтобы ваш метод возвращал значение void и добавлял логический член к вашему основному классу, а когда вы получаете LoginServerConnectAnswer, просто измените логический элемент на true и вызовите метод в своем основном классе для обработки входа в систему.

person Hisham Bakr    schedule 26.06.2012