• Nie Znaleziono Wyników

Labolatorium_PUM_3 - dodatkowe(Czat)

N/A
N/A
Protected

Academic year: 2021

Share "Labolatorium_PUM_3 - dodatkowe(Czat)"

Copied!
5
0
0

Pełen tekst

(1)

HttpRequest – Aplikacja „Czat”

Za pomocą obiektu HttpRequest można wykonywać żądania http z aplikacji windows phone.

W pierwszej kolejności należy utworzyć aplikację i dodać do niej dwie kontrolki: Buton i TextBlock,

tak jak ma to miejsce na obrazku poniżej i nazwać je następująco „bTest”, „textBlock”.

Następnie, klikając na button 2-krotnie utworzyć handler kliknięcia.

W body metody umieścić kod:

private void bTest_Click(object sender, RoutedEventArgs e) {

string url = @"http://iisi.pcz.pl/~pnajgebauer/PUM/test.php"; try

{

var request = HttpWebRequest.Create(url);

var result = (IAsyncResult)request.BeginGetResponse(ResponseCallback, request);

}

catch (WebException exception) {

MessageBox.Show("Wyjątek"); }

}

Metoda rozpocznie wykonywanie żądanie pod adres

http://iisi.pcz.pl/~pnajgebauer/PUM/test.php

Natomiast odpowiedz z serwera przyjdzie asynchronicznie i wywoła metodę ResponseCallback ,

którą należy dodać do klasy.

(2)

private void ResponseCallback(IAsyncResult result) {

var request = (HttpWebRequest)result.AsyncState; var response = request.EndGetResponse(result);

using (var stream = response.GetResponseStream()) using (var reader = new StreamReader(stream)) {

var contents = reader.ReadToEnd();

Dispatcher.BeginInvoke(() => { textBlock.Text = contents; }); }

}

Po wywołaniu metody uzyskiwany jest dostęp do strumienia z zawartością zwróconą z serwera www.

Następnie zawartość jest umieszczana w kontrolce textBlock. Niemożliwe jest bezpośrednie

odwołanie do kontrolki textBlock ponieważ działają one na różnych wątkach dlatego trzeba

skorzystać z Dispatcher.BeginInvoke.

Przesyłanie Parametrów.

Metoda GET – przekazuje parametry po znaku „?” jako pary „nazwa=wartość„ w adresie URL

żądanie oddzielając je znakiem & między kolejnymi parametrami.

Metoda POST – przesyła parametry w ciele żądania. W naszym wypadku również muszą być

enkodowane jak w GET.

(3)

private void bPostTest_Click(object sender, RoutedEventArgs e) {

string url = @"http://iisi.pcz.pl/~pnajgebauer/PUM/posttest.php"; try

{

var request = HttpWebRequest.Create(url);

request.ContentType = "application/x-www-form-urlencoded"; request.Method = "POST";

requ-est.BeginGetRequestStream(new AsyncCallback(RequestStreamCallback), request); }

catch (WebException exception) {

MessageBox.Show("Wyjątek"); }

}

W tym przypadku asynchronicznie jest oczekiwanie na utworzenie strumienia danych do wysłania na

serwer. Gdy strumień jest gotowy wywoływany jest handler „RequestStreamCallback”, w którym

zostaną przesłane nasze parametry na serwer.

private void RequestStreamCallback(IAsyncResult asynchronousResult) {

HttpWebRequest request = (HttpWebRequest)asynchronousResult.AsyncState;

// End the operation

Stream postStream = request.EndGetRequestStream(asynchronousResult);

string arg1 = "Argument1+-?&&"; string arg2 = "Argument2";

// Convert the string into a byte array. string data = HttpUtility.UrlEncode("arg1") + '=' + HttpUtility.UrlEncode(arg1) + '&' + HttpUtility.UrlEncode("arg2") + '=' + HttpUtility.UrlEncode(arg2);

byte[] byteArray = Encoding.UTF8.GetBytes(data);

// Write to the request stream.

postStream.Write(byteArray, 0, byteArray.Length); postStream.Close();

// Start the asynchronous operation to get the response

request.BeginGetResponse(new AsyncCallback(ResponseCallback), request); }

