Serwer do przekazywania wiadomości, szkoła


Serwer do przekazywania wiadomości

msgserver.cs

using System;

using System.Collections;

using System.Reflection;

namespace SimpleServer

{

// Kompilacja: csc /t:library msgserver.cs

public class MessageManager : MarshalByRefObject

msgclient.cs

using System;

using System.Runtime.Remoting;

using System.Runtime.Remoting.Channels;

using System.Runtime.Remoting.Channels.Http;

using System.Collections;

using System.Reflection;

using SimpleServer; // Przestrzeń nazw serwera

// Kompilacja: csc /r:msgserver.dll msgclient.cs

msghost.cs

using System;

using System.Runtime.Remoting;

using System.Runtime.Remoting.Channels;

using System.Runtime.Remoting.Channels.Http;

using SimpleServer; // Przestrzeń nazw serwera

// Kompilacja: csc /r:msgserver.dll msghost.cs

namespace SimpleHost

{

0x08 graphic

Terminologia w projekcie:

Serwer - zestaw z deklaracją i implementacja zdalnych klas

Host - zestaw zawierający kod do rejestracji typów i kanałów.

Jeżeli funkcje hosta i serwera sa połaczone taki zestaw nazywa się serwerem lub serwerem-hostem. Niektórzy autorzy odwracają znaczenie hosta i i serwera. W poprzednich projektach uzywano terminologii odwróconej: serwer i obiekt klasy obiektu zdalnego.

Aplikcja rozważana umożliwia użytkownikom przesyłanie wiadomości do innych użytkowników i ich pobieranie. Pracuje w trybie konsolowym

0x01 graphic

Host

using System;

using System.Runtime.Remoting;

using System.Runtime.Remoting.Channels;

using System.Runtime.Remoting.Channels.Http;

using SimpleServer; // Przestrzeń nazw serwera

namespace SimpleHost

{

public class MessageHost

{

static void Main(string[] args)

{

Console.WriteLine("Host został uruchomiony.");

// Rejestruje kanał

HttpChannel c = new HttpChannel(3200);

ChannelServices.RegisterChannel(c);

// Rejestruje typ

Type ServerType = typeof(SimpleServer.MessageManager);

RemotingConfiguration.RegisterWellKnownServiceType(

ServerType, // Typ obiektu

"MojObiekt", // Dowolna nazwa

WellKnownObjectMode.Singleton);

// RemotingConfiguration.Configure("msghost.exe.config");

Console.Read();

}

}

}

Serwer

using System;

using System.Collections;

using System.Reflection;

namespace SimpleServer

{

public class MessageManager : MarshalByRefObject

{

ArrayList Messages = new ArrayList();

public MessageManager()

{

Console.WriteLine("wiadomość została utworzona.");

}

// Metoda łączy wszystkie wiadomości i zwraca klientowi zawierający je ciąg znaków

public string FetchMessages(string clientID)

{

string msgList= "";

Console.WriteLine(clientID);

for (int i = Messages.Count - 1; i >= 0; i--)

{

Envelope env = (Envelope)Messages[i];

if(env.RecipientID == clientID)

{

msgList += env.SenderID+": "+env.Message+"\n";

Messages.RemoveAt(i); // Usuwanie wiadomości

}

}

Console.WriteLine("Wysyłanie:\n {0}", msgList);

return(msgList);

}

// Metoda przyjmuje wiadomość od klienta i zapisuje ją w pamięci

public void SetMessage(string msg, string sender,

string recipient)

{

// Zapisuje wiadomość otrzymaną od klienta jako obiekt w tablicy

Envelope env = new Envelope();

env.Message = msg;

env.SenderID = sender;

env.RecipientID = recipient;

Messages.Add(env); // Dodaje wiadomość do tablicy

Console.WriteLine("Otrzymano:\n{0}", msg);

}

}

// Wiadomości są przechowywane w obiektach klasy Envelope

public class Envelope

{

public string Message;

public string SenderID;

public string RecipientID;

}

}

Klient

using System;

using System.Runtime.Remoting;

using System.Runtime.Remoting.Channels;

using System.Runtime.Remoting.Channels.Http;

using System.Collections;

using System.Reflection;

using SimpleServer; // Przestrzeń nazw serwera

// Kompilacja: csc /r:msgserver.dll msgclient.cs

[assembly: AssemblyVersion("1.0.0.0"), System.CLSCompliant(true)]

namespace SimpleClient

{

public class MessageClient

{

static void Main(string[] args)

{

string myID;

// Identyfikator klienta przekazywany jest jako argument wiersza poleceń

if (args.Length > 0) myID = args[0]; else myID = "001";

Console.WriteLine("Klient został uruchomiony.");

// (1) Rejestruje kanał

HttpChannel c = new HttpChannel();

ChannelServices.RegisterChannel(c);

// (2) Rejestruje typ — obiekt aktywowany przez serwer przez port 3200

Type ServerType = typeof(SimpleServer.MessageManager);

string url = "http://localhost:3200/MojObiekt";

// Rejestruje typ w trybie aktywacji przez serwer

RemotingConfiguration.RegisterWellKnownClientType(

ServerType, url);

// (3) Tworzy instancję zdalnego obiektu

MessageManager mm = new MessageManager();

string msg;

string oper = "";

// Pozwala użytkownikom wysyłać i odbierać wiadomości

while (oper != "Z")

{

Console.WriteLine("(W)yślij, (O)dbierz, (Z)akończ");

oper = Console.ReadLine();

oper = oper.ToUpper();

if (oper == "W"){

Console.WriteLine("Wpisz identyfikator odbiorcy: wiadomość");

msg = Console.ReadLine();

// Dwukropek (:) oddziela identyfikator od wiadomości

int ndx = msg.IndexOf(":");

if (ndx > 0) {

string recipientID = msg.Substring(0, ndx).Trim();

msg = msg.Substring(ndx+1);

mm.SetMessage(msg, myID, recipientID);

}

} else

{

if (oper == "O") {

Console.WriteLine(mm.FetchMessages(myID));

}

}

} // while

} // metoda

} // class

} // namespace

Serwer do przekazywania wiadomości

0x08 graphic

Terminologia w projekcie:

Serwer - zestaw z deklaracją i implementacja zdalnych klas

Host - zestaw zawierający kod do rejestracji typów i kanałów.

Jeżeli funkcje hosta i serwera sa połaczone taki zestaw nazywa się serwerem lub serwerem-hostem. Niektórzy autorzy odwracają znaczenie hosta i serwera. W poprzednich projektach uzywano terminologii odwróconej: serwer i obiekt klasy obiektu zdalnego.

Aplikcja rozważana umożliwia użytkownikom przesyłanie wiadomości do innych użytkowników i ich pobieranie. Pracuje w trybie konsolowym

Serwer

Zawiera kod klasy MessageServer, która udostępnia klientom jako obiekt typu singleton aktywowany przez serwer. Oprócz wymaganego dziedziczenia po klasie MarshalByRefObject klasa ta jest nieodróżnialna od zwykłych klas, nieprzyznaczonych do zdalnego używania. Klasa MessageServer udostępnia dwie metody, SetMessage() i FetchMessage(), które służą do wysyłania i pobierania wiadomości. Wywołanie metody SetMessage() zawiera identyfikator nadawcy i odbiorcy oraz samą treść wiadomości. Wiadomości są pakowane do obiektu klasy Envelope i przechowywane w tablicy. Klienty pobierają wiadomość, wywołując metodę FetchMessage() z identyfikatorem klienta. Metoda ta przeszukuje tablicę wiadomości i zwraca ciąg znaków zawierający wszystkie wiadomości dla tego odbiorcy.

// Kompilacja: csc /t:library msgserver.cs

// msgserver.dll instalować na hosie i klientach

Host

Rejestruje kanały i typy. Kanał używa protokołu HTTP przez podany port, a obiekt MessageManager jest uruchomiany jako obiekt typy singleton. Po zakończeniu rejestracji zestaw monitoruje wskazany port, oczekując na wywołanie do obiektu MessageManager. Host przekazuje do tego obiektu wszystkie otrzymane wiadomości.

// Kompilacja: csc /r:msgserver.dll msghost.cs

Klient

Klient można uruchomić z parametrem opcjonalnym określającym identyfikator klienta (msgclient 005). Klient najpierw rejestruje typ i kanał. Po rejestracji tworzy obiekt klasy MessageManager za pomocą operatora new. Kiedy użytkownik wpisze O, obiekt pobierze wiadomosci. W celu przesłania wiadomości należy wpisać W jako pierwszą instrukcje oraz identyfikator odbiorcy i wiadomość jako kolejną.

// Kompilacja: csc /r:msgserver.dll msgclient.cs

0x01 graphic

msghost.exe

msgserver.dll

msgclient.exe

k

l

i

e

n

c

i

k

l

i

e

n

c

i

msgclient.exe

msgserver.dll

msghost.exe



Wyszukiwarka

Podobne podstrony:
ściąga do ćwiczennia XII, Szkoła, penek, Przedmioty, Urządzenia nawigacyjne, Zaliczenie, egzamin, Ś
Wymagania do poszczegolnych dzialow, szkoła, przyroda
pytania do powtórzenia wiadomości o starozytności, Epoki literackie
Maseczka oczyszczająca do skóry tłustej, Szkoła, Pracownia Kosmetyczna, Cera tłusta
Plany uruchomienia reaktorów w poszczególnych krajach do 2030 roku, Szkoła- notatki i inne, GEOGRAFI
Czerwiec, Do szkoły, podręczniki szkoła podstawowa klasa 0 zerówka
serwery do counter strike1 6
testy frazeologiczne przygotowujace do poprawnej polszczyzny, szkoła, podstawówka, frazeologia
Test do oceny wiadomości i umiejętności uczniów szkoły życia
materiały do wykładów, w 08 Szkoła jako instytucja społeczna i środowisko wychowawcze
Maseczka nawilżająca do skóry normalnej, Szkoła, Pracownia Kosmetyczna, Maseczki
Luty, Do szkoły, podręczniki szkoła podstawowa klasa 0 zerówka
Zagadnienia do egzaminu FiT, szkoła
psychologia społeczna zagadnienia do egz z UŁ, szkola pati
110624 Zagadnienia do egzaminu SiT, szkoła, materiały FIT i SIT
Gatunki-do-oczyszczalni-roślinnych, szkoła, KTZ
Pytania do tworzenia rapportu, Szkoła Podrywu, NLS
zalaczniki do pracy inz, szkola pati
Pippi idzie do szkoły-przedstawienie, szkola, materialy

więcej podobnych podstron