Visualizzazione dei risultati da 1 a 4 su 4

Discussione: Thread e sleep

  1. #1
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    60

    Thread e sleep

    Ho un server che comunica con + client e se entro certo tempo non avviene una nuova connessione inizia la partita con i client connessi.
    Io avevo pensato di fare una sleep al server, però poi non ho idea di come risvegliarlo se si connette nuovo client.
    Avete delle idee??

    codice:
    public class Server {
    	private Giocatore giocatore;
    	private List<ServerThread> chatClientHandlers = new CopyOnWriteArrayList<ServerThread>();
    	int num=0;
    	private Scanner in;
    	private PrintWriter out;
    
    	public void startServer(int port) throws IOException, InterruptedException {
    		ExecutorService executor = Executors.newCachedThreadPool();
    		
    		ServerSocket serverSocket = new ServerSocket(port);
    		System.out.println("Server avviato normalmente.");
    		
    		try {
    			while (true) {
    				String colorePartita="BIANCO";
    				num++;
    				giocatore=getGiocatore(num);
    			
                                    /*Thread.sleep(1000);*/
    				Socket socket = serverSocket.accept();	
    				
    				ServerThread clientHandler = new ServerThread(socket, chatClientHandlers, serverSocket,giocatore);
    				
    				chatClientHandlers.add(clientHandler);
    				
    				executor.submit(clientHandler);
    				
                                   //si connette secondo giocatore parte timeout.
    				if(num==maxGiocatori){
    					for (ServerThread c:chatClientHandlers) {
    						c.partitaIniziata(colorePartita);
    				}}
    			}
    		} catch (IOException e) {
    			serverSocket.close();
    			executor.shutdown();
    			for (ServerThread c:chatClientHandlers) {
    				c.getSocket().close();
    			}
    			chatClientHandlers.clear();
    		}
    	}
    	
    	public static void main(String[] args) throws InterruptedException {
    		Server server = new Server();
    		try {
    			server.startServer(4747);
    			System.out.println("Server terminato normalmente.");
    		} catch (IOException e) {
    			System.err.println(e.getMessage());
    		}
    	}
    }

  2. #2
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    60
    Nuove idee??

  3. #3
    Utente di HTML.it
    Registrato dal
    May 2012
    Messaggi
    60
    In pratica integro meglio...
    Esiste un modo per far dormire il thread e risvegliarlo se accade una determinata circostanza?? nello specifico essendo un thread del server dorme e si risveglia se si connette un client altrimenti passato il tempo inizia la partita..

  4. #4
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,320
    No... la soluzione consiste nell'avere un ulteriore thread che semplicemente attende lo scadere del tempo. Un TimerTask potrebbe andare bene.

    Scheduli un TimerTask ad una determinata scadenza (il tempo massimo di attesa). Se arriva una nuova connessione, cancelli la schedulazione (ed, eventualmente, ne fai partire una nuova se necessiti di avere un altro "timeout" da far scadere). Se il tempo passa, verrà fatto partire il TimerTask che, semplicemente, avviserà il server che deve iniziare la partita.


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.