INF Puslegruppa - Kom i gang med PusleChat

Like dokumenter
Hva er verdien til variabelen j etter at følgende kode er utført? int i, j; i = 5; j = 10; while ( i < j ) { i = i + 2; j = j - 1; }

Jentetreff INF1000 Debugging i Java

KTN1 - Design av forbindelsesorientert protokoll

Eksamen i Internetteknologi Fagkode: IVA1379

UNIVERSITETET I OSLO

INF1000 Prøveeksamen Oppgave 7 og 9

Eksamen i emnet INF100 Grunnkurs i programmering (Programmering I) og i emnet INF100-F Objektorientert programmering i Java I

UNIVERSITETET I OSLO

UNIVERSITETET I OSLO

Programmering i C++ Løsningsforslag Eksamen høsten 2005

Informasjon Prøveeksamen i IN1000 høsten 2018

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

Gruppe KTN2 innlevering. Endringer gjort siden KTN1:

UNIVERSITETET I OSLO

Øvingsforelesning 5 Python (TDT4110)

Informasjon Eksamen i IN1000 høsten 2017

Gespage Utskrift fra nettsiden

PGZ - Hangman Ekspert Python Lærerveiledning

INF1000: noen avsluttende ord

INF2440 Prøveeksamen, løsningsforslag, 20 mai Arne Maus PSE, Inst. for informatikk

INF100 Institutt for informatikk Universitetet i Bergen Øving 5

Løsningsforslag ukeoppg. 6: 28. sep - 4. okt (INF Høst 2011)

Lenkelister. Lister og køer. Kopi av utvalgte sider fra forelesningen.

Seminaroppgaver IN1010, uke 2

UNIVERSITETET I OSLO

INF Uke 10. Ukesoppgaver oktober 2012

Informasjon Eksamen i IN1000 og IN1001 høsten a) 1 poeng. 1b) 1 poeng. Tid. Oppgavene. Tillatte hjelpemidler. 30. november kl. 14.

Tråder Repetisjon. 9. og 13. mai Tråder

Dette er en demonstrasjonsside som vi skal bruke for å se litt nærmere på HTTP protokollen. Eksemplet vil også illustrere et par ting i PHP.

INF Innleveringsoppgave 6

INF106 Objektorientert programmering

Obligatorisk oppgave nr. 3 (av 4) i INF1000, våren 2006

Antall sider (inkl. forsiden): 7. Alle trykte og håndskrevne

Http- og WebServices funksjoner

INF1000: noen avsluttende ord

Irc-klient. Eigil Obrestad. Morten H Singstad. Kristofers Celms

INF Obligatorisk innlevering 5

Brukerveiledning: Innlogging og registrering på nettkurs.phs.no

UNIVERSITETET I OSLO

Tråder Repetisjon. 9. og 13. mai Tråder

UNIVERSITETET I OSLO

GUI («Graphical User Interface») del 2

Introduksjon til objektorientert programmering

lfæ~~~~:::j~~:~l -.~=:~-t::-d I Alle trykte og håndskrevne EKSAMENSOPPGA VE Side l av 5 Eksamenstid:

6107 Operativsystemer og nettverk

Løsningsskisse, eksamen J2EE og distribuerte systemer 19.mai 2004

2 Om statiske variable/konstanter og statiske metoder.

Debugging. Tore Berg Hansen, TISIP

INF100 INNLEVERING 3 HØSTEN 2004

RUTEPLANLEGGINGSSYSTEM TESTDOKUMENTASJON

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

Løsnings forslag i java In115, Våren 1996

Gjennomgang av eksamen H99

La oss begynne med en repetisjon av hva som skjer når du kjører Javaprogrammet

Øvingsforelesning 5 Python (TDT4110)

HØGSKOLEN I SØR-TRØNDELAG

Obligatorisk oppgave 4: Lege/Resept

INF1010 Sortering. Marit Nybakken 1. mars 2004

Forkurs INF1010. Dag 3. Andreas Færøvig Olsen Gard Inge Rosvold Institutt for Informatikk, 15.

UNIVERSITETET I OSLO

INF1000 Eksamen 2014 (modifisert)

Test 2 OOP. - Prøveeksamen

EKSAMEN. Dato: 9. mai 2016 Eksamenstid: 09:00 13:00

Løsningsforslag til eksamen i INF1000

