16. november 2006 - 10:08Der er
6 kommentarer og 1 løsning
Observer pattern på netværk
Hej, Det er sådan at jeg er ved at lave en mindre chat app. Men jeg vil gerne have at når folk logger af og på, så bruge et observer pattern til at fortælle alle de andre brugere hvem der er på.
Er der nogen der har et eksempel liggende der kan klare det ?
Et vigtigt design spørgsmål: hvordan styrer du din chat ? Har du en chat server hvor al kommunikation går igennem, eller har du to eller flere klienter som skal snakke direktet med hinanden.
Hvis du har en chat server, kan observer pattern efter min mening bruges smart. Alle klienter registrer sig som observer på severen der er observable. Når så en klient logger af eller på, laver serveren et notifyAll() kald, dvs. alle klienter som er registreret som observer på serveren, får kaldt deres notify() metode, som f.eks. opdaterer listen af andre klienter på chatten.
Hvis du ikke har en chat server, bliver tingene rodet lidt sammen. Hver klient skal være observable, samt observer. Dvs. hver klient skal registrere sig som observer på alle de andre klienter, og udstille sig som observable.
Lille eksempel på chat server:
Klient registrer sig som observer på chat serveren:
// klient kode RemoteServer server = new RemoteServer(); Klient k = new Klient(); server.registrerObserver(k); server.logPaaChatten(k);
Når en klient har kaldt registrerObserver(), sker følgende: // server kode public void registrerObserver(Klient k){ // tilføj klient som observer observers.add(k); }
Når en klient har kaldt logPaaChatten(), sker følgende: public void logPaaChatten(Klient k){ foreach(Klient klient in observers){ klient.notify("OPDATER_KLIENTER_PAA_KLIENT",observers); } }
// Klient kode publib void notify(string msg,object data){ if(msg.Equals("OPDATER_KLIENTER_PAA_KLIENT")){ // opdater listboksen på klienten listBox.addItems(data); } }
Håber det kan give dig lidt inspiration til at komme videre :-)
Hej, Mange tak for det, ideen er at der skal være en server der tager sig af alt komunikation.
men hvordan skal jeg få det distrubueret ud til klienterne ? skal jeg bare lave en writer der skriver navnet også opdatere klienterne en lokal arraylist eller hvordan ?
Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.