Kuten Viltzu sanoi, SaveGame on on todella epäkäytännöllinen eikä sitä kannata käyttää missään isohkommassa projektissa. Ei varsinkaan sellaisessa, jossa cbNetwork on osallisena.naputtelija wrote:Toimiiko tuo coolbasicin SaveGame tämän kanssa ihan normaalisti? Eli ideana olisi se, että uuden clientin tullessa linjoille sen lähettämä ID tarkastetaan ja jos se on uusi, sama clientin ID tallennetaan serverin puolelle ja peli tallennetaan. Jos se on taas vanha, serveri antaa oman pelitilanteensa takaisin. Entä onko tälle minun idealleni jotain käytännöllisempää ratkaisua?
Mutta niin, periaate siitä että ID tallennettaisiin johonkin ja sitten sitä verrattaisiin myöhemmin tarkistettaessa että onko client sama, toimii vissiinkin vain silloin kun palvelinta eikä clienttiä ole sammutettu. Muistaakseni client saa ID:n palvelimelta silloin, kun se ensimmäistä kertaa yhdistää palvelimeen. Sitten client voi katkaista yhteyden ja yhdistää uudelleen sammuttamatta ohjelmaa ja saa saman ID:n uudelleen. Mutta mikäli client sammuttaa ohjelman, ei samaa ID:tä tule vaan palvelin tarjoaa clientille uuden ID:n.
Voin olla väärässäkin siitä, että uusi ID tarjottaisiin, jos client on sammutettu välissä. Voi olla, että palvelin antaa clientille aina saman ID:n, kunhan palvelinta ei ole clientin yhdistelyiden välissä sammuteltu. Se ainakin on varmaa, että ID:t eivät pysy samoina jos palvelin sammutetaan ja käynnistetään uudelleen.
Tuon idean voisi ehkä toteuttaa sillä tavalla, että teet palvelimen puolelle jokaiselle clientille omalla algoritmillasi jonkin tunnistamis-ID:n. Kun uusi, tuntematon client yhdistää palvelimelle, palvelin lähettää tuon tunnistus-ID:n clientille joka tallentaa sen. Kun client seuraavan kerran yhdistää palvelimelle, lähettää se yhdistyksen yhteydessä tuon tunnistus-ID:n ja palvelin huomaa sen olevan jo entuudestaan tunnettu. Tällöin palvelin voi lähettää pelin sen hetken tilanteen clientille.
Eli tilanne menisi näin:
Code: Select all
## Client yhdistää palvelimelle ensimmäistä kertaa ##
1. Client lähettää login-paketin
- login-paketti sisältää tyhjän tunnistus-ID:n
2. Palvelin vastaanottaa login-paketin
- huomaa että tunnistus-ID on tyhjä
3. Palvelin generoi uuden tunnistus-ID:n
4. Palvelin lähettää tavaraa
- generoitu tunnistus-ID
- pelin alun tilanne
5. Client vastaanottaa tavaraa
- tunnistus-ID
- pelin alun tilanne
6. Client tallentaa tunnistus-ID:n johonkin tiedostoon
7. Client pelaa...
....
....
8. Client katkaisee yhteyden. Lähettää lopetuspaketin.
9. Palvelin vastaanottaa lopetuspaketin.
10. Palvelin tallentaa clientin pelin tiedoston johonkin tiedostoon
ja/tai tallentaa sen muistiin.
11. Palvelin poistaa clientin listaltaan.
## Client yhdistää palvelimelle, jolla on jo ollut aikaisemmin ##
1. Client lukee tiedostosta oman tunnistus-ID:nsä
2. Client lähettää login-paketin
- login-paketti sisältää tunnistus-ID:n
3. Palvelin vastaanottaa login-paketin
- huomaa ettei tunnistus-ID ole tyhjä
4. Palvelin etsii, onko tunnistus-ID jo entuudestaan olemassa
- löytää vastaavuuden
5. Palvelin lukee muistista/tiedostosta clientin viimekertaisen pelitilanteen
6. Palvelin lähettää tavaraa
- jokin tieto siitä, että client on tuttu ja tulossa on pelitietoa
* Voi olla myös tunnistus-ID, joka on sama kuin clientilla,
jonka perusteella client huomaa että palvelin on todennut
pelaajan olevan tuttu. Näin client osaa odottaa pelitietoa.
- pelin tilanne silloin, kun client viimeksi lopetti
7. Client vastaanottaa tiedot
- huomaa että palvelin tunnisti pelaajan
- asettaa pelin tilanteen siihen, mitä palvelin antoi tietona
8. Client pelaa...
....
....
9. Client katkaisee yhteyden. Lähettää lopetuspaketin.
10. Palvelin vastaanottaa lopetuspaketin.
11. Palvelin tallentaa clientin pelin tiedoston johonkin tiedostoon
ja/tai tallentaa sen muistiin.
12. Palvelin poistaa clientin listaltaan.