LITT OM OPPLEGGET. INF1000 EKSTRATILBUD Stoff fra uke September 2012 Siri Moe Jensen EKSEMPLER

København 20 Stockholm

Løse reelle problemer

Enkle generiske klasser i Java

Eksamensoppgave i IFUD1025 Programmering i Java og IINI4013 Programmering i Java

Oppkobling mot SAFE detaljert Mac

INF Notater. Veronika Heimsbakk 10. juni 2012

Klasser skal lages slik at de i minst mulig grad er avhengig av at klienten gjør bestemte ting STOL ALDRI PÅ KLIENTEN!

INF1000 Metoder. Marit Nybakken 16. februar 2004

IN1010 V18, Obligatorisk oppgave 5

Program socket server

Viktig informasjon til nye brukere av Mac-klient fra UiB

public static <returtype> navn_til_prosedyre(<parameter liste>) { // implementasjon av prosedyren

Feilmeldinger, brukerinput og kontrollflyt

INF1000 HashMap. Marit Nybakken 2. november 2003

Oppgavesettet består av 7 sider, inkludert denne forsiden. Kontroll& at oppgaven er komplett før du begynner å besvare spørsmålene.

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

INF Obligatorisk innlevering 7 - Hangman

løsningsforslag-uke5.txt

Forkurs INF1010. Dag 3. Andreas Færøvig Olsen Eivind Storm Aarnæs

UNIVERSITETET I OSLO

HØGSKOLEN I SØR-TRØNDELAG Avdeling for informatikk og e-læring - AITeL

INF Ekstrainnlevering

Brukerveiledning. Searchdaimon AS phone: Østensjøveien 34 fax:

IN Seminaroppgaver til uke 11

Algoritmer og datastrukturer Eksamen

UNIVERSITETET I OSLO

Løsnings forslag i java In115, Våren 1998

Utvikling av dynamiske nettsteder med PHP og databaser, høsten 2006

UNIVERSITETET I OSLO

ARDUINO STUDIELABEN PROGRAMMERING DIGITALE/ANALOGE INNDATA/UTDATA LYSDIODER FRITZING. Roger Antonsen INF januar 2012

Tor-Eirik Bakke Lunde

TDT4100 Objektorientert programmering

Installasjonsveiledning. Phonzoadapter

Løse reelle problemer

Oversikt. INF1000 Uke 1 time 2. Repetisjon - Introduksjon. Repetisjon - Program

Transkript:

INF1010 - Puslegruppa - Kom i gang med PusleChat Sigmund Hansen sigmunha@student.uio.no 31. mars 2011 Last ned dokumentasjonen til kildekoden. 1

1 Klassestruktur 1.1 inf1010.pusle.chat.client.chatclient Dette er selve klientprogrammet. Denne klassen lager et vindu og en Socket og kobler til tjeneren 1. I tillegg kjører den en løkke som tar imot pakker fra tjeneren og sender disse pakkene til ChatListener-objektene som har blitt registrert. Vinduet og klienten er ChatListener-objekter. Hvis en ChatListener sier at den har håndtert pakken, sendes denne ikke videre til andre lyttere i køen. 1.2 inf1010.pusle.chat.client.chatlistener Dette er et grensesnitt som hjelper til å skille presentasjon og programlogikk. Dette baserer seg på Observer-mønstret. Se http://en.wikipedia. org/wiki/observer_pattern 1.2.1 public boolean handlemessage(message m) Denne funksjonen skal returnere true hvis denne lytteren håndterte pakken. 1.3 inf1010.pusle.chat.client.chatframe Et enkelt brukergrensesnitt med en liste over tilkoblede brukere, et tekstfelt for å skrive beskjeder og en formatert tekstboks for å vise samtalene. ChatFrame er en ChatListener og håndterer alt bortsett fra frakobling og feilmeldinger. 1.4 inf1010.pusle.chat.message Dette er en enkel liten klasse som representerer en pakke sendt mellom klient og tjener. 1.5 inf1010.pusle.chat.chatutilities Inneholder konstanter og hjelpefunksjoner for tjeneren og klienten. Metodene send- og recvmessage kan brukes både av tjeneren og klienten. Da slipper vi å skrive duplisert kode i tjeneren og klienten, men vi må sende med lese- eller skrivestrømmen som et argument til metoden. 1 Tjener er norsk for server. 2

1.6 inf1010.pusle.chat.server.chatserver Selve tjenerprogrammet som sitter og venter på at klienter skal koble seg til. 1.7 inf1010.pusle.chat.server.client En klient representert på tjeneren. Denne klassen er Runnable slik at den kan kjøres på en egen tråd. Disse trådene brukes til å ta imot pakker fra klienter hos tjeneren. 2 Hva som mangler i klienten 2.1 I ChatClient Når man starter klienten, leses opptil tre kommandolinjeargumenter: adressen til tjeneren, porten om den er oppgitt, og brukernavnet til brukeren. Disse puttes i noen lokale variabler som brukes i konstruktøren til ChatClient. I konstruktøren må dere sette variablene sock (klientens Socket), sin (strømmen for å lese data) og sout (strømmen for å sende data). Så må dere til slutt sende en innloggingspakke til tjeneren. Denne kan sendes ved hjelp av metoden sendmessage i ChatUtilities. handlemessage ChatClient er en ChatListener og har derfor en handlemessagemetode. Det er tre pakketyper som ChatFrame ikke håndterer: frakoblingspakken og feilpakkene. run I run går en evig løkke. Denne løkka har ansvar for å lese data som er blitt sendt fra tjeneren. Den sender det så videre til lytterobjektene inntil én av dem behandler pakken, eller det ikke er flere lyttere. Dette gir en lagmodell for håndtering av pakker som er veldig modulær. For å lese pakker kan man bruke metoden recvmessage i ChatUtilities. 2.2 I ChatUtilities Her mangler en del av innholdet i de to metodene. sendmessage Her skal dere sende data via strømmen som er gitt som argument. Konvertering fra streng til en byte-array er gjort for dere, men siden vi kun bruker én byte til å si hvor mye data som skal sendes, kan vi ikke sende mer data enn 255 byte. Hvis en melding er mer enn 255 byte lang, 3

skal derfor metoden returnere false. Et alternativ er å dele opp beskjeden i flere mindre pakker, men da bør nok retur-verdien endres til int (antall byte sendt eller antall pakker sendt). recvmessage Her skal dere motta data fra strømmen som er gitt som argument. Konvertering fra byte-array til streng er gjort for dere i retursetningen, men dere må lese inn typen og lengden fra strømmen og til slutt lese inn data basert på lengden dere har fått undersøkt. 3 Hva som mangler i tjeneren 3.1 I ChatServer Her mangler det meste av nettverkskoden. Noen små hint til andre deler av koden ligger i «shutdown hooken» i konstruktøren. processqueue Er ansvarlig for å gå gjennom køen med klienter som har koblet til, men ikke er innlogget ennå. Her må vi passe på at de har sendt en innloggingspakke (navnet er ikke null): Feil pakke - Navnet er tomt i dette tilfellet Client rapporterer feilen til klienten Vi må koble fra klienten Opptatt brukernavn Si fra til klienten at brukernavnet var opptatt Koble fra klienten Innlogging Fjern klienten fra køen Fortell klienten om hvilke andre brukere som finnes Legg til klienten til brukerlista Fortell alle at brukeren har koblet til Hvis vi kommer til en bruker som ikke har logget inn etter ett minutt, må vi koble fra klienten. Vi trenger ikke å si til brukeren at noe gikk galt. 4

removeclient Her fjerner vi en klient fra lista med tilkoblede klienter. Hvis brukeren var innlogget, kobler vi fra klienten og forteller de andre klientene om dette. broadcast Gå gjennom alle innloggede klienter og send dem beskjeden fra sender (husk å sende MESSAGE_FROM-pakker også). run Her mangler det å motta forbindelser og opprette tråder for dem. 3.2 I Client Client representerer klienter tilkoblet tjeneren. Denne trenger dere ikke å gjøre noe med, men dere må gjerne fikse på den om dere vil. 4 Protokollen Alle pakker består av et pakkehode på to byte pluss eventuelle data. Den første byten sier hvilken pakketype det er, og den andre sier hvor mange byte med data det er. 5

Pakketype Tjener Klient 0x01 Velkommen Innlogging data ingen brukernavn 0x02 Brukerliste ingen 0x03 Ny bruker ingen 0x04 Bruker dro ingen 0x05 Koble fra Koble fra data beskjed ingen 0x10 Beskjed fra ingen 0x11 Beskjed fra Beskjed data Beskjed Beskjed Feilpakker: 0x80 Brukernavn tatt ingen data ingen ingen 0x90 Invalid packet Invalid packet data ingen ingen 6