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@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-boun...@lists.runrev.com on behalf of > use-livecode@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…. > > > > > " <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 > > _______________________________________________ > 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