Aşağıdaki örnek onReceiveHeader ve onReceive'in istedikleri delegate'leri veriyorlar.
Bazen kodun içine temsilci yerleştirmek yerine serbest işlev kullanmak isteyebiliriz. onReceiveHeader ve onReceive özellikle delegate istediklerinden serbest bir işlev göstergesini (yani function'ı) delegate'e dönüştürmek için std.functional.toDelegate'ten de nasıl yararlanılabileceğini gösterdim.
import std.net.curl;
import std.stdio;
import std.algorithm;
import std.functional;
void başlıkYazdır(in char[] key, in char[] value)
{
writefln("başlık: %s = %s", key, value);
}
void main()
{
auto http = HTTP("http://ddili.org");
http.onReceiveHeader = toDelegate(&başlıkYazdır);
http.onReceive = delegate size_t(ubyte[] data) {
// Ekranı kalabalıklaştırmayalım
immutable gösterecekKadarı = min(data.length, 10);
writefln("veri (%s baytın %s baytı):", data.length, gösterecekKadarı);
writefln(" %s", data[0..gösterecekKadarı]);
return data.length;
};
http.perform();
auto sl = http.statusLine();
if(sl.code == 200)
{
writeln("Hello dolly");
}
else
{
writeln("Goodbye dolly");
}
writeln(sl);
}
data'nın string olduğu bilindiğinde şöyle de yazdırılabilir:
writefln(" %s", cast(string)data[0..gösterecekKadarı]);
Ali
--
[ Bu gönderi, http://ddili.org/forum'dan dönüştürülmüştür. ]