Web Services per gioco online

giovedì 02 luglio 2009 - 18.39

opensw Profilo | Newbie

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

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

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
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 !
Copyright © dotNetHell.it 2002-2024
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5