messagingapp/msgappfw/client/src/rcssession.cpp
changeset 70 a15d9966050f
parent 44 36f374c67aa8
--- a/messagingapp/msgappfw/client/src/rcssession.cpp	Thu Sep 02 20:23:03 2010 +0300
+++ b/messagingapp/msgappfw/client/src/rcssession.cpp	Fri Sep 17 08:28:39 2010 +0300
@@ -23,6 +23,8 @@
 // USER INCLUDES
 #include "ccsdebug.h"
 
+const TInt KCsServerRetryTimeout  = 100000;
+const TInt KCsServerRetryCount    = 5;
 // ----------------------------------------------------------------------------
 // StartServer
 // Starts the server. Used only when the server is implemented as a transient.
@@ -54,15 +56,10 @@
 
     User::WaitForRequest(status);
 
-    if (status != KErrNone)
-    {
-        server.Close();
-        return status.Int();
-    }
-
+    err = (server.ExitType() == EExitPanic ) ? KErrGeneral : status.Int();
+    server.Close();
     PRINT ( _L("End RCsSession->StartServer") );
-
-    return KErrNone;
+    return err;
 }
 // ============================== MEMBER FUNCTIONS ============================
 
@@ -84,27 +81,31 @@
 // ----------------------------------------------------------------------------
 TInt RCsSession::Connect()
 {
-    TInt err = CreateSession(KCsServerName, Version());
-
-    if (err != KErrNone)
+    TInt retry = KCsServerRetryCount;
+    FOREVER
     {
-        PRINT ( _L("conversation server not running. Trying to start") );
-
-        err = StartServer();
-
-        if (err != KErrNone)
-        {
-            PRINT ( _L("Conversation server startup failed") );
-            PRINT1 ( _L("End RCsSession::Connect. Error code = %d"), err );
-            return err;
-        }
-
-        PRINT ( _L("Conversation server startup successful") );
-
-        err = CreateSession(KCsServerName, Version());
+         TInt err = CreateSession(KCsServerName, Version());
+         if( err != KErrNotFound && err != KErrServerTerminated && err != KErrServerBusy )
+         {
+             return err;
+         }
+         if( --retry == 0 )
+         {
+             return err;
+         }
+         if( err == KErrServerBusy )
+         {
+             User::After(KCsServerRetryTimeout);
+         }
+         PRINT ( _L("conversation server not running. Trying to start") );
+         err = StartServer();
+         if( err != KErrNone && err != KErrAlreadyExists )
+         {
+             PRINT ( _L("Conversation server startup failed") );
+             return err;
+         }
+         PRINT ( _L("Conversation server startup successful") );
     }
-
-    return err;
 }
 
 // ----------------------------------------------------------------------------