Communication réseau et TimerTask
Bonjour à tous,
Je suis entrain de développer une application réseau et j'ai besoin pour ce faire d'utiliser un TimerTask pour lancer des tâches toutes les x secondes. Seulement pour communiquer avec le serveur dans ma classe ClientUpdate qui étend TimerTask, je passe ma classe Client.java qui contient le nécessaire pour communiquer avec le serveur.
Mais je n'arrive pas à modifier les attributs public de ma classe Client passé en paramètre de mon TimerTask, ou alors je n'arrive pas à lire sur le réseau les objets que je reçois dans la classe ClientUpdate.
Savez-vous pourquoi ?
Je poste mes classes si jamais vous avez une idée...
ClientUpdate.java
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
|
package client;
import game.player.Player;
import game.player.PositionPlayer;
import java.io.IOException;
import java.util.ArrayList;
import java.util.TimerTask;
import java.util.concurrent.locks.Lock;
import java.util.concurrent.locks.ReentrantLock;
import network.Request;
public class ClientUpdate extends TimerTask {
Request r;
PositionPlayer pp;
Client c;
Lock l;
public ClientUpdate(Client client) {
this.r = new Request();
this.pp = new PositionPlayer();
this.c = client;
this.l = new ReentrantLock();
}
public void run() {
//l.lock();
// Mise a jour des joueurs de la region actuelle
r.idapplication = 2;
r.idtypereq = 1;
c.nm.sendRequest(r);
try {
// Envoie de la position du joueur
c.nm.oos.writeObject(c.joueur.pp);
// Reception du serveur
this.pp = (PositionPlayer) c.nm.recvObject();
} catch (IOException e) {
e.printStackTrace();
}
System.out.println("--------------------------------------------");
System.out.println("NBPLAYER dans la region : "+this.pp.players.size());
for(Player p: this.pp.players) {
System.out.println("** "+p.name);
}
System.out.println("--------------------------------------------");
//l.unlock();
}
} |
Client.java
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84
|
package client;
import java.io.IOException;
import java.util.Timer;
import javax.swing.JOptionPane;
import org.newdawn.slick.AppGameContainer;
import org.newdawn.slick.SlickException;
import network.NetworkManager;
import network.Request;
import game.GameManager;
import game.player.Player;
import game.player.PositionPlayer;
import game.world.GameTime;
/**
* Gestion d'une session cliente
* @author akrogames
*
*/
public class Client implements Runnable {
public GameManager gm;
public NetworkManager nm;
public Player joueur;
private Thread t;
public Client() {
this.gm = new GameManager();
this.nm = new NetworkManager();
this.joueur = new Player(null, null);
t = new Thread(this);
}
@Override
public void run() {
// On lance les procedures de MAJ.
while(true) {
//TODO ...
}
}
/**
* Permet de lancer le jeu du client
*/
public void launchGame() {
AppGameContainer app;
try {
// Creation du Thread de gestion du client
this.t.start();
// On met à jour le player
this.joueur = (Player) this.nm.recvObject();
System.out.println("Bienvenue "+this.joueur.name+", NUM: "+this.joueur.numplayer);
System.out.println(this.joueur.pp.toString());
app = new AppGameContainer(new Clientgame());
app.setDisplayMode(800, 600, false);
//app.start();
Timer time = new Timer();
ClientUpdate cu = new ClientUpdate(this);
time.schedule(cu, 0, 500);
} catch (SlickException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* On ferme les connexions
*/
public void close() {
this.nm.close();
}
} |
D'avance merci de votre aide, en espérant que vous aurez une idée.
Bonne soirée.