Originariamente inviato da Alex'87
Il server come lo ottiene il riferimento al client?
Non ho capito la domanda.
Vediamo se riesco ad interpretarla:
Il server mette nel registro il riferimento di se stesso:
codice:
try {
LocateRegistry.createRegistry(1099);
} catch (ExportException ex) { System.out.println("ERRORE..."); }
String path = "rmi://localhost/ServerImpl";
Naming.rebind( path, this );
Il client si collega ed ottiene un riferimento al server cosi:
codice:
String remoteName = "rmi://" + ipServer + "/ServerImpl";
server = (IServer) Naming.lookup( remoteName );
dove "ipServer" è l'ip del pc dove gira il server.
Una volta che il client ottiene un riferimento al server, chiama un , metodo sul server perchè il server possa ottenere il riferimento al client. Il metodo in questione è quello citato prima (initalizeChannel) e come parametro di questo metodo viene passato il riferimento stesso al client di modo che il server possa invocare i metodi del client.
Ovviamente oltre a fare questo, il metodo "initalizeChannel (IClient client)" fa altre cose poichè il server tiene in memomoria il riferimento di tanti client che il server gestisce e vede come canali. Poi alla fine, lo stesso metodo chiama un metodo sul client: è questo il metodo che crea lo screenshoot e lo invia a sua volta al server che lo visualizzerà. Questo metodo è messo qui provvisoriamente per fare test, poi lo metterò in un pulsante dedicato e lo farò partire non direttamente.
In sintesi è questo il funzionamento, non so sè è buona prassi passare il come parametro, il riferimento di una classe che estende una classe Remote ma mi sembrava molto più pulito e semplice
Io ho pensato che magari il prob potrebbe essere che il metodo chiamato dal server effettua operazioni sul server o potrebbe arrivare un problema dal fatto che il server client chiama e il server risponde chimando a sua volta il client.
Grazie