Pie Piper

From ICO wiki
Jump to navigationJump to search

Media:Example.ogg

Dokumentatsioon

Arendusprotsessi kirjeldus

Projekti algus: 04.10.2016
Projekti lõpp: 08.01.2017

Meie projekt sai alguse erinevate ideede analüüsimisest. Kuna meie tiimis on 4 liiget siis oli ka 4 erinevat ideed, millest valisime ühe ehk “Instant Messengeri” loomise.

Rakenduse väljatöötamine algas valmislahenduste analüüsist. Kaalusime väga pikalt ehitada oma projekt juba varasema valmislahenduse peale, et siis juurde lisada keerukamat lisafunktsionaalsust. Mõne aja mööduses saime aga aru, et see ei ole kuigi viljakas tegevus ning keskendusime rakenduse 0-st ülesehitamisele. Kõige pealt joonistasime tahvli peale sketsi – millised võiksid olla kasutajapoolsed erinevad vaated. Seejärel disainisime ERD-skeemi, mille pealt oleks hea andmebaasi ehitada. Kuna meil varasemalt ei olnud kogemusi antud platvormiga siis otsustasime anda tuld ja kirjutada koodi. Tööprotsessi käigus tuli küll ette mitmeid muudatusi näiteks ERD-skeemi ja vaadete osas kuid selline jooksev arendus toimis meie meeskonna jaoks.

Meeskonna rollid arendusprotsessis

Uku-Mart Uprus – projektijuht, vaadete/ideede generatsioon, analüüsi koostamine, koodikirjutamine, silumine
Olari Pipenberg – koodikirjutamine kõige suuremas ulatuses ~80% + silumine, esialgse ERD-skeemi koostamine, analüüsi koostamine, dokumenteerimine.
Ardo Erik – vaadete/ideede generatsioon, koodikirjutamine, silumine
Markus-Villem Loigom – vaadete/ideede generatsioon, koodikirjutamine, silumine

Kasutajajuhend

Paigaldamine:

1. Laadida alla failid Pie_Piper_final.zip ja pie_piper_andmebaas.sql aadressilt http://enos.itcollege.ee/~opipenbe/C_dies/final/.

2. Pakkida lahti fail Pie_Piper_final.zip ja avada projekt Visual Studios.

3. Visual Studios luua uus andmebaas. Server name valida: (localdb)\MSSqlLocalDb . Database name valida chatdb .

4. pie_piper_andmebaas.sql skripti abil luua andmebaasi struktuur ja sysadm kasutaja.

5. Käivitada programm. Kui kõik on edukalt seadistatud, siis peaks õnnestuma sisselogimine kasutajatunnusega: sysadm ja parooliga: admin.

Lahenduse kirjeldus

Instant Messenger rakendusega on võimalik kasutajal ennast registreerida, sisse logida, lisada sõpru, vahetada sõnumeid globaalses jututoas ning vahetada sõnumeid lisatud sõprade vahel. Lisaks sellele on võimalik administraatori õigustes kasutajal hallata erinevaid kasutajaid (lukustada, aktiveerida, vahetada parooli ja saada teada lisainformatsiooni kasutaja kohta).

Instant Messengeri tehniline teostatavus põhineb suures osas andmebaasi kasutamisel. Läbi andmebaasi toimub nii sõnumite talletamine kui ka esitamine. Selleks, et koormus andmebaasile ei oleks nii marginaalne, siis kasutakse C# programmerimiskeele System.Timers’i teeki, et perioodiliselt kutsuda välja meetodeid, mis kontrollivad uusi muudatusi andmebaasis. Kui andmetes on toimunud muudatus, siis uuendatakse ka kasutajaliidest.

Registreerimine: Kasutaja registreerimisel kontrollitakse ega ei ole varasemalt sama kasutajatunnuse alusel kasutajat registreeritud. Lisaks kontrollitakse kas sisestatud paroolid kattuvad ning kas emaili aadress vastab heale tavale nagu midagi@midagi.midagi.

Sisselogimine: Kasutaja sisselogimisel kontrollitakse kas antud kasutajatunnus kuulub andmebaasi ning kas sisestatud parool on õige vastavalt siis parooliräsi võrdlusele andmebaasis.

