World: r3wp
[Core] Discuss core issues
older newer | first last |
Vincent 28-Apr-2005 [969] | does port: open/binary tcp://219.147.198.195:1085 work? |
Anton 28-Apr-2005 [970] | >> system/schemes/default/timeout == 30 |
Micha 28-Apr-2005 [971x5] | open 219.147.198.195 1080 ping: 6312 |
how do to check loam time it will to flow away when port opens ? | |
handler: func [port action arg /local cmd send ping] [ switch action [ init [print "init" set-modes port [timeout: 00:05:00]] adress [print arg ] open [ping: to-integer (0:05:00 - get-modes port 'timeout )* 1000 ] close [print "close" close port] ] ] check: func [ p h] [ open/direct/binary/async join tcp:// [ p ":" h ] :handler ] check 219.147.198.195 1080 halt | |
how do to write this using harbour / awake ? without using from port / async ? | |
handler: func [port action arg /local ping] [ switch action [ init [print "init" set-modes port [timeout: 00:05:00]] adress [print arg ] open [print "open" ping: to-integer (0:05:00 - get-modes port 'timeout )* 1000 ] close [print "close" close port] ] ] check: func [ p h] [ port: open/direct/binary/async join tcp:// [ p ":" h ] :handler ] check 219.147.198.195 1080 | |
Anton 28-Apr-2005 [976x2] | gm: func [port][reform ["timeout:" get-modes port 'timeout]] handler: func [port action arg /local cmd send time] [ time: now/time/precise switch action [ init [ print [time gm port "--- init"] set-modes port [timeout: 0:00:05] ; five seconds ] address [print [time gm port "--- address lookup: " arg]] open [print [time gm port "--- open:" now/precise]] close [print [time gm port "--- close"] close port] error [print [time gm port "-- error:" mold disarm :arg] close port] ] ] check: func [p h][ open/direct/binary/async join tcp:// [ p ":" h ] :handler ] check 219.147.198.195 1080 |
I do not know how to do it non-async. | |
Micha 28-Apr-2005 [978x3] | how I use open / async harbour this after a dozen or so minutes application be closes |
handler: func [port ] [ ping: to-integer (0:00:30 - get-modes port 'timeout )* 1000 print [ "open" port/remote-ip port/remote-port "ping:" ping ] insert port join #{0401} [debase/base skip to-hex 80 4 16 to-binary 193.238.73.117 #{00} ] ] port: make port! tcp://219.147.198.195:1080 set-modes port [timeout: 00:01:00] port/awake: :handler insert tail system/ports/wait-list port open/binary port | |
how do to send to portu data when it is open ? | |
Pekr 30-Apr-2005 [981x5] | You can send data to your port using 'insert .... syntax is: insert port "hello" |
Micha - look at some cookbook articles for e.g. - http://www.rebol.net/cookbook/ | |
More about Rebol TCP networking - http://www.rebol.com/docs/core23/rebolcore-13.html | |
http://www.rebol.com/docs/core23/rebolcore-14.html | |
http://www.rebolforces.com/ | |
Micha 30-Apr-2005 [986x2] | rebol [] conn: make port! tcp://:80 black-lista: [ 69.64.51.223 194.69.207.145 80.252.0.145 194.69.207.165 217.73.17.115] adns: open/no-wait make port! dns:///async adns/awake: func [port /local dat][ data: copy port print data false ] insert tail system/ports/wait-list adns heandler: func [ port /local data dns ] [ print "new connetion" serwer: first port client: make port! tcp://222.76.73.113:1080 serwer/sub-port: client client/sub-port: serwer set-modes client [no-wait: true timeout: 00:01:00] set-modes serwer [no-wait: true ] wait serwer data: copy serwer dns: to-tuple copy/part skip to-binary data 4 4 insert adns dns ;print dns name either find black-lista dns [ close serwer print "firtled" print read join dns:// dns ] [ insert serwer join #{005A} [debase/base skip to-hex serwer/port-id 4 16 to-binary dns ] insert tail system/ports/timeout-list client open/binary client ping: to-integer (0:01:00 - get-modes client 'timeout )* 1000 print [ "open" ping ] insert client data wait client data: copy client client/awake: :response serwer/awake: :request insert tail system/ports/wait-list client insert tail system/ports/wait-list serwer ] false ] request: func [ port /local data ] [ data: make string! 10000 read-io port data 10000 either data <> {} [ insert port/sub-port data ] [ close port remove find system/ports/wait-list port port print "close connetion serwer" print length? system/ports/wait-list ] halt] response: func [ port /local data ] [ data: make string! 10000 read-io port data 10000 either data <> {} [ insert port/sub-port data ] [ close port remove find system/ports/wait-list port port print "close connetion client" print length? system/ports/wait-list ] halt] conn/awake: :heandler set-modes conn [no-wait: false] insert tail system/ports/wait-list conn open/direct/binary conn print "proxy" halt |
to improve someone this promissory note maybe ? | |
Tomc 30-Apr-2005 [988x2] | insert port |
without tail | |
Sunanda 2-May-2005 [990] | Anyone got a better way of resetting all the values in block to a single initial value? Just curious, as the change/dup looks awkward --which usually suggests I've missed something: blk: [ 1 2 3 4 5 6 7 8 9] change/dup blk 0 length? blk |
Ashley 2-May-2005 [991] | replace/all blk integer! 0 |
Sunanda 2-May-2005 [992x2] | Thanks! That works only if they _are_ all integers.....But that's easily fixed: replace/all blk any-type! 0 |
On a related theme......Is there an easy/built-in way to check if all values in a series are equal? I'm using all-equal?: func [ser [series!]] [ser = join next ser first ser] As in: all-equal? [1 1 1 ] == true all-equal? "yyy" true all-equal? %xxx true | |
Gabriele 2-May-2005 [994x3] | replace is mezzanine, so change/dup is going to be faster; also, replace is going to be much slower than the simple loop you could use to do what replace is doing in this specific case. |
i.e. forall blk [blk/1: 0] | |
(compare that to the source of replace) | |
Volker 2-May-2005 [997] | would prefer change/dup too. both lines look equaly ugly :) all-equal?: 1 = length? unique blk |
Anton 3-May-2005 [998] | Sunanda you could use: 1 = length? unique blk |
Sunanda 3-May-2005 [999] | Thanks guys! |
Micha 4-May-2005 [1000x2] | whois: func [ host /local port ][ port: make port! join tcp:// [192.149.252.44 ":43" ] port/awake: func [ port /local ][data: copy port either data [ show data ] [ close port remove find system/ports/wait-list port ] halt] insert tail system/ports/wait-list port open/no-wait port insert port join "+" [ host "^/"] ] show: func [ d /local alpha ][ alpha: charset [#"A" - #"Z" #"a" - #"z"] d: find/tail d "City:" a: copy d a: find/tail a alpha a: copy/part a find a "^/" print [ "City: " a ] b: find/tail d "StateProv:" d: copy b b: find/tail b alpha b: copy/part b find b "^/" print [ "StateProv: " b ] c: find/tail d "Country:" c: find/tail c alpha c: copy/part c find c "^/" print [ "Country: " c ] ] whois 24.3.46.214 |
how to use function parse , in order to to get the "city" , "stateProw" of ,"country" , ?? | |
Brock 4-May-2005 [1002x9] | ;Micha, this should do the trick, you will be returned three variables, city, stateprov, and country get-stateprov: [thru "Stateprov: " copy stateprov to "^/" to end] get-country: [thru "country: " copy country to "^/" to end] get-city: [thru "City: " copy city to "^/" to end] parse test [get-stateprov] parse test [get-country] parse test [get-city] |
; actually this is better.... get-city: [thru "City: " copy city to "^/"] get-stateprov: [thru "Stateprov: " copy stateprov to "^/"] get-country: [thru "country: " copy country to "^/" to end] parse test [get-city get-stateprov get-country] | |
there is probably a better way to skip the variable number of spaces following the labels you are searching for, but haven't any experience with parse for this yet. With what I have provided you may be able to get the rest to work . I believe you can use 'any to skip multiple or no occurences of a parse rule | |
mention in... parse test ...you should replace test with your d word. | |
in the parse rules get-city, get-stateprov; get-country, you can remove all of the spaces in the thru strings ie, "City: " can be just "City:". Parse takes care of the spaces between the words. | |
show: func [ d /local alpha ][ get-city: [thru "City:" copy city to "^/"] get-stateprov: [thru "Stateprov:" copy stateprov to "^/"] get-country: [thru "country:" copy country to "^/" to end] parse d [get-city get-stateprov get-country] print [ "City: " a ] print [ "StateProv: " b ] print [ "Country: " c ] ] | |
If you didn't know the order of the data being provided to you then you could generalize the code even further... here are the two lines that would change.... get-country: [thru "country:" copy country to "^/"] ; remove "to end" parse d [any [get-city get-stateprov get-country] to end] ; added 'any block and "to end" | |
I WISH I WAS ABLE TO DELETE... I made a mistake <blush>, I forgot to remove your old variable names and there is a small error in the code I've posted above. | |
;here's a working show... but didn't easily come across a solution to allow for an unkown order of items to find show: func [ d /local alpha ][ get-city: [thru "City:" copy city to "^/"] get-stateprov: [thru "Stateprov:" copy stateprov to "^/"] get-country: [thru "country:" copy country to "^/"] parse d [get-city get-stateprov get-country to end] print [ "City:" tab trim city newline "Stateprov:" tab trim stateprov newline "Country:" tab trim country newline ] ] | |
MikeL 5-May-2005 [1011] | Brock, A good example to look at for parsing is the make-doc script. Carl has updated with makedoc2.r available at this address http://www.rebol.org/cgi-bin/cgiwrap/rebol/view-script.r?script=makedoc2.r but it is doing what your are asking about for the make doc source script which can have tags starting with === or --- followed by some text and a newline. The key is "rules: [some commands]" Have a look at it. |
Brock 6-May-2005 [1012] | Will do. |
Gordon 6-May-2005 [1013x2] | Hello; I'm wondering if there is a more efficeint way to assign values directly to a block of variables. My example involves reading lines from a file and assigning them one at a time to each variable. Here is the line format: LineFormat: [DateStr Manufacturer MF_Part TD_Part Desc Price1 Price2 Retail Stock Misc] Data: read/lines Filename Str: first Data Then I go though the String 'Str' and do the assigns DateStr: First Str Manufacturer: Second Str MF_Part: Third Str TD_Part: Fourth Str Desc: Fifth str Price1: skip Str 5 Price2: skip Str 6 Retail: skip Str 7 QOH: skip Str 8 Misc: skip Str 9 Am I missing something obvious about assigning one block of values to another block of variables? |
Oops forgot a step; should be: Data: read/lines Filename DataStr: first data Str: parse/all DataStr none (the parse splits the lines of data into a block of values) | |
DideC 6-May-2005 [1015x3] | SET is your friend ! set [SatStr Manufacturer MF_part TD_Part Desc ...] Str |
ie: | |
a: [24 "Hello" 1.2.3] set [b c d] a print [d c b] | |
Gordon 6-May-2005 [1018] | I'll give it a try. Thanks - BRB |
older newer | first last |