Modell
Vår modell består av en klient och en server. Det är ett master-slave-system, då klienten endast förmedlar data till servern och ritar upp det som servern skickar tillbaka. Det finns ingen direkt kommunikation mellan de olika klienterna, utan allt går via servern. Detta gör att alla kommandon från klienten tolkas direkt i servern, och servern behöver därför inte utföra någon kontroll av informationen som klienterna skickar.
Det finns teoretiskt sett ingen övre begränsning i antalet klienter som kan vara ansluta till servern samtidigt. Självklart så kommer spelet att bli ospelbart, antingen på klientsidan eller serversidan, när antalet anslutna blir för stort. Det är dock upp till användarna att bestämma denna siffra. Informationen För att klinterna ska kunna rita ut vad som händer i spelet skickar servern information om linjerna vid varje uppdatering. Denna information består av alla punkter som linjerna definieras av, alltså “hörnen” för linjerna. Ingen information om linjerna sparas i klienten då hela ritytan ritas om varje gång. Programmet är utformat så för att kunna ha den snabba informationsöverföringen (som UDP ger) samtidigt som att vi inte förutsätter att alla paket levereras. Servern Servern har en tråd (SetupThread) som kontinuerligt väntar på inkommande TCP-anslutningar. Så fort en ny klient ansluter så skapas en ny tråd som håller koll på alla kommandon som skickas över TCP-anslutningen (HandleClientThread). Då skapas också objekt i servern för att representera den nytillkommne spelaren och dennes linjer. I Server-klassen så loopas gameplay() igenom så länge som servern är ansluten. Den läser in alla nuvarande positioner för spelarna och utvärderar ifall några kollisioner skett. Om alla spelarna har krockat med något så avslutas spelet och poäng delas ut. Den nya scoreboarden skickas ut till klienterna och efter det flyttar servern alla spelare till deras nya startpositioner. Lever fortfarande någon spelare så ser den till att skicka ut alla linjernas nuvarande “hörn” till alla klienter. Klienten Gameloop i klienten tar kontinuerligt emot uppdateringar av alla spelares positioner från servern. Vid varje uppdatering så ritas allt om på nytt då vi har valt att skicka informationen med UDP. Skulle någon felaktig information skulle komma från servern eller något paket försvinner, så är ändå allting korrekt vid nästa uppdatering. Det finns en specifik tråd i klienten som lyssnar efter knapptryck från tangentbordet och skickar dem över TCP till servern. Det finns också en tråd som lyssnar på TCP-kommandon från servern. I nuläget är det enda TCP-kommandot från servern till klienten uppdateringen av scoreboard:et som skickas i slutet av varje runda. |
Modellen illustrerad
|