Ylläpito-ohje

C&VServer

 

 

 

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

 


Sisällys

Sisällys. 2

1 Johdanto. 3

1.1 Tarkoitus ja kattavuus. 3

1.2 Termit ja lyhenteet 3

2 Toteutuksen yleiskuvaus. 4

2.1 Sovelluksen toiminta. 4

2.1.1 Palvelin. 4

2.1.2 Käyttöliittymä. 5

2.2 Tietoliikenne arkkitehtuuri 6

2.2.1 Protokolla. 6

2.2.2 HTTP-pyynnöt 6

2.2.3 HTTP-Vastaus. 7

3 Ylläpito-ohjeita. 7

3.1 Sovellus. 7

3.1.1 Palvelimen asetukset 7

3.1.2 Lokitiedot 8

3.1.3 Vieraskirjamerkinnät 8

3.1.4 Keskustelijoiden tiedot 8

3.1.5 Keskustelun toimintakehys. 8

3.1.5 Palvelimen Statistiikka. 8

3.2 Tietokanta. 9

3.2.1 log.dat Lokitiedot 9

3.2.2 settings.dat Palvelimen asetukset 9

3.2.3 VisitorsBook.bin Vieraskirja. 9

3.3 Käyttöliittymä. 9

3.3.1 Uudet ominaisuudet 9

3.3.2 Lisäys olemassa oleviin ikkunoihin. 9

3.4 Ohjelmistoliittymät 10

3.5 Tietoliikenneliittymät 10

3.6 Ohjelmisto sovitus. 10

 


 

 

 

1 Johdanto

1.1 Tarkoitus ja kattavuus

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.

1.2 Termit ja lyhenteet

 

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.

 

 

 

2 Toteutuksen yleiskuvaus

 

2.1 Sovelluksen toiminta

 

Sovellus jakaantuu kahteen osaan. Käyttöliittymään ja palvelimeen. Seuraavaksi yhteenveto kuvaus palvelimen toiminnasta, ja käyttöliittymän arkkitehtuurista.

2.1.1 Palvelin

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.

 

2.1.2 Käyttöliittymä

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.

 

2.2 Tietoliikenne arkkitehtuuri

2.2.1 Protokolla

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.

 

 

2.2.2 HTTP-pyynnöt

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.

 

 

2.2.3 HTTP-Vastaus

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ä.

3 Ylläpito-ohjeita

Tässä luvussa on ohjeita ja ideoita uusien ominaisuuksien lisäämiseksi palvelimeen.

3.1 Sovellus

 

3.1.1 Palvelimen asetukset

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.

 

 

 

3.1.2 Lokitiedot

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.

 

3.1.3 Vieraskirjamerkinnät

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)

3.1.4 Keskustelijoiden tiedot

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.

3.1.5 Keskustelun toimintakehys

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.

3.1.5 Palvelimen Statistiikka

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.

3.2 Tietokanta

Tietokantana sovelluksessa käytetään tiedostoja, jotka on tallennettu palvelimen asennushakemistoon.

3.2.1 log.dat Lokitiedot

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.

 

3.2.2 settings.dat Palvelimen asetukset

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.

 

3.2.3 VisitorsBook.bin Vieraskirja

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.

 

3.3 Käyttöliittymä

3.3.1 Uudet ominaisuudet

 

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.

 

3.3.2 Lisäys olemassa oleviin ikkunoihin.

 

Noudata olemassa olevien luokkien tyyliä, ja ole tarkka Layoutin kanssa, koska suurin osa ikkunoista on suunniteltu vain nykyiselle määrälle komponentteja.

 

3.4 Ohjelmistoliittymät

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.

 

3.5 Tietoliikenneliittymät

Kun teet palvelimeen http-protokollaan liittyviä muutoksia, on sinun tehtävä testaukset kaikilla selaimilla uudestaan.

 

3.6 Ohjelmisto sovitus

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.