wm geom .konsola 653x567+348+3; wm geom . 200x200+30+369; wm geom .output 309x288+27+51; source eagle_lib.tcl; # System.Net - eksperymenty... # # ... # synch. HttpWebReq # + czy met. GetResponse blokuje??? # na pewno wysyla zadanie http, a GetResponseStream # zwraca strumien powiazany z gniazdkiem... # (nie wiem czy czeka na pelna odpowiedz serwera http...?) e {object import System.Net} e {set h1 [object invoke -alias HttpWebRequest Create "http://wp.pl"]} # + wywolywanie metod statycznych !!! # + opcje -alias mozna podac ZAWSZE !!! e {set h2 [$h1 -alias GetResponse]} e {$h2 ContentType} #% text/html; charset=UTF-8 e {$h2 ContentLength} #% 94285 e {$h2 CharacterSet} #% UTF-8 e {set h2a [$h2 -alias Cookies]} e {$h2a Count} #% 0 e {set h3 [$h2 -alias GetResponseStream]} e {set a1 [object create -alias {Byte[]} 1000]} # + tworzenie tablic e {$h3 Read $a1 0 [$a1 Length]} #% 1000 time {binary form c* [ set _ {}; set len [e {$a1 Length}] for {set i 0} {$i<$len} {incr i} {lappend _ [e "\$a1 Get $i"]} set _]} #% 641771 microseconds per iteration time {binary form c* [e { set _ {}; set len [$a1 Length] for {set i 0} {$i<$len} {incr i} {lappend _ [$a1 Get $i]} set _}]} #% 1530404 microseconds per iteration # + dziala, ale STRASZNIE powoli... # eagle ma powazne problemy wydajnosciowe?!?!!?!? #e {set x1 [object create String $a1 0 100]} # + to nie dziala, bo String spodziewa sie Char[] a nie Byte[] # wiec jak zrobic String z tabl. bajtow ?!?!?!! e {$h2 Close} # ... # asynch. HttpWebReq ? # + tam gdzie .NET spodziewa sie callback-a/delegata mozna podac proc tcl! # nie wiem jak to dziala w przypadku pol event... add_* remove_* ?!?!?! # + czy cb1 moze odwolywac sie do zwyklego tcl-a? # NIE, cb1 jest wywolywane przez inny watek # zdarzenia asynch w .NET opieraja sie na dodatkowym watku... # e {proc nic args {puts $args}} # + przy pomocy "nic" mozna sprawdzic jak callback jest wywolywany e { object import System.Net set x1 [object create -alias String "A ku ku"] # + do czego sluzy x1 ? proc cb1 res { global h1 puts $res set h2 [$h1 -alias EndGetResponse $res] puts $h2 set h3 [$h2 -alias GetResponseStream] puts $h3 #System#Net#WebAsyncResult#754 #System#Net#HttpWebResponse#762 #System#Net#WebConnectionStream#768 # + h3 to stream, z ktorego mozemy czytac odp. http... #global interp; tcl eval $interp "$h1 $h2 $h3" # + czy to dziala? niestety, NIE!! (inny watek) }} e { set h1 [object invoke -alias HttpWebRequest Create "http://wp.pl"] puts "" set q1 [$h1 BeginGetResponse cb1 $x1] # + w miejsce delegata podaje proc tcl-a "cb1" !!! } e {object invoke $q1 IsCompleted} #% True ii \$h1 #% System.IAsyncResult BeginGetResponse ( System.AsyncCallback System.Object ) System.Net.WebResponse EndGetResponse ( System.IAsyncResult ) System.Net.WebResponse GetResponse ( ) System.IO.Stream GetRequestStream ( ) # ... ii \$q1 exit