I'm trying to understand how to handle disconnect/reconnect events in TRCC application. I have the following sequence of events and reaction of my application on them:
1. StatusMsg with state="Open / Suspect / None / 'channel down'" received on Login stream
2. StatusMsg with state="Open / Suspect / None / 'Channel is down.'" received on Login stream
3. StatusMsg with state="Closed, Recoverable / Suspect / None / 'Service for this item was lost.'" received on Tunnel stream
3. Application stops posting data
4. StatusMsg with state="Open / Ok / None / 'channel up'" received on Login stream
5. RefreshMsg with state="Open / Ok received on Login stream
5. Application sends and registers new Tunnel stream request
6. StatusMsg with state="Closed, Recoverable / Suspect / None / 'No matching service present.'" received on new Tunnel stream
7. Application is not connected and cannot post anything
So technically reconnection is successful on Login stream and API doesn't try to reconnect again. But tunnel stream is in "Closed, Recoverable" state and I cannot create new tunnel substream for data posting. What am I missing here? Should I unregister Tunnel stream and Tunnel substream upon receiving Open / Suspect on Login stream (although both these streams are closed as per EMA log...)?
Added EMA log: emalog.txt
Any thoughts on this? Maybe I received "Closed, Recoverable / Suspect" state on newly requested Tunnel stream because requested service was not up? Then what is recommended way to handle such case? I'm asking because it is not possible to reproduce this case on my side (it happened only once during 3 weeks of testing).
Ok, this is not some kind of special case. I tried to drop TCP connection with iptables and got exactly the same sequence of events:
1. Connection is down
2. Successful reconnect on Login stream with Refresh message
3. New Tunnel stream requested
4. "Closed, Recoverable / Suspect / None / 'No matching service present.'" state on newly created tunnel stream
I can restore connection only with full application restart, is it expected behavior?