|
Kurssi: Tietojenkäsittelyn ammattitutkinto / Ohjelmointi |
Koulu: Turun AKK |
|
|
Tekijä: Petri Kultanen |
|
|
|
Projektin nimi: C&Vserver |
|
|
|
Dokumentin tila: Valmis |
|
|
|
Aloitettu:5.3.2004 |
Muokattu: 25.5.2004 |
Tulostettu:25.5.2004 |
2.2 Tietoliikenne arkkitehtuuri
3.1.5 Keskustelun toimintakehys
3.2.2 settings.dat Palvelimen asetukset
3.2.3 VisitorsBook.bin Vieraskirja
3.3.2 Lisäys olemassa oleviin ikkunoihin.
Tässä dokumentissa on esitelty asioita joita tarvitaan sovelluksen päivittämiseen, ja toimintojen lisäämiseen.
Lisäksi on selitetty palvelimen toimintaa syvällisemmin kuin suunnitteludokumentissa.
Keskustelijan tunnistenumero:
Keskustelijan kirjautuessa selaimellaan palvelimen keskustelualueelle, palvelin generoi yksilöllisen numeron, jolla keskustelijat tunnistetaan palvelimella. Tunnistenumero upotetaan html-sivun lomakkeelle, ja se palautuu aina takaisin palvelimelle, kun keskustelija lähettää viestin tai käyttää muita toimintoja. Tunnistenumeroa käytetään myös yksilöimään keskustelijan lähettämän yksityisviestin vastaanottaja.
Viestikehys:
Keskustelualueella selaimessa näkyvä alempi kehys johon ilmestyy kaikki keskusteluun lähetetyt viestit, sekä palvelimen ilmoitukset.
Toimintakehys:
Keskustelualueella selaimessa näkyvä ylempi kehys, jossa on viestin lähettämiseen tarkoitettu tekstikenttä, sekä nappeja eri toimintoja varten.
Sovellus jakaantuu kahteen osaan. Käyttöliittymään ja palvelimeen. Seuraavaksi yhteenveto kuvaus palvelimen toiminnasta, ja käyttöliittymän arkkitehtuurista.
Sovellus käynnistyy Server luokan main metodista. Ensin tutkitaan halutaanko käynnistää käyttöliittymä. Se käynnistetään automaattisesi ellei sitä kielletä antamalla sovellukselle parametriksi ”noui”.
Main metodi jää kuuntelemaan annettua porttia ikuiseen silmukkaan, aina kun porttiin otetaan tcp-yhteys, luodaan uusi Connection luokanolio täyttämään yhteyspyynnön tarpeet. Nämä luokat ovat säikeitä, joten palvelin pystyy palvelemaan monta yhteyttä samanaikaisesti.
Connection-säie käynnistyy run-metodista, jossa ensin tarkistetaan ettei tulevan yhteydenosoite ole IP-kieltolistalla. Tulevan yhteyden oletetaan olevan vähintään HTTP 1.0 protokollan mukainen, ja palvelin tunnistaa siitäkin vain get- ja post-metodit. Ensimmäisellä rivillä on tieto siitä mitä sivua asiakas oli hakemassa. Jos selaimen osoiteriville on kirjoitettu osoite, tai on seurattu jotain hyperlinkkiä, niin metodina on silloin get. Jos taas selaimessa on painettu, jonkin lomakkeen lähetä nappia, niin pyyntö tulee palvelimelle post-metodin kautta.
Palvelimella on vain muutama sivu joita asiakas voi katsoa, ja kirjoittaa osoiteriville, muut yritykset vievät aina tervetuloa sivulle. Run-metodissa tarkistetaan seuraavaksi oliko pyyntönä get vai post ja mitä sivua oli pyydetty. Get-metodilla kaikki tiedot on jo ensimmäisellä rivillä, mutta post-metodin tietoja palvelin joutuu purkamaan viestistä enemmän.
Get viestit:
Näistä viesteistä luetaan mitä sivua pyydettiin ja sendReply-metodilla haetaan HTMLStrings luokalta oikean sivun html-koodi ja lähetetään se takaisin selaimelle. Yhteys suljetaan saman tien kun viesti on lähetetty.
Ainoana poikkeuksena on keskustelun viestikehyksen pyytäminen, joka tekee LiveConnection olion, joka jättää yhteyden auki ja odotetaan että se suljetaan, käyttäjän tai palvelimen toimesta. Kun yhteys katkeaa tai se katkaistaan, stayListening-metodi kutsuu Users luokan removeUser-metodia, joka taas kutsuu tämän(LiveConnection) luokan LogOut-metodia. Joka kutsuu vielä closeConnection- metodia, ja näin on yhteys loppunut.
Post viestit:
Post viestit käsitellään res- alkuisten metodien avulla. Seuraavaksi lyhyt kuvaus näistä. Liitteenä on malli HTTP-yhteyden viestistä, jossa näkyy miten tiedot on viestin sisään pakattu.
resFrames:
Tätä kutsutaan kun käyttäjä on lähettänyt keskusteluun kirjautumis-sivulta tietonsa palvelimen käsiteltäväksi. Lomakkeen tiedot tarkistetaan ja luetaan Users luokalle talteen. Muille keskustelijoille lähetetään ilmoitus uudesta käyttäjästä, ja asiakkaan selaimelle lähetetään html-sivu joka avaa toiminta- ja viestikehyksen.
resChatMessage
Tätä kutsutaan kun keskustelija on painanut toimintakehyksen lähetä viesti nappia. Yhteyden mukana tulee tiedot kenelle viesti oli tarkoitettu, vai oliko se kaikille. Kun itse keskusteluviesti on purettu, käsitellään se receiveMessage-metodissa. Tämä metodi tarkistaa viestin oikeellisuuden ja välittää sen edelleen MessageHandler luokan sendMessages metodille, joka lähettää sen niiden keskustelijoiden selainten viesti kehykseen, joille viesti oli tarkoitettu. Lähetys tapahtuu Users luokalta saatavilla LiveConnection olioiden sendmsg-metodeilla. Lopuksi selaimelle lähetetään takaisin päivitetty toimintakehys ja yhteys katkaistaan.
resChatSettings
Tätä kutsutaan kun keskustelija on painanut toimintakehyksen jotain nappia.
Poistu = Kutsuu Users luokan removeUser-metodia, ja lähettää selaimelle sivun jossa on linkki takaisin kirjautumis-sivulle.
Päivitä = Lähettää takaisin päivitetyt toimintakehyksen.
Kutsu ylläpito = Kutsuu Server luokan callAdmin-metodia, ja lähettää keskustelijalle viestin onko ylläpito tavattavissa
Listaa keskustelijat = Kutsuu MessageHandler luokan sendUserInfo-metodia, joka lähettää keskustelijalle listan muista paikalla olevista keskustelijoista.
Kaikkien (Paitsi poistu) toimintojen jälkeen lähetetään selaimelle takaisin päivitetty toimintakehys.
resVbookEntry
Tätä kutsutaan kun asiakas on painanut vieraskirjasivulla olevaa ”lähetä viesti” nappia. Lomakkeen tiedot tarkistetaan ja lisätään VisitorsBook luokkaan addEntry-metodilla. Asiakkaalle lähetetään takaisin viesti onnistuiko viestin jättäminen.
Jokaiselle käyttöliittymänikkunalle on oma luokka. Pääikkunana toimii AdminMainFrame. Tämä luokka luodaan Server luokassa, mikäli sitä ei erikseen kielletä, sovellusta käynnistettäessä. Sulkemalla pääikkuna, voidaan sulkea koko palvelin, tai vain sulkea käyttöliittymäikkunat viemästä muistia. AdminMainFrame sisältää valikot, joista pääsee käsiksi kaikkiin käyttöliittymäntoimintoihin. Tämä luokka myös luo kaikki muut ikkunaluokat. Käyttöliittymä on tehty Swing komponenteilla. Komponenttien sijoitus eli layout suoritetaan rakentajassa, ja tapahtumia varten jokaisella ikkunaluokalla on oma sisäluokka, joka liitetään sitä tarvitseviin komponentteihin. Syvällisemmin käyttöliittymän toiminnasta ei tässä dokumentissa kerrota, koska se noudattaa java swing ohjelmoinnin perusperiaatteita, jotka ylläpitäjän on osattava entuudestaan.
Sovellus käyttää HTTP mukaista tietoliikenne protokollaa TCP/IP yhteyden kautta.
Tässä dokumentissa ei ole selvitetty koko HTTP-protokollaa, vain se osuus jota sovellus siitä hyödyntää.
Palvelin käyttää ”ISO-8859-1” eli Iso latin1 merkistöä, jotta skandinaaviset merkit näkyisivät oikein.
Palvelin kuuntelee asetuksissa määriteltyä porttia ja odottaa tulevaa HTTP-yhteyttä selaimelta. Yhteys tunnistetaan ensimmäisellä rivillä olevan pyynnön perusteella. Ensimmäinen rivi voi sisältää joko get- tai post-metodin. Kaikki muut pyynnöt palvelin ohittaa käsittelemättä. Jos pyyntö oli get-metodilla toteutettu, niin pyydettäväsivu tai toiminto on myös ensimmäisellä rivillä, joten viestin kaikki muut rivit jätetään huomioimatta. Post-metodilla otetaan mukaan myös viestirungosta kaikki annetut muuttujien arvot.
Esimerkki keskustelijan kirjautumisesta keskusteluun.
Enismmäisellä rivillä on pyyntö.
Viestin rungossa on peräkkäin age, sex sekä alias muuttujien arvot, jotka ovat tulleet html-lomakkeen kentistä.
Vain lihavoidulla tekstiä sisältävät rivit luetaan. Ja niistä etsitään indexOf() metodilla halutut tiedot.

Muuttujat on luettava juuri siinä järjestyksessä, jossa ne on esitelty html-sivun lomakkeella. Lomakkeiden koodi on nähtävillä HTMLStrings luokassa.
Toinen esimerkki on get metodista, jossa muuttujat puretaan ensimmäiseltä pyyntöriviltä.
Tämä ei ole get-metodin tavallinen käyttötapa, ja siksi se esitellään tässä erikseen.
Muuttuja on koodattu osoitteen sisään, eikä sitä ole annettu html-lomakkeelta, kuten normaalisti tehdään.
Tunnistenumero on määritetty loppumaan & merkkiin.
Purkamiseen käytetään Connection.parseID() metodia.

Palvelin lähettää takaisin vastauksen joka alkaa status koodirivillä,ollen muotoa
HTTP/1.0 201 OK
Tämän jälkeen tulee html-sivu, jota asiakas pyysi.
Sivun lähetyksen jälkeen yhteys katkaistaan. Palvelin ei tue HTTP1.1 protokollassa määriteltyä toimintoa jolla voisi samalla yhteydellä käsitellä useampia pyyntöjä.
Tässä luvussa on ohjeita ja ideoita uusien ominaisuuksien lisäämiseksi palvelimeen.
Kun palvelimeen lisätään uusia asetuksia, on lähdekoodiin tehtävä muutoksia kolmeen paikkaan.
1 ServerSettings luokkaan
Tee get- ja set-metodit uudelle ominaisuudelle ja lisää loadSettings ja saveSettings metodeihin tiedoston käsittelyt. Ks Luku 3.2.2
2 ServerSettingsFrame luokkaan
Lisää näkyvät komponentit ikkunaan. Lisää tiedon käsittely applySettings ja receiveSettings metodeihin.
3 paikkaan johon asetus vaikuttaa.
Voit kerätä mistä tahansa ohjelmakoodin kohdasta tietoja talteen lokitietoihin.
Jos käytät tätä toimintoa virheiden jäljittämiseen, niin kirjoita jokaisen virheilmoituksen eteen luokka ja metodi jossa virhe tapahtui.
Log luokka lisää kellonajan ja päivämäärän automaattisesti.
Jos lisäät vieraskirjaan uusia ominaisuuksia niin vieraskirjantiedostoon ei tarvitse tehdä muutoksia, koska se tallennetaan sarjoitettuna oliona. Sen sijaan joudut poistamaan kaikki aiemmat vieraskirjatiedostot levyltä koska ne eivät ole muutosten jälkeen enää yhteensopivia uusien kanssa.
Uusien vieraskirja merkintöjen lisääminen on siinä mielessä työlästä että joudut suunnittelemaan uusille ominaisuuksille käyttöliittymäikkunaan uudet paikat.
Lisäksi muutoksia pitää tehdä seuraaviin luokkiin:
VisitorsBook (addEntry,getEntrysinStrVector)
VBookEntry (Get ja set metodit uusille ominaisuuksille)
VBookFrame (Uudet käyttöliittymä komponentit)
Connection (resVBookEntry)
Keskustelijoilta voidaan sovelluksen tässä versiossa kysyä Nimimerkkiä, ikää ja sukupuolta. Lisä tietoja joita keskustelijalta voisi kysyä olisi vaikka asuin kaupunki tai harrastukset. Näin muut keskustelijat voisivat valita paremmin keskustelukumppaninsa.
Tietojen lisääminen alkaa muuttamalla lomakkeiden html-koodia HTMLStrings luokasta. Sen jälkeen pitää Connection luokasta muuttaa metodin resFrames sisältöä.
Uudet tiedot lisätään myös User luokkaan ja MessageHandler luokaan, jossa muodostetaan muille käyttäjille näytettävä keksiutelijoiden tietojen taulukko. Lisäksi muutoksia pitää tehdä OnlineUserFrame luokkaan jos palvelimen ylläpitäjä haluaa nähdä nämä tiedot myös.
Toimintakehykseen voidaan lisätä uusia painikkeita jotka tekevät uusia asioita, esimerkiksi sellainen voisi olla vaikka toiminto jolla keskustelija voisi nopeasti ilmoittaa käyvänsä esimerkiksi jääkaapilla ja olevansa hetken pois keskustelusta.
Muutoksia pitäisi tehdä samoihin paikkoihin kuin edellisessäkin kohdassa, eli HTMLStrings ja Connection luokkaan. Lisäksi toiminnalle olisi kirjoitettava koodi siinne mihin se vaikuttaa. Edellä mainittu toiminto kirjoitettaisiin LiveConnection luokkaan.
Palvelin ei tällä hetkellä kerää mitään statistiikka tietoja, ja näin ollen koodiin pitäisi kirjoittaa tälle toiminnolle ihan oma luokka. Tietoja voisi kerätä mistä kohtaa sovellusta tahansa ja uusi luokka keräisi näitä tietoja ja tallentaisi ne levylle, Lisäksi tarvittaisiin uusi käyttöliittymä ikkuna josta tietoja voisi seurata.
Kerättäviä statistiikka tietoja voisi olla vaikka käyneiden keskustelijoiden määrä, tai kuinka monta vieraskirja viestiä kuukaudessa palvelimelle tulee.
Tietokantana sovelluksessa käytetään tiedostoja, jotka on tallennettu palvelimen asennushakemistoon.
Tätä tiedostoa käytetään Log luokassa.
Tiedostoon lisätään rivi kerrallaan tietoa, joten voit luoda log luokkaan uusia metodeita, jotka lisäävät tietoja tiedostoon.
Tiedoston tarkka määrittely on esitelty suunnitteludokumentissa.
Jos palvelimeen lisätään uusia asetuksia, on ne myös tallennettava asetustiedostoon.
Tiedoilla on määrätty järjestys joka on selvitetty tarkemmin suunnitteludokumentissa.
Uudet asetukset tulee lisätä tallennettavaksi tiedoston loppuun.
Muista päivittää tarvittavat dokumetit.
Vieraskirja merkinnät tallennetaan ”visitorsbook.bin” tiedostoon. Se on binääritiedosto, jota ei pysty muokkaamaan tekstieditorilla. Tiedostoon kirjoitetaan Vector-olio joka sisältää VBookEntry luokan olioita. Tämä on mahdollista Java-kielien tukemalla luokkien sarjoittamisella. Aina kun VBookEntry luokkaa muutetaan, on kaikki visitorsbook.bin tiedostot poistettava, koska yhteensopivuus vanhaan versioon menetetään.
Tämän tiedoston tallennut tai lataus metodeihin sinun ei tarvitse tehdä mitään muutoksia. Eli kun lisäät vieraskirjaan jotain ominaisuuksia niin ne tallentuvat automaattisesti VBookEntry-olion mukana.
Käyttöliittymän uudet ominaisuudet tulisi lisätä omiin valikko kohtiinsa AdminMainFrameen.
Tee uusi luokka joka periytyy JFrame luokasta.
Lisää AdminMainFramen ActionEvent luokkaan valikko komento, joka avaa tekemäsi ikkunan. Uudessa luokassa voit käyttää palvelimen valmiiden luokkien palveluita.
Noudata olemassa olevien luokkien tyyliä, ja ole tarkka Layoutin kanssa, koska suurin osa ikkunoista on suunniteltu vain nykyiselle määrälle komponentteja.
Palvelin voidaan yhdistää jo asennettuun www-palvelimeen, luomalla linkki C&VServer palvelimen tervetuloasivulle. Jos haluat syvemmän integroinnin, kuin pelkän linkin yhteen suuntaan, niin voit muuttaa sovelluksen lähdekoodista HTMLString luokan metodeissa olevia html-sivuja, ja lisätä linkkejä myös toiseen suuntaan.
Kun teet palvelimeen http-protokollaan liittyviä muutoksia, on sinun tehtävä testaukset kaikilla selaimilla uudestaan.
Palvelin toimii sekä Windows että Linux käyttöjärjestelmissä.
Muutokset ja lisäykset eivät saa vaikuttaa tähän ominaisuuteen.
Ota tämä huomioon erityisesti tiedostojen käytössä. Linux vaatii että isot ja pienet kirjaimet ovat tiedostonimissä annettu oikein.