Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
Web Services, XML
Web Services per gioco online
giovedì 02 luglio 2009 - 18.39
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
opensw
Profilo
| Newbie
5
messaggi | Data Invio:
gio 2 lug 2009 - 18:39
Ciao a tutti,
premetto che sono un novizio nell'ambitio dei web services...
Sto realizzando un giochino (remake di bomberman) con il framework XNA Game Studio (la parte grafica finita, motore fisico finito, interazioni con l'ambiente finito... quindi il giochino è completo dal punto di vista grafico). Volevo usare un web services per gestire il gioco in rete, precisamene ho implementato un semplice meccanismo di autenticazione basato su SOAP header senza sessione (ogni volta il client deve inviare le credenziali) e altre cose che non centrano con il dubbio che mi affligge da questa mattina...
Se ho una classe che estende System.Web.Services.WebService, ad esempio con una sola variabile d'istanza e un solo metodo (WebMethod) fatta cosi':
...
private int count;
[WebMethod]
public int Demo()
{
count++;
return count;
}
...
1) Se il client istanza l'oggetto e invoca il metodo restituisce sempre ed esclusivamente 0, mi chiedo perché e come posso fare per ottenere il risultato voluto ossia che lo stato interno sia aggiornato (in questo caso la variabile count la vorrei vedere incrementata ogni vola che invoco il metodo)?
2) Poi se ho due client ognuno dei quali istanza un singolo oggetto dalla classe remota (quindi per un totale di 2 oggetti remoti sul server), come faccio a scambiare le informazioni tra questi due oggetti?
Vi ringrazio per l'aiuto!!!!!
Jeremy
Profilo
| Guru
1.527
messaggi | Data Invio:
ven 3 lug 2009 - 00:50
Ciao Paolo.
>1) Se il client istanza l'oggetto e invoca il metodo restituisce sempre ed esclusivamente 0, mi chiedo perché e come >posso fare per ottenere il risultato voluto ossia che lo stato interno sia aggiornato (in questo caso la variabile count la >vorrei vedere incrementata ogni vola che invoco il metodo)?
Ad ogni chiamata del WebMethod, viene creata una nuova istanza del proxy, pertanto, la variabile sarà sempre nuova .... se vuoi vederla incrementare, lasciando perdere diversi accrocchi che si potrebbero adottare, devi dichiarala come condivisa (Shared in VB, Static in c#)
>2) Poi se ho due client ognuno dei quali istanza un singolo oggetto dalla classe remota (quindi per un totale di 2 >oggetti remoti sul server), come faccio a scambiare le informazioni tra questi due oggetti?
Non conosco bene lo scenario, quindi non capisco bene cosa intendi fare, ma dovresti risolvi nello stesso modo che ti ho indicato sopra.
Eventualmente, rimango a disposizione per ulteriori info.
facci sapere...
Ciao
opensw
Profilo
| Newbie
5
messaggi | Data Invio:
ven 3 lug 2009 - 03:03
Ciao Jeremy,
ti ringrazio per l'aiuto!!!!! Il primo punto l'ho risolto come suggerito da te (con static dato che uso C#), il secondo quindi si risolve alla stessa maniera; per completezza ti riporto esattamente cosa voglio fare:
Ci possono essere al massimo 4 client, ogni client deve autenticarsi sul web service, dopo l'autenticazione e l'attesa degli altri client il web service invia ai client la mappa completa del gioco (con la posizione degli oggetti iniziali e la posizione dei personaggi). Ogni client ovviamente può pilotare solo un personaggio, ogni client deve inviare al web service la posizione del proprio personaggio + suo stato (cioè se è fermo o sta correndo verso una certa direzione, se è morto...), la posizione iniziale e stato iniziale degli oggetti lanciti o lasciati cadere dal personaggio; a questo punto il web service fornisce tutte queste informazioni ai client in modo da poter sincronizzare i gameplay. Per il momento quello che funziona è: gestione grafica, motore fisico per le interazioni con l'ambiente, singleplayer; mi resta da completare il gioco per la modalità multiplayer sfruttando il web service.
Quindi in conclusione se ho capito, dovrebbe funzionare cosi'
- Client quando invoca per la prima volta l'oggetto remoto viene creata un'istanza sul server;
- Client per accedere all'oggetto remoto istanza un oggetto PROXY che provede alla comunicazione con lo STUB (tramite Http SOAP);
- Quindi se ci sono piu' client che vogliono accedere all'oggetto remoto, utilizzano la propria istanza PROXY (questo significa che sul server c'e' sempre un solo oggetto remoto!!!!! questo non l'avevo capito, ora mi spiego perché certe cose non mi funzionavano... pensavo che ci fosse un oggetto remoto per ogni client...).
Ti ringrazio veramente tantissimo per l'aiuto
!!!!!
Ciao
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !