 |
The early days of creating isolated multimedia on CD-ROM are over. In
todays wired world, everybody wants to be connected, with good reason.
There are so many fascinating things you can do by wiring multimedia to
the Web, its mind boggling. Once you clear the initial hurdles, its
really not that difficult to connect your multimedia to the web using
the powerful Macromedia Director.
During the early development of our on-line game, Quipples,
the Internet game show of satirical riddles, I ran into quite a few
problems trying to get the project to run properly through a proxy. I
needed a controlled environment in which I could safely test my NetLingo.
So, I created the DreamLight
NetLab, as seen above.
Much of my trials and tribulations with NetLingo can be seen below in
excerpts from the Direct-L and Shocker mailing lists including some never
before published tips and tricks. Armed with the following NetLingo tips,
and DreamLight NetLab, you should be able to easily avoid some of the
pitfalls that slowed me down.
What are you waiting for? Go wire your multimedia up to the web! See
you on-line...
|
Date: Jul. 26, 2001
Please recommend a way I can include an e-mail link in a projector without
having a browser open up when the link is clicked. Thanks.
You can use an editable field to let the user enter their message, then send that to a cgi script like formmail (using postNetText) on your web server to send the message. Then no browser or third party Xtra is required.
-MikeS
Date: Jun. 20, 2001
I think you're supposed to be able to use N streams, but as we
old-time Director folks know, things aren't usually that easy...
What I did to manage multiple streams in Quipples was to create a NetStack object that handles all network requests. I push any number of NetOp objects on it and it pops them off and executes them one at a time. It follows the current NetOp and reports on its progress notifying the requesting object when a specific requested NetOp has completed.
This way I can initiate any number of network requests and my network manager executes them one at a time. If I really need to run them concurrently, I can initiate multiple NetStack objects, one for each true stream I wish to manage. I can even prioritize NetStacks or individual NetOp objects...
-MikeS
Date: Aug. 24, 2000
I was reading some of your posts on Direct-L (how I found out about
DreamLight NetLab)
Cool, I'm in the process of gathering them together and posting a new
NetLingo page to our DreamLight Director Talisman, Should be posted sometime
next week.
and I think I've run across the same problem you did - our program
craps out on GetNetText calls - sometimes. Never a problem via dial-up,
and the program works fine at several different companies which I know
have firewalls, but we've found one so far (Wall St. Journal) where it's
going into an endless loop waiting for the getnettext results - sounds
like your "60 second" bug.
Could be... if you're using proxyServer() already. If you're not using
proxyServer() then it just might not be getting through at all (since
it might need proxyServer()). You can test this in the NetLab by turning
proxyServer() on and off and trying to getNetText the URL in question.
If it gets through when proxyServer() is off, then you don't need it,
in that instance. If it can't get through at all, then try turning it
on. The problem we ran into is only on certain combinations of proxies/servers
and it lets you through, but then it stalls out for up to 60 seconds before
netDone() goes TRUE.
Did you find any work around to this problem?
Yes and no... We couldn't find a way to stop the 60 second stall when
accessing certain sites through certain proxies. We didn't have any info
on how the network libraries might be handling things, so we were pretty
much in the dark... What I ended up doing as a temporary workaround was
setting a flag if the user was running through a proxy (known because
they entered data to turn on proxyServer() in our proxy dialog) and allowing
an extra 60 seconds before we gave up on the connection. I added another
thermometer readout to our ioSCOPE communicator to show the stall time.
So at least if it stalls, the user still sees something moving and knows
to wait, and how long before it gives up...
Does it have anything to do with the proxyserver() command?
Yes, this particular stalling problem only happens when using the proxyServer()
command to access through a proxy (only certain combinations of proxies/servers).
Otherwise you're going direct without a proxy. It also only happens when
run as a projector, or authoring (through proxyServer). It does not happen
when run as shockwave through Netscape where Netscape uses it's own code
to communicate with the proxy (haven't tested in IE). So I think it has
something to do with Director's network libraries.
I think they might have their proxy server disabling Port 80...
If they do, it would most likely block all access (until you use proxyServer()),
not just create a 60 second delay like what I was getting.
If I threw up a dialog box for a user to input info to pass to
the proxyserver() function, should they enter my IP address (where the
text file is) as the second argument?
No, they would enter the IP (or url) of their own proxy server. It's
the same setting that they would have to enter into Netscape's proxy settings
to be able to get out onto the web. It should look like this:
proxyServer( #http, "123.456.789.123", 8080 )
or like this...
proxyServer( #http, "proxy.mydomain.com", 8080 )
Of course substitute your own proxy address, and port number if it's
different.
What number should they use for port?
I think the default is 8080, I'd try that... also check Netscape's proxy
settings since they should be the same. Unless Netscape is set to some
URL that automates the proxy set up. MediaOne had a JavaScript routine
set as the URL which told Netscape the real URL and port to use. I had
to read the Javascript routine to figure out what the real proxy URL and
port were.
Sorry to ask such dumb questions, but I'm fairly new to NetLingo
and am finding this particular function very sparsely documented...
Not at all! Join the club... the freewheelin' proxyServer() had me pulling
my hair out. I got so frustrated, that I had to write the NetLab just
to test the thing... and even then proxyServer() still causes stalls in
some instances... ;-)
Hope it helps!
Good Luck!
-MikeS
Date: Aug. 23, 2000
The question... when-where-how in lingo do you use the command,
for example:
proxyServer #http,"123.456.789.100",80
I don't understand where you would use it (on startmovie...set it
once) or use it everytime you use a getNetText command. I'm just generally
cornfused about how to use it. I've searched the usual sites and haven't
found any examples of its use. Appreciate any help.
You only need to issue it once at the beginning, before issuing your
first getNetText. It remains in effect until set to something else. This
should do the trick (I think 8080 is usually the default port for an http
proxy).
on startMovie
-- set http proxyServer to address "123.456.789.100" on port 8080
proxyServer( #http, "123.456.789.100", 8080 )
end
Beware however that we have encountered what appears to be a problem
in the D7/D8 Network libraries that causes a delay (sometimes up to a
minute) when using proxyServer through some proxies accessing some sites.
What happens is that netDone does not turn TRUE until well after the download/preload
is complete. It happens when run as a projector or authoring but not as
Shockwave in Netscape (which uses its own net libraries). My best guess
is that Director or the proxy is waiting for something from the other
or from the server, and then times-out when it doesn't receive it.
Good Luck,
-MikeS
Date: Aug. 1, 2000
Is it possible for you to share/point us to these Lingo/Perl translation
tools?
Here are mine...
I simply use property lists in Director and hash arrays in Perl.
Here are a few snippets of interface code that are similar to what I've
created for Quipples: The Internet Game
Show of Satirical Riddles. http://Autitons.com
Perl is quite a bit trickier than Lingo, so PLEASE tread with caution...
This code in particular uses advanced techniques such as references, recursion
etc... ;-)
THE FOLLOWING CODE IS PROVIDED HERE FOR INSTRUCTIONAL PURPOSES ONLY.
YOU MAY USE IT IN YOUR OWN PERL SCRIPTS PROVIDED THAT THE COPYRIGHT LINES
APPEAR AS FOLLOWS IN EACH ROUTINE...
# (C) 2000 DreamLight Incorporated. All Rights Reserved.
# DreamLight.com, Autitons.com
THE COPYRIGHT LINES MAY NOT BE REMOVED OR MODIFIED IN ANY WAY. THANK
YOU! THIS CODE IS STILL UNDER DEVELOPMENT. IT IS NOT GUARANTEED TO WORK
IN ALL CASES. DREAMLIGHT MAKES NO WARRANTIES WHATSOEVER REGARDING THE
FOLLOWING CODE OR IT'S USE. USE AT YOUR OWN RISK.
sub item_to_lingo_str {
# (C) 2000 DreamLight Incorporated. All Rights Reserved.
# DreamLight.com, Autitons.com
# check a single Perl item reference, determine it's type
# if it's a scalar, simply dereference it and return its value as a string
# if it's an array or hash, pass it on for further processing...
my ($item_ref, $string, $item);
$item_ref = shift @_;
$string = '';
SWITCH: { $_ = $item_ref;
if (/^SCALAR/) {
# Dereference the item reference and return the scalar
$item = $$item_ref; #dereference item
if ($item =~ /^SCALAR|^ARRAY|^HASH/) {
# the item is itself a reference so it must be dereferenced
# call item_to_lingo_str again using recursion
$string = &item_to_lingo_str( $item );
} else { # Not a reference so return it as a string
$string = $item;
}
last SWITCH;
}
if (/^ARRAY/) # Pass the array reference off for further processing
{ $string = &array_to_lingo_list( $item_ref ); last SWITCH; }
if (/^HASH/) # Pass the hash reference off for further processing
{ $string = &hash_to_lingo_proplist( $item_ref ); last SWITCH; }
$string = "_ERROR_NO_REF_PASSED_";
}
return $string;
}
sub array_to_lingo_list {
# (C) 2000 DreamLight Incorporated. All Rights Reserved.
# DreamLight.com, Autitons.com
# Take a Perl array reference and convert the array's contents
# to a Lingo list formatted as a string.
my ($array_ref, @array, @list_array, $item);
$array_ref = shift @_;
@array = @$array_ref; # dereference the array from the array reference
#build an array with all values converted to lingo strings
@list_array = ();
foreach $item ( @array ) {
push( @list_array, &item_to_lingo_str( \$item ) );
}
# return the array as a lingo formatted list
return "[ " . join( ", ", @list_array ) . " ]";
}
sub hash_to_lingo_proplist {
# (C) 2000 DreamLight Incorporated. All Rights Reserved.
# DreamLight.com, Autitons.com
# Take a Perl hash reference and convert the hash's contents
# to a Lingo property list formatted as a string.
my ($hash_ref, %hash, @list_array, $key);
$hash_ref = shift @_;
%hash = %$hash_ref; # dereference the hash from the hash reference
#build an array with key/value pairs formatted as text "#prop:value" pairs
@list_array = ();
foreach $key ( keys %hash ) {
push(@list_array,'#'.$key.':'.&item_to_lingo_str( \$hash{$key} ) );
}
# return the array as a lingo formatted list
return "[ " . join( ", ", @list_array ) . " ]";
}
The above routines can be used to pass a Perl hash to Director as a
property list like this:
sub return_lingo_stats {
# (C) 2000 DreamLight Incorporated. All Rights Reserved.
# DreamLight.com, Autitons.com
my($stat_hash_ref) = @_;
print "Content-type: text/plain\n";
print "\n";
print &item_to_lingo_str( $stat_hash_ref );
}
&return_lingo_stats( \%file_stats ); #pass file_stats by reference
# and return a lingo property list formatted as a string.
This Perl script is then queried from inside Director in a routine like
this:
on getFileStats Me
-- query stats.cgi on the server using getNetText
-- through the NetStack object using the GetText netOp object...
-- to check file modification dates
global gBinPath, gNetStack
filePathStr = Me.FilePath.givePathStr()
gNetStack.doNetOp( #GetText, Â
[ gCGIPath.givePathStr() & "stats.cgi/" & filePathStr, Me ] )
end getFileStats
filePathStr is a string returned from my cross platform FilePath object
This is then passed to gNetStack which is my Internet communications manager
which initiates a GetText netOp object (which manages a call to getNetText
and returns the result in netTextResult when it arrives...)
Does anyone on the list know any good sources for PERL/CGI?
I taught myself most of what I needed to know with the following book:
"Perl Core Language: Little Black Book" by Steven Holzner. There were
a few minor errors in the book, but for the most part, it was a good read
(if you like programming books that is... ;-).
I do all my Perl programming in BBEdit and test with MacPerl before uploading
to a Unix server. I also relied heavily on the DreamLight
NetLab to test my Lingo Internet communications.
Hope this helps... :-)
-MikeS
Date: July 19, 2000
>Has anyone found any problems using getstreamstatus with a gotonetmovie
>call? I'm finding that the loading bar I'm using (actually pretty much
>straight from the Library) is just sticking on 0.
Are you using ProxyServer() by any chance? If so, I ran into a bug with ProxyServer() (or maybe the network libraries Director uses) causing a delay when dealing with certain proxy servers. Mediaone's roadrunner server showed the problem.
From what I could gather through my investigations it appears that there may be a bug in the network libraries that Director 7.0.2 uses (I haven't tested it in D8). It seems that certain proxy servers may be waiting for something from Director or vice versa. Eventually the proxy server times out and finally goes on to the next thing. During this wait your connection may appear to stall out.
Here are some excerpts from my initial report on the ProxyServer() issue:
1) Streaming swa audio through the proxy (by setting the url of the swa member and then playing) hangs for almost exactly a minute after the file has streamed in. Checking streamstatus reports "InProgress" for 60 seconds after the file is done. Both in authoring and projectors.
Workaround, I can simply issue a netAbort(swaMember.url) as soon as bytesSoFar matches bytesTotal. That works...
2) A similar problem however occurs when using preloadNetThing or downloadNetThing. It comes in fine, but then sits there reporting "inProgress" for almost exactly 60 seconds before netDone becomes true and state finally changes to "Complete"
I'm trying to use downloadNetThing and I can't netAbort() that when bytesSoFar matches bytesTotal because the file ends up in the cache and never makes it to the actual destination.
So, I then tried using preloadNetThing instead and netAbort() it when it's bytesSoFar matches bytesTotal. I then issue a downloadNetThing on the same URL and it moves the file from the cache to the destination and returns an immediate netDone(). I thought that was the solution...
Unfortunately if I then immediately issue a new preloadNetThing on another file, that hangs on "Connecting" for almost exactly 60 seconds if the proxy is on...
Without using ProxyServer(), there is no delay on any of this...
It seems that the server and/or network Xtra running through a proxy in Director 7.0.2 (MacOS 8.6 + mediaOne cable modem) is waiting for something else between network downloads and only giving up after a 60 second time out.
I don't think it's the proxy itself, since Netscape has no trouble. If I manually enter the same proxy settings in Netscape, clear the cache, and then manually access the same files in Netscape they load immediately without any such 60 second pause between downloads...
Here's an excerpt to Shocker regarding running a controlled test through a proxy using the DreamLight NetLab, a MIAW Xtra I wrote to help test Director's network operations and try to find a solution to this problem.
1) It works fine with no delay when run as Shockwave through Netscape. In that case, the Lingo code is identical, so we know it's not a problem with the Lingo code itself.
2) In that case, the only real difference is that Shockwave is relying on Netscape's communication with the proxy rather than Director's communication with the proxy.
I had a few people try it through various proxy servers. It seems some servers stalled more than others. But they only stalled when run in Director or a projector. There was no stall when run as Shockwave in Netscape 4.7. I have not tested any of this in D8.
Date: Mar. 5, 2000
> I get a 60 second stall between all net requests.
It may be a number your proxy is responsible for rather than Director,
Yes, Good Point!
I agree that the Proxy could be timing out waiting for something from
Director, rather than the other way around. Or it could even be waiting
for something from the Server, since it only happens when pulling from
some servers such as go.com. However, I still think that even if it is
a proxy or server timeout, that Director is not communicating with the
proxy properly, for a couple of reasons...
1) It works fine with no delay when run as Shockwave through Netscape.
In that case, the Lingo code is identical, so we know it's not a problem
with the Lingo code itself.
2) In Netscape, the only real difference is that Shockwave is relying
on Netscape's communication with the proxy rather than Director 7's communication
with the proxy.
Since Netscape has no problems, the proxy and web server are most likely
OK. If there is some type of conflict or oddity between the server and
the proxy, then Netscape may have a workaround built in that Director
may lack...
Does anyone out there know what the specific differences may be, between
the way D7 communicates through ProxyServer(), and the way Netscape communicates
with a Proxy? Something must be different, and D7's appears to be somewhat
problematic.
Since you see a 14 second delay when pulling them through your proxy,
are there any timeouts set that you can see in your proxy configuration
that may be 14 or 15 seconds? Since I'm using MediaOne's proxy, I don't
really have any way to check anything about the Proxy itself. All I can
do is run tests through it.
The file size numbers below were bothering me until I realized
that the
page we are testing has dynamic elements,
Yes, I wasn't really worried about the sizes though, mostly the 60 second
delay. Here are a few tests on a more stable page just for comparison...
Test URL: http://info.go.com/doc/policy/privacy.html
Running NetLab as MIAW
inside D7.0.2 (same config and procedure as before)
D7 ProxyServer( #http, "proxy.ne.mediaone.net", 8080 )
operation |
bytesSoFar & bytesTotal |
StallTimer (Secs:Ticks) |
getNetText: |
33.77K |
*59:33 |
getNetText: |
33.77K |
*59:33 |
getNetText: |
33.77K |
*59:29 |
Running NetLab as Shockwave
inside Netscape Communicator 4.7
Netscape's http proxy set manually to: proxy.ne.mediaone.net, 8080
Clear Netscape's cache and ClearCache before each test
operation |
bytesSoFar & bytesTotal |
StallTimer (Secs:Ticks) |
getNetText: |
33.77K |
00:12 |
getNetText: |
33.77K |
00:23 |
getNetText: |
33.77K |
00:22 |
-MikeS
Date: Mar. 4, 2000
Ok, using NetLab as an xtra and nabbing I get up to 55699 and
a stall for around 14 secs until I get a netDone. Interestingly, the byte
count before the stall is always higher than the count reported when netDone
is received for this url.
Here are some results from my NetLab tests on http://abcnews.go.com/index.html
Home system: D7.02, MacOS 8.6, StarMax 3000/200, 160MB RAM, 30MB for Director
MediaOne, Lancity personal cable modem
All results shown are when netDone goes TRUE. ClearCache before each
test
Running NetLab as MIAW
inside D7. D7 ProxyServer( #http, #stop )
operation |
bytesTotal |
bytesSoFar |
StallTimer (Secs:Ticks) |
preloadNetThing: |
56164 |
56164 |
01:00 |
preloadNetThing: |
56120 |
56120 |
01:16 |
downloadNetThing: |
63295 |
63295 |
00:13 |
downloadNetThing: |
56164 |
56164 |
00:12 |
getNetText: |
63282 |
63282 |
01:27 |
getNetText: |
56020 |
56020 |
01:17 |
Running NetLab as MIAW inside D7.
D7 ProxyServer( #http, "proxy.ne.mediaone.net", 8080 )
operation |
bytesTotal |
bytesSoFar |
StallTimer (Secs:Ticks) |
preloadNetThing: |
63295 |
63295 |
* 59:33 |
preloadNetThing: |
63295 |
63295 |
* 59:57 |
downloadNetThing: |
63295 |
63295 |
* 59:33 |
downloadNetThing: |
63295 |
63295 |
* 60:00 |
getNetText: |
63294/63216 |
63294/63216 |
* 59:44 |
getNetText: |
63294/63216 |
63294/63216 |
* 59:31 |
|
before/after netDone() |
|
Running NetLab as Shockwave inside Netscape Communicator 4.7
Netscape's http proxy set manually to: proxy.ne.mediaone.net, 8080
Clear Netscape's cache and ClearCache before each test.
operation |
bytesTotal |
bytesSoFar |
StallTimer (Secs:Ticks) |
preloadNetThing: |
57049 |
57049 |
00:00 |
preloadNetThing: |
57061 |
57061 |
00:00 |
getNetText: |
64183 |
64183 |
00:11 |
getNetText: |
56981 |
56981 |
00:11 |
Fwiw, when I use my tools in authoring or as a projector I see
the same thing.
So at least we know it's not a problem with NetLab's Lingo...
Yeah, so when my tools piggybacked on top of Netscape's net stuff
hit the abcnews.go page, it works just fine
Same here, running NetLab as SW inside NS, using the same proxy settings
in Netscape works fine with NO delay whatsoever. Running NetLab inside
D7 using ProxyServer() however, I get a 60 second stall between all net
requests. Anybody know of anything inside Director's network libraries
that has a 60 second time out by any chance?? I don't think it's a coincidence
that all the stalls are almost exactly 60 seconds. The small discrepancies
(<1sec) are most likely due to slight variations in timing between frames
and network messages at run time.
Still don't know why some sites work and some don't -- different
servers?
To me, it sure looks like there is a problem in D7's handling of ProxyServer()
(or a problem in the network libraries that D7 relies on.) that only occurs
when certain servers are accessed through certain proxies, and maybe only
on the Mac.
NetLab is pretty
cool, btw!
THANKS!!
-MikeS
Date: Mar. 3, 2000
Hi Lewis,
Thanks for the reply! I REALLY appreciate it!
my proxy (Squid/2.2.STABLE5) work fine.
Great, it's a slippery one alright... Was this test on the Mac? What
type of connection are you using, Mine's a MediaOne cable modem...
If you can try it again with the DreamLight
NetLab, then we'd know we are both testing it with the same Lingo
code at least... What happens for me is that some sites stall and the
NetLab's StallTimer runs up almost exactly to 60 seconds from the last
byte downloading till netDone() becomes true and I get a Complete status.
If I abort and try another, that one hangs on Connecting until those 60
seconds have elapsed.
Do you know what proxy MediaOne is using?
I think RoadRunner uses a Microsoft DHCP server that has a bug in it,
that sometimes causes problems for the Mac pulling up an IP address. Though
this bug shouldn't be the problem, since I verify the IP and connection
before running these tests. I'll have to look into their Proxy server
further though, It may be a Microsoft proxy server, but I'm not sure.
http://macromedia.com/support/director/contents.html
This page is sent without content length in it's header.
What are you using to examine the header content?
http://abcnews.go.com/index.html
This file has a pragma no-cache meta tag.
Yes I noticed that but don't think it's the problem since this was just
one example of a file with the 60 second delay. It happens to many, I'm
only using web pages here as examples. I first noticed the problem when
the ioSCOPE download's .cct files to
update itself when run as a projector. To be sure it wasn't a problem
on my server, or with my files, I did a quick search for simple web files
that also exhibited the problem.
Here's another one, on my site, that also exhibits the delay... Actually
any file on my site or on "go.com" have the same problem. http://Autitons.com/index.html
I assume you are doing your testing from authoring or a projector
Yes, the DreamLight ioSCOPE runs as a projector, so I'm most concerned
with downloads in a projector and also during authoring for testing purposes.
-- do ya get the same behavior if you try it as a SW movie in
Netscape
(I'm sure you know IE Mac uses the same net libraries as authoring/projectors)?
Great idea! I haven't tried it as a SW movie in Netscape but I have manually
tested the proxy and URL's via Netscape itself which showed no delay.
That's why I suspect it has something to do with D7's handling of the
ProxyServer(). But I can run some tests via SW in Netscape, especially
since the DreamLight NetLab
is itself a dcr... I'll let you know the results. Have to run them at
home over the weekend though since that's where my MediaOne cable modem
is... Last couple of days I was hacking at this problem at home. Today
I came to the office to work on other parts of the project (and to calm
down a bit, since this is really driving me crazy right about now... ;-)
Thanks,
-MikeS
Date: Mar. 1, 2000
Here's some more info on the ProxyServer stall problem as the hunt continues...
It may possibly be server (or server configuration) related.
If I pull up this file from Macromedia's web site using getNetText through
the mediaOne proxy it comes in and completes without a problem...
http://macromedia.com/support/director/contents.html
But this file from ABC's server shows the 60 second delay from the time
the last byte is loaded and the time netDone becomes true...
http://abcnews.go.com/index.html
They both come through as netMIME type: text/html when finally done,
so I don't think it's a MIME problem.
It seems to me, that one is waiting for something it's not getting and
it's giving up in 60 seconds. Does anyone know what it might be waiting
for?
This only happens when I'm pulling them through the proxy server. They
both work fine when I turn off the proxy and access them directly.
MacOS 8.6, D7.0.2, MediaOne cable modem
-MikeS
PS. I'm not really trying to use these particular web files, I just
wanted a couple of high profile examples so I wouldn't be told that "my"
server is just messed up... ;-)
Date: Mar. 1, 2000
Hey gang,
To get around the problem of MultiUser Xtra not working through a proxy,
I ended up writing a Perl script that can be queried with getNetText to
retrieve a file's last mod date, time and size before downloading it.
That works fine...
So then I went about creating an MUI dialog to allow the user to enter
their proxy settings and then use them to set ProxyServer().
That works fine...
Then I came across some new problems. I'm wondering if anyone else out
there has encountered these problems and if so if anyone has any better
solutions...
1) Streaming swa audio through the proxy (by setting the url of the
swa member and then playing) hangs for almost exactly a minute after the
file has streamed in. Checking streamstatus reports "InProgress" for 60
seconds after the file is done. Both in authoring and projectors.
Workaround, I can simply issue a netAbort(swaMember.url) as soon as
bytesSoFar matches bytesTotal. That works...
2) A similar problem however occurs when using preloadNetThing or downloadNetThing.
It comes in fine, but then sits there reporting "inProgress" for almost
exactly 60 seconds before netDone becomes true and state finally changes
to "Complete"
I'm trying to use downloadNetThing and I can't netAbort() that when
bytesSoFar matches bytesTotal because the file ends up in the cache and
never makes it to the actual destination.
So, I then tried using preloadNetThing instead and netAbort() it when
it's bytesSoFar matches bytesTotal. I then issue a downloadNetThing on
the same URL and it moves the file from the cache to the destination and
returns an imediate netDone(). I thought that was the solution...
Not so fast...
Unfortunately if I then immediately issue a new preloadNetThing on another
file, it hangs on "Connecting" for almost exactly 60 seconds if the proxy
is on...
When going directly there is no 60 second delay on any of this...
It seems that the network Xtra running through a proxy in Director 7.0.2
(MacOS 8.6 + mediaOne cable modem) is waiting for something else between
network downloads and only giving up after a 60 second time out. Anyone
out there know what it's waiting for? Or how to make it give up faster?
I don't think it's the proxy itself, since Netscape has no trouble.
If I manually enter the same proxy settings in Netscape, clear the cache,
and then manually access the same files in Netscape they load immediately
without any such 60 second pause between downloads...
Any ideas would be greatly appreciated!! Anyone else out there wrestling
with the proxyServer()... ;-)
-MikeS
PS. I created a neat little movie called DreamLight(R)
NetLab(TM) to let me test all this stuff in better detail. It can
control the proxy, cache, issue preloadNetThing, downloadNetThing, getNetText,
netAbort and monitor the progress. Sort of like I did with the DreamLight(R)
RAMLight(TM)...
Date: Jan. 13, 2000
It is also similar to Michael Scaramozzino's problem with ioSCOPE
described in Direct-L on
Date: Fri, 17 Dec 1999 22:30:15 -0500
From: Michael Scaramozzino
Subject: NineOh/ioSCOPE (multiuser Xtra) Proxy fix test...
He got no Direct-L responses to help me out.
A couple of helpful people from Direct-L did offer to run my test where
I had attempted to use proxyServer(). I had also posted some questions
to the Shocker list but got no reply there at all. Since I couldn't find
any further info about the problem, and no one had any definitive answers
to offer, this is what I have surmised through my tests...
As far as I can tell so far in D7...
1) MultiUser Xtra does not appear to work with proxies.
2) MultiUser Xtra does not appear to use any info set with proxyServer()
3) MultiUser Xtra apparently can not be used to check dates through a
proxy.
4) DownloadNetThing can not check dates either (which is why I was trying
to use MultiUser Xtra in the first place)
I'm setting up a proxy here to run my own tests. I'm going to use a manual
text update log and grab it with getNetText instead. It will simply be
a list of files on the server with their last update dates. I wanted to
avoid this since it's more prone to error and a little more work to read
and parse.
The ioSCOPE is a projector that checks for updated media on the server
when launched. This allows the ioSCOPE to update itself on the fly while
it's running. When there are new poses or gestures for the character they
will stream in while it's running. Currently it won't work through a proxy
until I implement the manual update log though.
[Update 08/24/00: Actually wrote a Perl script to let the ioSCOPE query
the server and it now works through a proxy... Quipples:
The Internet game show of satirical riddles]
If MM is listening, here's a feature request, it would be fantastic if
there was a simple getNetHeader() Lingo command that we could use to retrieve
a file's header without downloading the entire file. Much like the command
that MultiUser Xtra has.
-MikeS

|