Mainvaade: Main vaates on võimalik kasutajal saata sõnumeid globaal chatroomi. Globaalset chatroomi hoitakse jooksvalt ajakohasena. Lisaks on võimalik lisada sõpru. Lisatud sõpru kuvatakse samas aknas. Sõbra peale klikkimisel alustatakse privaatvestlust.

Sõbravaade: Sõbravaates on võimalik vestelda sõbraga. Samuti kuvatakse informatsiooni kui sõber on sõnumit näinud.

Adminvaade: Kuvatakse registreeritud kasutajaid. Võimalus registreeritud kasutajaid lukustada, lahti teha, parooli muuta. Võimalik edastada sõnumit globaalchati. Võimalus minna kasutajapoolsesse main vaatesse.

Protokoll

  • 04.10.2016 - välja pakutud 4. ideest hääletasime üksmeelselt IM rakenduse tegemise poolt.
  • 13.10.2016 - projektijuht Uku-Mart Uprus.
  • 15.10.2016 - TFS võetud kasutusele kõigi tiimiliikmete poolt, õppejõule kutse saadetud, tiimiga esimese lahendusega tutvumine.
  • 21.10.2016 - Disainiti algne andmebaasi mudel rakenduse jaoks, otsustati kasutada projekti toetava osana olemasolevat WCF projekti koodi, arutati rakenduse funktsionaalsuse kohta.
  • 24.10.2016 - Loodi rakenduse põhi, lisati 2 andmebaasi tabelit, loodi registreerimise väljad.
  • 25.10.2016 - Loodi sisselogimise aken, kasutaja aken (sõbralist, sõprade lisamine).
  • 26.10.2016 - Rakenduse põhja jagamine loogilistesse kihtidesse (Service loomine).
  • 27.10.2016 - Rakenduse põhja jagamine loogilistesse kihtidesse (BOd), kolmanda tabeli loomine.
  • 29.10.2016 - Koodi silumine
  • 30.10.2016 - Sõbralisti kuvamine, sõprade lisamine
  • 31.10.2016 - Koodi silumine
  • 01.11.2016 - WCF temaatikaga tutvumine
  • 08.11.2016 - Arutati selle üle kuidas projektiga edasi minna. Tekkis kaks võimalust: 1) kasutada projekti backendina andmebaasi 2) kasutada projekti backendina WCF tehnoloogiat.
  • 09.11.2016 - Saadi tööle esialgne chatimise funktsionaalsus. Loodi uus andmebaasi tabel Friendship_Message, et võimaldada sõprade vahelist suhtlust.
  • 15.11.2016 - Koodi silumine, saadi tööle sõbralist, muude funktsionaalsuste implementeerimine
  • 22.11.2016 - Lisati funktsionaalsus chatida sõpradega, pop-up aken sõbrakutse kohta.
  • 27.11.2016 - Unikaalsed sõprade vahelised vestlused (parandus).
  • 29.11.2016 - Tehtud admin vaade ja admin sisselogimine
  • 06.12.2016 - Korralike ViewModelite sisseviiimine
  • 13.12.2016 - Admin view kuvab nüüd kasutajat valides tema kohta infot ja parooli vahetus ka töötab
  • 14.12.2016 - Admin Window töötab täielikult ja sisselogimisel kontrollitakse, kas kasutaja on ka tegelikult aktiivne
  • 18.12.2016 - Koodi silumine
  • 03.01.2017 - ViewModelite täiendamine
  • 05.01.2017 - Bindigute loomine, koodi struktuuri muudatused
  • 06.01.2017 - Kui peachatis sõnumi peale vajutada, siis lisatakse nimi add friend kasti. Sõpru on võimalik sõbralistis eemaldada vajutades parema klõpsuga nime peale.
  • 07.01.2017 - Jõudluse suurendamine, disainiparandused, AdminView aknas kasutaja postituste nägemine.
  • 08.01.2017 - Disainiparandused, dokumenteerimine.

Idee

Idee on luua IM (Instant Messenger) rakendus nagu seda on 'Windows Live Messenger'. Võimalik peab olema uusi kasutajaid registreerida, kasutajatega sisse logida ning kasutajate vahel sõnumeid vahetada. Tegemist on klient-server lahendusega, kus server autendib, autoriseerib ning vahendab kasutajate vahelist suhtlust.

