nc.call() closes the netconnection - actionscript-3

i have made a flash chat application on Flash Builder 4.6 which connects to Flash Media (Development) Server on my centos5 32bit server, the problem is when i leave it open in browser about 2 minutes idle, then trying to call the netconnection to get the chat history or to send a public message or to invoke a function at the serverside with the nc.call() method, it suddenly says netconnection.connect.closed.. UNLESS i call, it doesnt gives me a connenction.closed event..
while this happening, i am looking at the fms admin console for active users, but the client doesnt drop and seems still connected to server..even i close the browser, client is still there in the fms console.. (normally, when i close the browser or when i use the nc.close() the client disconnects and i see the quick change in the fms admin console..
then still watching the fms admin console, after about 10 minutes the client drops..(it is normal i think)
i tried the same app with the connection to localhost, it works very well, i left the app open for a very long time idle, and then tried the nc.call() it worked fine.. but when i try the app on the my server, i had the problem.. i tried both fms 3.5 and 4.0.3 on my server but i had the problem too.. but on localhost it works so i think the problem is not about versions it is about something different with the connection to the server..
also the pepper flash player is disabled..and the problem is not about the autocloseidleclients property in the server.xml, application.xml vhost.xml config files. the problem is something different with the connection may be about firewall, tcp, router etc.. i dont know but i really need help..
thanks for reading..

Hm, if NetConnection works using sockets, then as far as I know, on Windows, the only way you can determine if a socket is closed is to try and write something to it; if it fails, then it's been closed - hence call() actually closing the connection after it's been idle for too long.
When you close the browser or call nc.close(), it's a specific request - normally on the server you'd also implement something like "if I haven't received anything in X seconds, disconnect the socket", which would trigger a callback on the client end.
I'd implement a sort of keep-alive; every 15/30 seconds, send a simple ping to the server, which will keep your connection open.

Related

I have a timeout to make an ajax call, but chrome keeps on calling it even after the tab is closed

Normal js code (no service worker, but the app has a manifest with an empty service worker).
A simple timeout to an ajax call that's the code.
I close all chrome tabs, I close the process in task manager, no more chrome processes and yet I still get requests on my server. This happens locally and on the server, I know this because I can see the cookies sent and for which user id is needed.
Also I know that chrome is running the code because there is a date in the request and is updated as it go.
Triple checked that chrome is closed on all users and all processed in task manager.
Is not a coincidence because at this moment I have 2 different users (different chrome profiles) doing this. Also in my dev server there are a lot of users with the same behaviour.
I'm also not sure is chrome, but has to be, node.js alone can't change the time of the request.
Win 10 and Chrome Version 60.0.3112.90 (Official Build) (64-bit)
Terrible and I don't know what to do...
if I restart my node.js server all the requests stops.
Was my mistake! As I have server side rendering (with react) I forgot that the timeout was also run on the server side. The fix was to don't run any timeouts on the server side.
Thanks anyway for the answers. I was concerned how chrome was still running my js code even shut down, made no sense at all!

Remote Debugging won't connect

I sort of make shift followed this guide on how to setup remote debugging. Since I am using Adobe Animate to compile my app I assume it has done the majority of the build steps already as I get a similar screen described.
I don't understand though. Here I have port forwarding up on my router so that it goes to my PC. I have TCP port 7935 up and open. Windows firewall on or off doesn't seem to make difference. Windows firewall even prompted me to allow or deny fdb after I ran it. I can't get my phone to connect via remote debugging. I want to be able to send this to my client who is having issue with the app so I can see what's going on under the hood instead of relying on a giant sum of try/catch statements and screenshots. Any help?
I tried a dummy domain and it seems to know that it can't connect to it. When I try mine or my IPv4 it doesn't let me connect. It just freezes up the app.
I don't know whether it works or not in Animate CC, but it works via Flash Builder. I'm using Android real device and I have Android SDK tools installed on my PC
Yes, I have followed that tuts from official Adobe docs, but that doesn't work
First: Simply connect your device to your PC
Actually , you can debug your app remotely as long as your device has been connected with your PC. This step, doesn't necessarily requires FDB.
In my case , all I need was things like
adb connect 192.168.xx.xx:port
this will connect your Android device with your PC on your default network .
Second, set debug setting over network
You've done it in Animate CC, with addition you might want to check "install application on the connected device'
Third, just debug as usual
You can get all those debugging stuff including traces

How to revive HttpClient after network connection has been restored?

How to revive HttpClient and make it see that the network is available again without fully restarting the application?
In case when a Xamarin.Forms app was launched with no network connection available and then later network connection is enabled, HttpClient.SendAsync(request) throws NameResolutionFailure and it does not recover, no matter how many times the request is repeated.
It seems, HttpClient does not know how to recover when network connection appears.
To reproduce the issue in Android emulator:
ensure your app is completely closed
turn network off (set Data status to Roaming in emulator settings or use the status bar to toggle the data or LTE switch).
launch your app, run a web request to verify that it does not work (obviously, you will need try/catch around the web request to avoid crashing)
while the app is still open, enable the network
run a web request - will get NameResolutionFailure
only full application restart will revive HttpClient
The issue does not happen if I use domain names specified in etc/hosts file.
I tried to fully recreate HttpClient and resend a new request when the issue occurs, but that does not help. Only full restart of the app helps.
Obviously, I cannot ask user to fully kill my app and start it again every time when user has turned on his network connection after launching my app.
This is a known issue. See:
Mono: https://bugzilla.xamarin.com/show_bug.cgi?id=45761
iOS: https://bugzilla.xamarin.com/show_bug.cgi?id=45763
Android: https://bugzilla.xamarin.com/show_bug.cgi?id=45383
The workaround is to manually set the DNS refresh:
System.Net.ServicePointManager.DnsRefreshTimeout = 0;

Detecting connection on Windows Phone 8 with Sencha+PhoneGap

I'm trying to detect whether a connection is available on my Sencha Touch+PhoneGap app that's running on Windows Phone 8. Problem is, any check I make (using both Ext.device.Connection.isOnline() from Sencha and navigator.network.connection from PhoneGap) results in the state of the connection when the app was launched. I do have ID_CAP_NETWORKING checked on WMAppManifest.xml, by the way.
So if I launched the app while there was no connection, Ext.device.Connection.isOnline() and navigator.network.connection will both always say that there is no connection, even if I get a connection while the app is running. If I launched the app while there was a connection, even if I lose the connection the calls will always say that there is a connection.
I have a hack for this (using simple ajax calls and seeing if they fail), but it's definitely not a great solution. Has anyone else encountered this problem? I have limited understanding of this part of mobile development and really don't even know where to start.

AS3 FTP Programming and the Socket and ByteArray Classes

Sorry for the subject line sounding like an even nerdier Harry Potter title.
I'm trying to use AS3's Socket class to write a simple FTP program to export as an AIR app in Flex Builder 3. I'm using an FTP server on my local network to test the program. I can successfully connect to the server (the easy part) but I can't send any commands. I'm pretty sure that you have to use the ByteArray class to send these commands but there's some crucial piece of information that I'm missing apparently. Does anyone know how to do this? Thanks!
Dave
The FTP protocol predates UTF encoding. Switch to ANSI/ASCII for better results. If you do opt for writeMultiByte instead of writeUTFBytes, be aware that it is buggy in linux. Here's one way around it.
There's another question here where the line ending turns out to be the culprit, so make sure that you get it right (as suggested above).
As said before, if this is running from the web, all socket connections will require a crossdomain policy, but this is NOT file based over HTTP. Recent changes to the security rules mean that any socket based connection must first get a crossdomain from a policy server hosted on port 843 of the target host.
Quoting from Adobe:
A SWF file may no longer make a socket connection to its own domain without a socket policy file. Prior to version 9,0,115,0, a SWF file was permitted to make socket connections to ports 1024 or greater in its own domain without a policy file.
HTTP policy files may no longer be used to authorize socket connections. Prior to version 9,0,115,0, an HTTP policy file, served from the master location of /crossdomain.xml on port 80, could be used to authorize a socket connection to any port 1024 or greater on the same host.
Essentially, what this means is that you must be in control of the target FTP host, and install supplementary software on it to get this working.
Read this link too and maybe it can be useful this one too.
The first one is about policy files and the second is an example of a TELNET (so, no FTP here) client.
I've been able to get an FTP client working in a browser, but it's buggy. I had to get a listener running on port 843 to server the policy file so that Flash would be allowed to connect and transfer data. Then, I had to figure out how FTP actually works:
You have to open 2 sockets: a command socket and a data socket. The command socket is where you send your USER, PASS, CWD, and STOR commands. The data socket is where you write your ByteArray data to. Sending the PASV command will tell you what port your data socket must connect to.
Where it is buggy is on Mac, in both Safari and FF, when I call the "socket.close()" command, the server socket actually closes. On Windoze, it does not. This is a huge problem because the Event.CLOSE event is not fired until the SERVER closes the connection. This is in the livedocs.
This is where I'm at. I have no idea why it would work flawlessly on Mac and then be completely busted in 3 different browsers on Windows. The only thing I can come up with is that it's either something in my Windows configuration that's preventing proper communication with the server, or it's the Window Flash player that's causing the problem.
Any thoughts?
We will need more info to resolve this.. What you're saying here appears correct to me. You're using the Socket class to send data though, not ByteArray.
Are you sure data is not being sent? How are you receiving the response? It may be that it's working fine but you're just not aware of it? As i said, tell us more about what you're doing..
Lee Brimelow has a screencast on gotoAndLearn of writing an POP3 client. It's essentially the same of what you're doing so take a look.
Are you 100% sure the syntax is correct? I know with HTTP you'll have to an include extra linebreak after the request for it to go through. Without it you'll get nothing back. Not sure how it is with FTP though.
The FTP standard requires CRLF at the end of commands. Try using "\r\n" in place of the "\n" in your example.
You must serve the CrossDomain Policy File from your FTP server in order to conect correctly.
From what I've gathered, you have to send each command one at a time and validate the response before moving on. You should be getting something back against ProgressEvent.SOCKET_DATA
Try just this and see what you get in response.
socket.writeUTFBytes("USER "+user+"\n"); socket.flush();
You would then read the response out like this.
var response:String = mySocket.readUTFBytes(mySocket.bytesAvailable);