Whatever Game ============= About A gaming platform with two games; Pew Wep and 5Pad. This is a school project for "Datavetenskap I - Programvarukonstruktion [2011]". Authors Hannes Landstedt Simon Landstedt Anders Wik Algot Unknown To do Thread safe / make sure we synchronize where proper Graceful shut down of client and server Make sure all threads die (perhaps demonize?) Shouldn't need to cast content in receive methods. Resources Threads : http://download.oracle.com/javase/1,5.0/docs/api/java/lang/Thread.State.html : http://www.janeg.ca/scjp/threads/state.html : http://www.roseindia.net/java/thread/index.shtml : http://www.roseindia.net/java/thread/life-cycle-of-threads.shtml : http://www.roseindia.net/java/thread/thread-creation.shtml Structure (in Swedish, needed when turning in project) """ - Struktur för källkoden /whatevergame - Server och Client main metoderna /whatevergame/Server - här finns main-metoden för servern. porten som används för kommunkation kan ställas in här (inställd på 3000) /whatevergame/Client - här finns main-metoden för klienten. porten som används för kommunkation kan ställas in här (inställd på 3000) /whatevergame/communication - saker som har med kommunkationen att göra. används av både server och klient /whatevergame/communication/Connection - en anslutning, innehåller inre klasserna 'Sender' och 'Receiver' /whatevergame/communication/DisconnectionHandler - ett interface som 'Connection' kräver för att ta hand om avbrutna anslutningar /whatevergame/server - specifikt för servern /whatevergame/server/Server - kontroller klass för servern. startar alla services. här i finns även databasinställningar /whatevergame/server/Client - en klient sett ur serverns ögon. extendar 'communication/connection'. har en referens till 'User' då han är inloggad /whatevergame/server/User - en registrerad användare (hämtar info. ifrån databasen) /whatevergame/server/ConnectionCreator - står och väntar efter inkommade anslutningar. skapar Client-instanser /whatevergame/server/MySqlDatabase - tar hand om anslutningen till en MySQL-databas /whatevergame/client - specifikt för klienten /whatevergame/client/Client - kontrollklass för klienten. ansluter till en server och startar login services /whatevergame/services - här finns alla tjänster i enskilda paket. innehåller också ramverksfilerna /whatevergame/services/ServerService - abstrakt klass som serverdelen av en service ska implementera /whatevergame/services/ClientService - abstrakt klass som klientdelen av en service ska implementera /whatevergame/services/Service - gemensamnt hos både klient- och serverservicar innehåller också en lista på alla services tillsammans med ett id (bör igentligen vara dynamiskt) /whatevergame/services/ServiceProvider - en simpel kollektion av services /whatevergame/services/Content - informationen som skickas mellan klient och server /whatevergame/services/Package - en wrapper runt ett 'Content'. innehåller ett seriviceId för att 'Connection.Receiver' skall kunna derigera 'Content' till rätt service /whatevergame/services/<ServiceNamn>/ - kan se ut hursomhälst men våra services håller generellt liknande struktur som själva 'whatevergame' paketet. gemensamma saker, dvs. 'Content'-klasser samt eventuellt annat, direkt i paketet, specifikt för servern i ett 'server'-subpaket och speficikt för klienten i ett 'client'-subpaket. varje service ska extenda en 'ServerService' och 'ClientService'. - 'src' och 'lib' mapparna måste finnas i CLASSPATH - 'data' mappen måste ligga i mappen där programmet startas ifrån """ Kriterier Många spelinstanser Ett spel Flera spela (VG) Turordningsbaserat Tydligt spelavslut med poängresultat Möjlighet till returmatch (VG) Tappat kommunikation Tidigt avslut From the .pdf Funktioner som ska implementeras av servern är följande: Servern ska minst ge följande service: Låta spelare registrera sig på spelservern (användarnamn, lösenord). Detta ska endast ske en gång per spelare. Medge inloggning respektive utloggning av spelare. Leverera highscorelista till spel. Leverera köinformation till spel, dvs spelare som väntar på att ett spel ska starta. Inloggad spelare ska kunna ställa sig i kö sig för att spela ett spel. Inloggad spelare ska kunna lämna kön för att spela ett spel Inloggad spelare ska kunna få personlig spelstatistik När antalet köande spelare för ett spel är tillräckligt i antal ska servern starta och administrera spelet. Servern ska kunna hantera många spel och spelare samtidigt. En lösning är att skapa en tråd för varje spelare som ansluter och troligen en tråd per spel som spelas. Spelarnas resultat av spel ska lagras i en databas. Funktioner som ska implementeras av klienten är följande: Användaren ska kunna logga in. Efter inloggning ska klienten presentera aktuella spel. Presentationen kan bestå av en bild över spelet, spelets namn, aktuell kösituation och highscorelista. Highscorelistan bör kunna visa total highscore (alla spelare) och personlig highscore. Efter inloggning ska användaren kunna välja att spela ett spel. Klienten väntar efter detta val på att spelet ska starta. Kösituationen bör visas under väntan. Användaren ska kunna välja att lämna kön för att spela spelet. Användaren ska kunna logga ut. Krav på spelen i systemet: Det ska vara minst två spelbara spel i systemet. Spelen ska vara turordningsbaserade Spelen ska ha ett tydligt avslut med poängresultat eller motsvarande för varje spelare. Det ska finnas möjlighet för spelarna att gå direkt till en ny omgång med samma deltagare. Dokumentation Följande dokument ska levereras den 29/5 i filen systemmanual.pdf: Systemmanual Innehållsförteckning Dokumentation av server-sidan omfattande: Övergripande klassdiagram över klasserna på serversidan. Beskrivning av klasserna avseende deras ansvar i systemet. Källkod. Varje ny klass ska börja på ny sida. Ordna klasserna på lämpligt sätt. Dokumentation av klient-sidan omfattande: Övergripande klassdiagram. Samtliga klasser på klientsidan ska ingå. Beskrivning av klasserna avseende deras ansvar i systemet. Källkod. Varje ny klass ska börja på ny sida. Ordna klasserna på lämpligt sätt. Dokumentation av vardera spel omfattande: Övergripande klassdiagram. Samtliga klasser som i spelet ska ingå. Beskrivning av klasserna avseende deras ansvar i spelet. Källkod. Varje ny klass ska börja på ny sida. Ordna klasserna på lämpligt sätt.