Encoding Arrays with File Paths

Alex Tweedly alex at tweedly.net
Mon Feb 24 20:21:12 EST 2025


On 25/02/2025 00:35, Bob Sneidar via use-livecode wrote:
> Okay I verified in my actual code. This is problematic if I dont know how much data is actually going to be sent. I ended up with roughly 138,000 bytes before it choked. I supposed I could start with 128k chunks then dial it down if its too much. I wish I know what the limiting factors are because this has to work over the internet.

No, please don't start down the path of "dialling down"; the point at 
which it will fail is highly variable dependent on network conditions.

Your easiest and safest way (or at least, the one I find easiest) is to 
use the length + data approach.

If you don't know the total amount when you are about to start sending, 
then you simply package up what you *do* know as a length+data, and use 
a special case check to know when everything has been sent.

For example, if you were going to send a folder-full of files, you could 
do something like:

put the files into tFiles
repeat for each line L in tFiles
    put L & CR & URL ("binfile:" & L) into tData
    put format("%012d", the number of bytes in tData) into tLength
    write tLength & tData to socket tWhateverSocketYouLike
end repeat

-- and send an indicator that we are done  - file name + data cannot be 
zero-length

put format("%012d", 0) into tLength
write tLength to socket tWhateverSocketYouLike


and read it as

on readalltherestofthedata
     read from tWhichSocketYouAreUsing for 12  with gotALength   -- read 
the length
end readalltherestofthedata

on gotALength pSocket, pData
    if pData = 0 then
       dispatch "alldone"
    else
       read from tWhichSocketYouAreUsing for pData  with gotFileData   
-- read the file name and data
    end if
end gotALength


on gotFileData pSocket, pData
    put line 1 of pData into tFileName
    put line 2 to -1 of pData into tData
    dispatch "processafile" with tFileName, tData
    readalltherestofthedata
end gotFileData


(Obviously, the above has been typed into an email - beware typos, etc.)

Alex.

P.S> yes, you could do ""%12d" rather than "%012d" - but if I ever 
finish up debugging it, I find the leading zeros a useful reminder that 
it's a fixed length integer. And I'm assuming that 12 digits is easily 
big enough for any file you are going to send :-)




More information about the use-livecode mailing list