[英]KryoNet - How do I start client with Boolean xx = new clientprocess(); to get a return value?
I'm creating a little JAVA multiplayer game using kryonet to manage the Server/Client part. 我正在使用kryonet创建一个小的JAVA多人游戏来管理服务器/客户端部分。 I have a little question: in my server program, I start a client with a new called method, "on" a Boolean:
我有一个小问题:在我的服务器程序中,我使用一个新的名为Boolean的方法启动客户端:
Boolean xx = new clientprocess();
In my clientprocess(); 在我的clientprocess();中 , I get the new client() ;, client.connect and the class registration for the new client.
,我得到了新的client() ;,client.connect和新客户端的类注册。 It also contain the 3 methods conn/receive/disconn .
它还包含3种方法conn / receive / disconn 。 Now, I don't know how to use the return data to get a boolean value.
现在,我不知道如何使用返回数据来获取布尔值。 (In fact, I just use this client to connect to a BDD server to get pass/user checking so i just need a Boolean back to treat with client.)
(实际上,我只是使用此客户端连接到BDD服务器以获取通过/用户检查,因此我只需要返回一个布尔值即可与客户端一起使用。)
I have tried stopping and closing the client connection, remove listener, and so forth, but I can't get out of the Received() ; 我试图停止和关闭客户端连接,删除监听器,等等,但是我无法摆脱Received() ; or Disconnected() ;
或Disconnected() ; method.
方法。 And because they are Void method, I cannot make the return value inside the methods.
而且由于它们是Void方法,因此我无法在方法内部进行返回值的设置。 (My actual return is at the end of clientprocess() ; after disconnected() ; but the code is never reached.)
(我的实际回报是在clientprocess()的末尾; 断开连接后的() ;但从未到达代码。)
Is there anything to completely stop the client process to reach my return boolean;
有什么可以完全停止客户端进程以达到我的
return boolean;
statement and continue my login process? 声明并继续我的登录过程?
Here is a part of my code, started with Boolean xx = new loginProcess()
: 这是我的代码的一部分,从
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;
}
Use Kryonet RMI Remote Method Invocation 使用Kryonet RMI远程方法调用
or make your method return void and add a boolean member to your main class and when you receive LoginServerConnectAnswer, just change boolean member to true and call a method in your main class to process login 或使您的方法返回void并向您的主类中添加一个布尔成员,并且当您收到LoginServerConnectAnswer时,只需将布尔成员更改为true并在主类中调用一个方法来处理登录
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.