Ross,

We are wanting to know when a session is cleaned up.  I found the 
livenessTimoutTask is called when the reclaim timer expires, but I can not get 
to it from a sub-class.  I also see the new noteLiveness() override in the 
ServerMediaSession.  Instead of me tracking my own liveness, I added an 
livenessTimeouTask() to the ServerMediaSession (just like the noteLiveness) so 
I can be informed of the session that was cleaned up.  So in the 
GenericMediaServer I added a call to the livenesstimeoutTask() in the 
ServerMediaSession (just like you did for noteLiveness).  I pass the session id 
and streamname.  Is there a different way to do this?  If not would it be 
possible to get this in to future source?


Here is my patch:


diff -r 9e993be31201 liveMedia/GenericMediaServer.cpp
--- a/liveMedia/GenericMediaServer.cpp Wed Aug 17 13:52:57 2016 -0600
+++ b/liveMedia/GenericMediaServer.cpp Fri Aug 19 11:26:39 2016 -0600
@@ -302,12 +302,17 @@

 void GenericMediaServer::ClientSession::livenessTimeoutTask(ClientSession* 
clientSession) {
   // If this gets called, the client session is assumed to have timed out, so 
delete it:
-#ifdef DEBUG
   char const* streamName
     = (clientSession->fOurServerMediaSession == NULL) ? "???" : 
clientSession->fOurServerMediaSession->streamName();
+#ifdef DEBUG
   fprintf(stderr, "Client session (id \"%08X\", stream name \"%s\") has timed 
out (due to inactivity)\n",
   clientSession->fOurSessionId, streamName);
 #endif
+  // If we have a media session we can call the livenessTimeoutTask for that 
media session
+  // This is similar to the noteLiveness()
+  if (clientSession->fOurServerMediaSession != NULL) {
+      
clientSession->fOurServerMediaSession->livenessTimeoutTask(clientSession->fOurSessionId,
 streamName);
+  }
   delete clientSession;
 }

diff -r 9e993be31201 liveMedia/ServerMediaSession.cpp
--- a/liveMedia/ServerMediaSession.cpp Wed Aug 17 13:52:57 2016 -0600
+++ b/liveMedia/ServerMediaSession.cpp Fri Aug 19 11:26:39 2016 -0600
@@ -198,6 +198,11 @@
   // default implementation: do nothing
 }

+void ServerMediaSession::livenessTimeoutTask(u_int32_t sessionId, char const 
*streamName) {
+    // default implementation: do nothing
+}
+
+
 void ServerMediaSession::deleteAllSubsessions() {
   Medium::close(fSubsessionsHead);
   fSubsessionsHead = fSubsessionsTail = NULL;
diff -r 9e993be31201 liveMedia/include/ServerMediaSession.hh
--- a/liveMedia/include/ServerMediaSession.hh Wed Aug 17 13:52:57 2016 -0600
+++ b/liveMedia/include/ServerMediaSession.hh Fri Aug 19 11:26:39 2016 -0600
@@ -62,6 +62,11 @@
     // The default implementation does nothing, but subclasses can redefine 
this - e.g., if you
     // want to remove long-unused "ServerMediaSession"s from the server.

+  virtual void livenessTimeoutTask(u_int32_t sessionId, char const 
*streamName);
+    // called when a client is cleaned up due to the timeout expiring
+    // The default implementation does nothing, but subclasses can redefine 
this - e.g., if you
+    // want to know if   long-unused "ServerMediaSession"s is removed 
sub-class this method.
+
   unsigned referenceCount() const { return fReferenceCount; }
   void incrementReferenceCount() { ++fReferenceCount; }
   void decrementReferenceCount() { if (fReferenceCount > 0) --fReferenceCount; 
}


Thanks,
Craig


_______________________________________________
live-devel mailing list
live-devel@lists.live555.com
http://lists.live555.com/mailman/listinfo/live-devel

Reply via email to