HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Chat program készítése egyszerűen


Példaprogram letöltése

16230 bájt

A .NET Remoting komplex szolgáltatásával, a szükséges osztályokkal és a távoli objektumhívás módjaival már foglalkoztunk a Software Online hasábjain. Mostani cikkünkben egy konkrét alkalmazásban hasznosítjuk a Remoting lehetőségeit. Elkészítünk egy alapvető funkciókkal bíró csevegő-programot, mely kliens-szerver elven működik oly módon, hogy a szerveralkalmazáshoz tetszőleges számú (ennek csak a kiosztható csatorna-szám szab határt) kliens csatlakozhat, melyek egymással üzenetet válthatnak.

A mellékelt példa fordítása után a szerveralkalmazást indítsuk el elsőként, majd a Client programokból tetszőleges számút úgy, hogy az egyes példányokat az SObject.dll assembly-vel együtt külön mappákban helyezzük el.
A megoldás lényege, hogy a Server.exe konzolalkalmazás induláskor regisztrálja a 1999-es számú http-csatornát, majd aktiválja a SINGLETON objektumot. Az objektum metódusainak meghívásával jutnak el az üzenetek a csevegő felekhez. A kliensek konferenciabeszélgetésre emlékeztető módon cseveghetnek, vagyis az egyikben elküldött üzenet valamennyi klienshez eljut.
A kliensek az 1001 és 1100 közötti csatorna-tartományban foglalhatnak le csatornát az üzenetküldéshez, vagyis amennyiben egy már foglalt csatornát kapnak, akkor a véletlen szám-generátor egy újabb számot képez számukra.
A következőkben megvizsgáljuk, hogyan történik az üzenetek elküldése. A projektek mindegyikében referenciaként meg kell adni a Remoting szolgáltatás eléréséhez szükséges System.Runtime.Remoting.dll állományt.
A SObject projekt fordítása után generálódott DLL referenciaként való megadása pedig a Server és a Client projektekben szükséges.
SObject projekt
A létrehozott SClass osztály példányosítása a szerver feladata. Ekkor az objektumot a szerver aktiválja (CAO objektum), SINGLETON objektumként regisztrálva azt.
Az objektum három metódussal rendelkezik, melyek a kliens-alkalmazás műveleteiben kerülnek meghívásra, miután a kliens elérte az objektumot.
Az objektum rendelkezik egy felhasználói listával, melyben tárolja a már csatlakozott kliensek nevét.
Az AddChatter metódusban megvizsgáljuk, hogy a kliens a megadott néven csatlakozott-e már. Ha igen, akkor hibaüzenetet adunk, egyébként a metódusban referencia-típusú paraméterként megadott szövegmező-kontrolban jelenítjük meg a csatlakozás tényét.
A felhasználó kijelentkezésekor a RemoveChatter metódust hívjuk meg, mellyel töröljük az adott felhasználót a listából.
A DoBroadCast metódusban küldjük el az üzenetet valamennyi csatlakozott kliensnek. A csatlakozott kliensek üzenetablakainak referenciáit egy listában tároljuk, és a metódus meghívásakor ezek mindegyikébe beírjuk az adott üzenetet. Így érhető el, hogy az üzenet minden ablakban megjelenjen.
Server projekt
A szerveralkalmazás egy konzol-program, melynek feladata csak az, hogy regisztrálja és aktiválja az objektum típusát.
Ekkor egy HttpChannel objektumot hozunk létre, melynek csatornaszáma 1999.
HttpChannel ch = new HttpChannel(channel);
ChannelServices.RegisterChannel(ch);
A csatornát regisztráljuk is. A következő lépésben a távoli objektum típusát nyerjük ki egy Type objektumba.
Type t = typeof(SObject.SClass);
Majd a típust regisztráljuk.
RemotingConfiguration.RegisterWellKnownServiceType(t, "SClass", WellKnownObjectMode.Singleton);
A kliensek által küldött üzenetek itt is megjelennek.
Client projekt
A kliensalkalmazásokban indulás után meg kell adnunk egy felhasználónevet, majd a BEJELENTKEZÉS gombbal aktiválnunk kell a távoli objektumot. Ekkor addig képzünk egy véletlen számot 1001 és 1100 közt, míg egy olyat találunk, amelynek a megfelelő csatornaszámot regisztrálni tudjuk hibaüzenet nélkül.
Random r = new Random();
int channel = 1000 + r.Next(1,100);
bool b = false;
while (!b)
{
  ...
  ch = new HttpChannel(channel);
  ChannelServices.RegisterChannel(ch);
  ...
A távoli, már aktivált objektumot a következőképpen példányosítjuk:
c = (SClass)Activator.GetObject(typeof(SClass),"http://localhost:1999/SClass");
Itt a csatorna számát, és a típust kell megadnunk a szerver címe után. Ezt követően a felhasználót az objektum AddChatter metódusával megpróbáljuk felvenni a felhasználói listába.
bool exist = c.AddChatter(textBox1.Text,channel,ref richTextBox1);
Amennyiben nem sikerül, a csatornát felszabadítjuk.
...
ChannelServices.UnregisterChannel(ch);
Amennyiben a felhasználó még nem szerepel a listában, akkor hozzáadjuk. A kijelentkezés a megfelelő feliratú gomb segítségével lehetséges.
Az ÜZENET KÜLDÉSE gomb segítségével elküldhetjük az alsó szövegmezőben megadott üzenetet a többi kliensnek.
c.DoBroadCast(user + ": " + textBox2.Text);
Az üzenet előtt a küldőt is feltüntetjük.

Cikksorozat



Könyv
Ez a cikk megtalálható ebben a könyvben: C# Software Offline 2003 évkönyv 557. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |