libUrl tsNet and socketTimeoutInterval

Charles Warwick charles at techstrategies.com.au
Tue Dec 12 23:14:03 EST 2017


BR,

You can definitely monitor all of your connections that use tsNet by setting a status callback like you have mentioned below.

The overhead of doing this will be determined by the amount of processing you do within the callback function.

Cheers,

Charles

> On 11 Dec 2017, at 5:46 am, Sannyasin Brahmanathaswami via use-livecode <use-livecode at lists.runrev.com> wrote:
> 
> @ Charles
> 
> It would appear that perhaps there is a possible global approach that could cover a wide variety of net access conditions.
> 
> am I being naïve or could it be this simple?
> 
> if we just have this running and available all the time
> 
> tsNetSetTimeouts… [add your params here] 
> 
> tsNetSetStatusCallback "urlCallProgressUpdate"
> 
> on urlCallProgressUpdate
>  # check the status of any and all URL download operations
>  # give user feedback in case connection drops or transfers speed drops below low limit
> end urlCallProgressUpdate
> 
> maybe that's really all that is needed. Then we don't worry about or code any kind of status monitoring into specific URL operations.
> 
> One could "dynamically" change the time outs if different scenarios called for allowing longer time spans, i.e users expect a wait while downloading a "package" but they the don't when loading a web page.
> 
> we might simply have this in back script for the whole app
> 
> command toggleNetMonitor  pBool
>  if pBool = "true" then
>      tsNetSetStatusCallback urlCallProgressUpdate
>  else
>    tsNetSetStatusCallback ""  
>  end if
> end   toggleNetMonitor 
> 
> I don't know if there is any overhead to leaving this call back be live "24-7-365" in the app or not… but this way we could turn it on and off if that is better practice.
> 
> BR
> 
> 
> On 12/8/17, 5:08 PM, "use-livecode on behalf of Sannyasin Brahmanathaswami via use-livecode" <use-livecode-bounces at lists.runrev.com on behalf of use-livecode at lists.runrev.com> wrote:
> 
>    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….
> 
> 
> 
> 
>    " <rdimola at 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
>        rdimola at evergreeninfo.net
> 
> 
>        -----Original Message-----
>        From: use-livecode [mailto:use-livecode-bounces at 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-bounces at lists.runrev.com on behalf of use-livecode at 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
>            rdimola at evergreeninfo.net
> 
> 
> 
>        _______________________________________________
>        use-livecode mailing list
>        use-livecode at 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 at 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 at lists.runrev.com
> Please visit this url to subscribe, unsubscribe and manage your subscription preferences:
> http://lists.runrev.com/mailman/listinfo/use-livecode





More information about the use-livecode mailing list