Analüüs

Projekti ülesehitus

  • Kogu projekt on üles-ehitatud selliselt, et ta toimiks lokaalmasinas. Järgime õppejõu nõuannet kasutada rakenduse loomisel "Andmebaas << Äriloogika << Rakendus" loogikat. Mis on selle eesmärk? Eesmärk on see, et kood oleks hallatav ja vajaduse korral skaleeruv.

Mida see endas sisaldab?

  • Projekt sisaldab endas WPF-rakendust, konsoolirakendust ja andmebaasi. WPF-rakendus on mõeldud lõppkasutajatele toimingute tegemiseks. Andmebaasis hoitakse informatsioon kasutajate ja sõnumite kohta. Loome kohaliku andmebaasi, mille nimeks saab "chatdb". Andmebaasi on planeeritud luua ~9 tabelit, mis peaks tagama rakenduse täieliku funktsionaalsuse. Andmebaasimudel võiks välja näha midagi sellist:

Olemite tähendused:

  1. User - Kõiki tegevused rakenduses tehakse kindlaksmääratud kasutajate poolt. Registreerimise kaudu saab andmebaasi tabelisse luua uue kasutaja. Enne seda toimub C# koodis kontroll, et veenduda väljade vastamises nõuetele.
  2. Friendship - Olem, mis hoiab endas sõbrasuhteid. Ideaal situatsioonis on õige sõbrasuhe kahepoolne ehk mõlemad kasutajad on üksteist sõbraks lisanud.
  3. Friendship_message - Hoiab endas sõbrale saadetud sõnumeid. Ära on määratud sõnumi saatja ja sõpruse info.
  4. Chatroom_message - Sõnumeid saab saata ka ainult jututuppa. Ära on määratud sõnumi saatja ja jututoa info.
  5. User_group - Võimalik määrata kasutajaid gruppidesse. See on vajalik õiguste lihtsaks määramiseks. Erinevad grupid omavad erinevaid õigusi.
  6. User_group_right - Määrab kasutaja õigused erinevates jututubades.
  7. Chatroom - Määrab milline kasutaja on millises jututoas.
  8. Chatroom_group - Seob jutotoa ja -teema.
  9. Topic - Jututeema jaoks.

Koodipoolne struktuur:
ChatRoom
ChatRoom.BusinessObject (Kasutaja info)
ChatRoom.Domain (Vahekiht andmebaasiga)
ChatRoom.Service (Põhiloogika)
ChatRoom.View (Vaated/kujundus)

Mida tavakasutaja sellega teha saaks?

  • Tavakasutajal peab olema võimalus rakenduses registreerida ja sisse logida. Sisselogimis järgselt peab olema võimalus lisada/eemaldada sõpru, valida jututuba ning teostada sõnumivahetust antud konkreetses jututoas.

Milliste osade realiseerimine võib osutuda problemaatiliseks?

  • Sõnumivahetuse teostamine. Iseenesest sõnumite pärimine andmebaasist ning kasutajale nende kuvamine pole probleem. Küll on aga probleem sõnumite esitamisega reaalajas. Sõnumite vahetu esitamisega on vaja tõenäoliselt rakendada WCF temaatikat, mis nõuab lisauurimist.

Tööjaotus

  • Koodi kirjutatakse jooksvalt kõigi tiimiliikmete poolt koos. Peale prototüübi valmimist otsustame, kes mis osa hakkab lihvima.

Must have

  • Kasutajate registreerimine (sh vigade kontroll, näiteks lühike parool, kasutaja eksisteerib)
  • Kasutaja autentimine/autoriseerimine
  • Kasutajarollid (tavakasutaja, moderaator, admin)
  • Sõprade lisamine, sõprade nimekiri
  • Uute jututubade loomine
  • Suhtlemine jututubades
  • Kasutajate haldus (kick, ban)

Nice to have

  • Rakenduse osasid (server/klient) on võimalik jooksutada erinevates masinates
  • Sõnumite tsenseerimine
  • Mugav kasutajakogemus
  • Moodne disain

Prototüüp

Link meie C_diesi prototüübile asub siin

Tehnoloogia

Kasutatav tehnoloogia:

  • C#
  • XAML
  • WPF
  • WCF?