/tgspu-whatevergame

A platform for playing games.

Primary LanguageJava

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.