Newsgroup: it.comp.lang.delphi
Titolo: [Socket Components]Domandina!

Sto programmando un giochino multiplayer con TServerSocket e
TClientSocket...
Come ben saprete dal server si possono sendare ai vari client delle stringhe
in questo modo:
ServerSocket.Socket.Connections[x].SendText('Ciao');
dove X è il client specifico a cui si vuole spedire la stringa.
Ciò che chiedo è: ma quel client SA di essere la  X connessione?? nel client
c'è una qualche variabile integer che lo identifica nel gruppo di client
connessi al server? Oppure devo fare in modo che il server che glielo
comunichi?
Chiedo questo perchè sto avendo gravi difficolta (piu che altro per il
casino mentale!) quando un client fra tanti si disconnette, e la X di ogni
client scala di 1 (ma i client non lo sanno! e succede il finimondo).

 client scala di 1 (ma i client non lo sanno! e succede il finimondo).
Una domanda: perche' il client ha bisogno di sapere chi e' ?
Devi pensare alle connessioni socket, come delle corde lanciate
dal client al server.  Il server ha il compito di agguantare
un capo della corda e legarlo a se'.  Fa questo con ogni client.
Da quel momento in poi, tutte le comunicazioni, avvengono 
mediante dei topolini messaggeri che camminano sulle corde 
dal client al server e dal server al client.  
Ne' il client, ne' il topolino messaggero sono tenuti a sapere 
qual e' l'identificativo del client (che il server conserva 
internamente come numero del socket).  Nel momento in cui un client
taglia la corda e i suoi topolini cadono nel baratro, i topolini
sulle altre corde continuano a camminare regolarmente.
Puoi anche rovesciare il meccanismo dell'identificazione, 
facendo in modo, cioe', che siano i client a loggarsi presso
il server.
Io ho sviluppato un sistema di memorizzazione e dispatch di
messaggi tra applicazioni remote, usando i socket sotto Delphi.
Ogni client, al momento della connessione, manda un messaggio 
al server comunicandogli come si chiama.  Il server mantiene
la coppia di informazioni nome/numero socket.
Stesso meccanismo in fase di disconnessione: il client manda
un messaggio al server con cui gli comunica che sta andando
via.  Il server cancella dalla sua lista il client.
Tutto questo non influenza il funzionamento degli altri client.
-- 
Posted from  [80.105.34.80] 
via Mailgate.ORG Server - 
http://www.Mailgate.ORG

 ha scritto nel messaggio
news:9d4423c83dd76afa3c0...@mygate.mailgate.org...


sentirlo. 
Questo si puo' fare anche senza che il client sappia chi e'.
L'importante e' che le informazioni passino dal server, poi,
puo' essere il server che le fa ribaltare all'orecchio di
ogni client.

posso solo dire che mentre progetto il software uso un fogliettino e faccio
dei disegnini altrimenti mi fonde il cervello... roba da impazzire.
Tanner

...però la prossima volta mi piglio DirectPlay e sviluppo i miei giochi con
quello!!!
Tanner

quello!!!
di che stai parlando?
----
Lawrence "Rhymes" Oluyede
rhy...@myself.com

 Sto programmando un giochino multiplayer con TServerSocket e

Scusatemi se dico la mia.
Effettivamente i client non conoscono gli altri 'giocatori', però il server
potrebbe informarli.
Puoi fare in modo che il server comunichi al client la posizione attuale nella
lista dei client connessi; un metodo è quello di generare una particolare
stringa
(o messaggio) tipo CHANGE_CONNECTION_POSITION#<posizione_connessione> che il 
server invia ogni qualvolta un client si disconnette. Questo non è difficile
da implementare; basta fare una iterazione sulle connesioni ancora attive
(ServerSocket1.Socket.ActiveConnections è il numero di connessioni attive lato
server).
Dalla parte client, si dovrà testare il contenuto della stringa ricevuta, e se
contiene il testo del messaggio (CHANGE_CONNECTION_POSITION), considerare
quello
che segue il '#' (o qualsiasi altro delimitatore) come posizione fra le
connessioni.
Ancora un ritocco:
non dimenticare che l'indirizzo IP del client è univoco nella rete (pena il
non collegamento del client stesso).
Il server potrebbe tenere una TStrings con tutte le connessioni attive, da
aggiornare
quando un client si connette/disconnette (nello stesso punto informi i client).
Nella TStrings metterei l'indirizzo IP dei client connessi (la posizione nella
TStrings
è la posizione di connessione).
Potrei serializzare il contenuto della TStrings, creare un nuovo messaggio 
CHANGE_ALL_CONNECTIONS#<lista_serializzata>, ed inviare tutte le connessioni
attive
nella parte <lista_serializzata>.
Spero possa esserti utile.
Ciao
-- 
Posted from 
r-bo043-2-1061.tin.it
 [213.45.41.42] 


 di che stai parlando?
Purtroppo molti newsreader infilano i messaggi
nei thread basandosi sul subject del messaggio
e non sui reference, per cui la catena dei messaggi
appare spezzata.  Certo e' che se Tanner non si 
inventasse un nuovo subject per i messaggi dello
stesso thread, farebbe tutti contenti.
Si sta parlando della questione dei socket.


Si sta parlando della questione dei socket.
Grazie.


 ha scritto nel messaggio
news:7jvr1u4m6ffugdf22...@4ax.com...


 ha scritto nel messaggio
news:5137c332a09143e18ad...@mygate.mailgate.org...


l'oggetto del reply succede qualcosa di male??
Ti rispondo io (cmq impara a quotare..).
Se cambi l'oggetto del reply automaticamente si forma un altro
thread..e se non specifichi nulla nel tuo messaggio ma attacchi a
parlare subito... non si capisce nulla..


 
-- 


 ho postato sotto il mio thread... 
No, hai postato tre messaggi diversi con tre subject diversi,
il che vuol dire, per molti newsreader (praticamente tutti), 
aprire un thread diverso e questo da' molto fastidio, perche'
non si sa di cosa stai parlando.


 ha scritto nel messaggio
news:036b7969db3aa08260f...@mygate.mailgate.org...
