Ralph -- I sent this to you off list by mistake

copying here FWIW if anyone is lurking. This all looks great and covers 
"download files" use cases

The remaining puzzles are one off url calls from/for mobile controls :

1)  remote path to audio.mp3; for player
2) url web calls in browser widget to
     a) web pages
     b) youtube (video streaming)

and how these play with TSNet, bandwidth dropping below set limits, or dropped 
connections.

As yet mysterious….




" <rdim...@evergreeninfo.net> wrote:

    BR,
    
    I async also works in iOS just fine and dandy. In My app I am getting the 
background images for cards while the user first logs in. Async allows the 
images to be downloaded in the background. This allows me to change images 
without releasing a new app without hanging the app up when I used blocking 
libURL. The implementation was so easy it was frightening. I also have 6 of 
these queued up and running at the same time!
    
    First is a utility(NetworkType) to check the type of networking and a tsNet 
initialization handler (EISinitTSnet):
    
    --------------------------------------------------------
    function GetNetworkType
       local tLibUrlDriver
       
       try
          put the behavior of stack"revLibUrl"into tLibUrlDriver
       end try
       if tLibUrlDriver is empty then
          return "Sockets"
       else
          return "tsNet"
       end if
       
    end GetNetworkType
    
    command NetworkType
       if GetNetworkType() = "Sockets" then
          answer"tsNet is disabled"
       else
          answer "tsNet in use"&cr&"Version==>"& tsNetVersion()
       end if
    end NetworkType
    
    command EISinitTSnet
       local tResult
       
       try
          tsNetInit
          put the result into tResult
          if tResult is not empty then
             if tResult = "tsneterr: Already initialised" then
             else
                answer tResult
             end if
          else
             tsNetSetTimeouts 60, 5000, 5000, 5000, 5, 10000
          end if
       catch someerror
          if IsInternalUser(true) then answer TranslateError(someerror)
       end try
    end EISinitTSnet
    
    
----------------------------------------------------------------------------------------------------
    
    The Get_Path function below is a function returns paths that are 
transparent between IDE and mobile. (Richard G. I got sucked into the returning 
the trailing slash before I realized it was not the best way to do it). I 
hacked out this code so there could be an error but the basic idea is here.
    
    I call this first handler(StartBackgroundImageDownload) 12 time quickly and 
all the downloads work. The app is fully functional while the downloads are in 
progress. I use the filename as the pID. This makes things easy when the 
download completes. I have not tested timeouts yet. That's the next step, 
handling the in/out of network access/slow network speed. Standby....
    This is the guts of the asysnc file downloading:
    
---------------------------------------------------------------------------------------------------
    command StartBackgroundImageDownload pImageName
       local pHeaders, tStatus
       
       put tsNetGetFile(pImageName, Get_Path("Updates")&pImageName,  \
             "https://xxx.com/someFolder/"&; \
             urlencode(pImageName), pHeaders, 
"DownLoadBackgroundImageComplete") into  tStatus-- start download
       if tStatus is not empty then
             answer tStatus
             end if
       
    end StartBackgroundImageDownload
    
    on DownLoadBackgroundImageComplete pID, pResult, pBytes, pCurlCode
       
       local tData, tHeaders
       
       --answer 
"File==>"&pID&cr&"Bytes==>"&pBytes&cr&"Result==>"&pResult&cr&"CurlCode==>"&pCurlCode
       
       
       if pCurlCode is not 0 then
          
             answer tsNetRetrError(pID)
       else
          if pResult = 404 then
             answer "File'"&&pID&&"not found==>"&pBytes&&"Result==>"&pResult
             delete file Get_Path("Updates")&pID -- delete file with 404 error 
in it
          else
             --answer 
"File==>"&pID&cr&"Bytes==>"&pBytes&cr&"Result==>"&pResult&cr&"CurlCode==>"&pCurlCode
             if pBytes > 2000 then -- GOOD DOWNLOAD
                rename file (Get_Path("Updates")&pID) to 
(Get_Path("BackgroundImages")&pID) -- file download complete
                
                   --answer "File'"&&pID&&"has been downloaded. 
Result==>"&pResult
               
             else
                   answer "File'"&&pID&&"has been downloaded but is too 
small==>"&pBytes&&"Result==>"&pResult -- this was before I had the 404 check
                   delete file Get_Path("Updates")&pID
             end if
          end if
       end if
       
       tsNetCloseConn pID
       
       
    end DownLoadBackgroundImageComplete
    
    ---------------------------------------------------------------------
    
    Ralph DiMola
    IT Director
    Evergreen Information Services
    rdim...@evergreeninfo.net
    
    
    -----Original Message-----
    From: use-livecode [mailto:use-livecode-boun...@lists.runrev.com] On Behalf 
Of Sannyasin Brahmanathaswami via use-livecode
    Sent: Friday, December 08, 2017 2:21 PM
    To: How to use LiveCode
    Cc: Sannyasin Brahmanathaswami
    Subject: Re: libUrl tsNet and socketTimeoutInterval
    
    Awesome Ralph:
    
    Looks like we need to crowd fund Charles for documentation (smile)
    
    You are about 3 days ahead of me… can you post some code snippets  of your 
methods?
    
     
    
    On 12/7/17, 1:54 PM, "use-livecode on behalf of Ralph DiMola via 
use-livecode" <use-livecode-boun...@lists.runrev.com on behalf of 
use-livecode@lists.runrev.com> wrote:
    
        Ok, I just got async tsNet working in IDE and Android(Testing iOS 
later). I works great! Hat tip to all the contributors. One question and one 
Observation:
        1) How do you query the current tsNet timeout settings? I have quite a 
few places where I save the socketTimeoutInterval, set it to a new value, do 
something and then set it back to the saved timeout. I don't see a way to query 
this in the dictionary.
        2) I seems the you don't need to do a "tsNetInit" in the IDE. In the 
IDE one gets "tsneterr: Already initialized". On Android this error does not 
occur.
        
        Ralph DiMola
        IT Director
        Evergreen Information Services
        rdim...@evergreeninfo.net
        
        
    
    _______________________________________________
    use-livecode mailing list
    use-livecode@lists.runrev.com
    Please visit this url to subscribe, unsubscribe and manage your 
subscription preferences:
    http://lists.runrev.com/mailman/listinfo/use-livecode
    
    

_______________________________________________
use-livecode mailing list
use-livecode@lists.runrev.com
Please visit this url to subscribe, unsubscribe and manage your subscription 
preferences:
http://lists.runrev.com/mailman/listinfo/use-livecode

Reply via email to