Pagina 1 di 1

[Risolto] [Java] Sistema distribuito multithreading

Inviato: venerdì 8 giugno 2012, 0:36
da Carlit0sway+
Buonasera.
Per scopi universitari dovrei realizzare un progetto che realizza una compravendita virtuale: ci sono le entità "casa d'aste", "venditore" e "compratore".

La casa d'aste mantiene la lista degli oggetti in vendita e mette in comunicazione venditori e compratori. Essa comunica via RMI.
I compratori scelgono un oggetto dalla casa d'aste, ottengono il riferimento al venditore e lo contattano. Acquirenti e venditori comunicano via Socket.
L'asta parte con un numero fissato di acquirenti (3), e viene fatta partire dal venditore, che conta le connessioni in ingresso con probabili acquirenti.
I client devono essere multithreaded per gestire messaggi in parallelo, sia via input che via socket tra loro.

Questo è un'ipotetico esempio d'esecuzione (in corsivo i dati inseriti dall'utente):

Acquirente
Nome: Tizio
Porta d'ascolto: 12345
A quale server RMI ti vuoi connettere? localhost
A quale porta del server RMI ti vuoi connettere? 1099
Recupero una di lista oggetti dal server... fatto!
Seleziona un oggetto:
1. Vecchio cellulare, prezzo base 57 euro
2. Tovaglia di plastica, prezzo base 5 euro

2
Venditore: Caio
Acquirenti iscritti: Pippo
In attesa di altri acquirenti...
Nuovo acquirente: Pluto
Via dell’asta!
Inserire offerta maggiore di 5 euro:
Marco offre 8 euro
12
Hai fatto un’offerta di 12 euro!
Pippo offre 13 euro
13 euro e 1!
13 euro e 2!
Pluto offre 15 euro
15 euro e 1!
15 euro e 2!
15 euro e 3!
Peccato, non hai vinto l’asta.
Pluto si aggiudica l’oggetto a 15 €.
Venditore
Nome: Sempronio
Porta d'ascolto: 12345
A quale server RMI ti vuoi connettere? localhost
A quale porta del server RMI ti vuoi connettere? 1099

Inserisci descrizione oggetto:
Vecchio cellulare
Inserisci base d’asta:
57
Attendo acquirenti...
Nuovo acquirente: Topolino
Nuovo acquirente: Paperino
Nuovo acquirente: Gastone
Nuovo acquirente: Paperoga
Via dell’asta!
Topolino offre 60 euro
Nessuna offerta per 20 secondi
60 euro e 1!
Attendo 5 s...60 euro e 2!
Attendo 5 s...60 euro e 3!
Chiudo l’asta.
Hai venduto il tuo oggetto per 60 euro!
Topolino si aggiudica l’oggetto: Vecchio cellulare.
Ho implementato il server RMI e la comunicazione con i client.
La mia domanda è semplice e banale, non essendo esperto di applicazioni client/server. Premessa: Sto facendo il tutto sulla mia macchina.
Come distinguere i messaggi dei vari utenti (venditori/compratori) su un'unica console?

Altra domanda stupida: dall'esempio di esecuzione non c'è un menù di scelta tra venditore/compratore: come fa l'utente a fare uno o l'altro?

Non so se mi sono spiegato.
Grazie.

Re: [Java] Sistema distribuito di piattaforma compravendita

Inviato: venerdì 8 giugno 2012, 9:52
da Zoff
Come distinguere i messaggi dei vari utenti (venditori/compratori) su un'unica console?
Puoi mettere un prefisso alle stampe tipo "[Compratore NOME]" dove NOME è il nome del compratore, lo stesso per i venditori.
Altra domanda stupida: dall'esempio di esecuzione non c'è un menù di scelta tra venditore/compratore: come fa l'utente a fare uno o l'altro?
Di solito si dividono le funzionalità su applicazioni (eseguibili) differenti.

Re: [Java] Sistema distribuito di piattaforma compravendita

Inviato: venerdì 8 giugno 2012, 15:18
da Carlit0sway+
Zoff ha scritto:
Come distinguere i messaggi dei vari utenti (venditori/compratori) su un'unica console?
Puoi mettere un prefisso alle stampe tipo "[Compratore NOME]" dove NOME è il nome del compratore, lo stesso per i venditori.
Ho capito. Effettivamente questa è una buona idea :)
Più che altro mi serve in fase di testing.
Zoff ha scritto:
Altra domanda stupida: dall'esempio di esecuzione non c'è un menù di scelta tra venditore/compratore: come fa l'utente a fare uno o l'altro?
Di solito si dividono le funzionalità su applicazioni (eseguibili) differenti.
Qui invece non ho capito. Lo scopo è realizzare un'applicazione unica in sè.
Ipoteticamente mi verrebbe da dire che prima devono esserci dei venditori, e poi dei compratori, altrimenti non avrebbe senso.

Re: [Java] Sistema distribuito di piattaforma compravendita

Inviato: venerdì 8 giugno 2012, 15:25
da Zoff
Allora all'avvio chiedi all'utente cosa vuole fare.

Re: [Java] Sistema distribuito di piattaforma compravendita

Inviato: venerdì 8 giugno 2012, 16:20
da Carlit0sway+
Capisco.

Un'osservazione:
Zoff ha scritto:
Come distinguere i messaggi dei vari utenti (venditori/compratori) su un'unica console?
Puoi mettere un prefisso alle stampe tipo "[Compratore NOME]" dove NOME è il nome del compratore, lo stesso per i venditori.
Se invece di eseguire il tutto in un'unica console, eseguissi diverse volte l'applicazione in diversi terminali? (uno per la casa d'aste, uno per ogni venditore e uno per ogni compratore)?
Ogni messaggio specifico di una persona apparirebbe nel corrispondente terminale.

Re: [Java] Sistema distribuito di piattaforma compravendita

Inviato: venerdì 8 giugno 2012, 16:23
da Zoff
beh dipende come è fatta l'applicazione...

Re: [Java] Sistema distribuito di piattaforma compravendita

Inviato: venerdì 8 giugno 2012, 16:57
da Carlit0sway+
Mi spiego meglio. Se ho:
- un processo casa d'aste
- un processo venditore
- un processo compratore
ciascun processo con i suoi thread (gestione dell'input, gestione della comunicazione via socket etc)

credo che eseguendo più volte il binario del compratore, ad esempio, in diversi terminali, partirebbero diversi processi e quindi dovrei ottenere l'effetto desiderato. Può essere?

Grazie :)

EDIT.: posto una seconda domanda importante, nella speranza che possiate darmi una dritta!

Ho due thread di uno stesso client, uno che gestisce l'input inserito dall'utente e l'altro che gestisce l'input dalla socket col server...
Come faccio a far sì che il thread UserInput venga eseguito solo quando effettivamente l'utente digita una possibile offerta?
Mentre altrimenti deve essere eseguti l'altro, SocketInput, per vedere se ci sono messaggi di rialzo da altri acquirenti?

Grazie.