nasze argumenty zanim zostaną przesłane muszą zostać encodowane tak aby pozbyć się znaków

specjalnych („+”, „?”, „=”, „&” itp…), a następnie zamienione na formę binarną. Do encodowania

parametrów służy metoda „HttpUtility.UrlEncode”.

(4)

Zadanie 1. Wykonać aplikację imitującą czat, która:

Będzie pobierać wiadomości z strony http://iisi.pcz.pl/~pnajgebauer/PUM/data.xml, sprasuje listę

wiadomości i odpowiednio wyświetli w kontrolce.

Format pliku.

<?xml version="1.0" standalone="yes"?> <messages>

<message user="UserTest" date="28/04 11:47:11">TextTest</message> <message user="pat" date="28/04 12:28:28">Wiadomość</message> </messages>

Serwer przechowuje jedynie 10 ostatnich wiadomości. Ponadto, nazwa użytkownika „user” jest

obcinana do 10 znaków, a wiadomość „message” do 40 znaków.

Do prasowania XML-a można użyć obiektu „XmlReader” poniżej przykładowy fragment.

var reader = XmlReader.Create(new StringReader(data)); while (reader.Read())

{

switch (reader.NodeType) {

case XmlNodeType.Element:

Console.WriteLine("Start Element {0}", reader.Name); break;

case XmlNodeType.Text:

Console.WriteLine("Text Node: {0}", reader.Value);

break;

case XmlNodeType.EndElement:

Console.WriteLine("End Element {0}", reader.Name); break;

default:

Console.WriteLine("Other node {0} with value {1}", reader.NodeType, reader.Value); break;

} }

Zadanie 2. Do aplikacji dodać funkcje dodawania nowego wpisu.

Pod adresem http://iisi.pcz.pl/~pnajgebauer/PUM/add.php znajduje się skrypt dodający kolejne

wpisy czatu.

Przyjmuje przesłane metodą POST parametry:

user – nazwa użytkownika (obcina powyżej 10 znaków),

message – wiadomość (obcina powyżej 40 znaków).

Server zwraca:

(5)

„ok” – jeśli wpis został dodany.

„no params” – jeśli brakuje parametrów.

Pozostałe oznaczają niepowodzenie.

Cytaty

Powiązane dokumenty

Jako że starzenie się jest związane także ze zmniejszaniem się dzietności, obawy te dotyczą z jednej strony zmniejsze- nia dopływu młodych zasobów pracy do rynku pracy, a

W Aktach miasta Lublina z lat 1809–1874 przechowywa- nych w zasobie Archiwum Państwowego w Lublinie znajduje się projekt pompokrytu dostarczony do Lublina w 1864 roku przez

W formie swobodnej wymiany zdań uczniowie przedstawiają swoje propozycje dotyczące cech dobrego mówcy i warunki, jakie powinno spełniać dobre przemówienie. Uniwersalny słownik

Wykonać wybrany z dwuargumentowych operatorów przeciążonych z punktu 2 (np.+) jako funkcje zaprzyjaźnioną. W metodzie odleglosc przekazać obiekt typu punkt przez wartość i

(b) Wybranej komórce przydzieli¢ warto±¢ tak, aby zu»y¢ pozostaª¡ w jej wierszu poda» lub pozostaªy w jej kolumnie popyt (którakolwiek liczba jest mniejsza).. (c)

07.04 Topic: Easter-Wielkanoc Podręcznik str.70.. Zad.1 Posłuchaj nagrania i

Jeżeli użytkownik będzie logował się z innej przeglądarki, która nie była dodana wcześniej jako urządzenie zaufane albo zmienione zostaną badane przez system cechy

Jeżeli okres kwarantanny będzie przedłużony na maj to wówczas na początku maja podam listy studentów dla pozostałych grup z prośbą o przygotowanie prezentacji w maju.. Dotyczy