30 { |
30 { |
31 iIsSessionOpen = EFalse; |
31 iIsSessionOpen = EFalse; |
32 iIsSessionProcessOpen = EFalse; |
32 iIsSessionProcessOpen = EFalse; |
33 } |
33 } |
34 |
34 |
35 void RMdEEngineSession::OpenL(TRequestStatus& aStatus) |
35 void RMdEEngineSession::OpenL() |
36 { |
36 { |
37 TFindServer findMdEServer( KMdSServerName ); |
37 TFindServer findMdEServer( KMdSServerName ); |
38 TFullName name; |
38 TFullName name; |
39 |
39 |
40 const TInt result = findMdEServer.Next( name ); |
40 TInt result = findMdEServer.Next( name ); |
|
41 // Server already running |
41 if( result == KErrNone ) |
42 if( result == KErrNone ) |
42 { |
43 { |
43 // Server already running |
44 TFindProcess findProcess( KMdSServerProcessString ); |
44 iIsSessionProcessOpen = ETrue; |
45 result = findProcess.Next( name ); |
45 |
46 if ( result == KErrNone ) |
46 TRequestStatus* status = &aStatus; |
47 { |
47 User::RequestComplete( status, KErrNone ); |
48 result = iServerProcess.Open( name ); |
48 |
49 if( result != KErrNone ) |
49 return; |
50 { |
|
51 User::Leave( KErrNotReady ); |
|
52 } |
|
53 iIsSessionProcessOpen = ETrue; |
|
54 return; |
|
55 } |
|
56 else |
|
57 { |
|
58 User::Leave( KErrNotReady ); |
|
59 } |
50 } |
60 } |
51 |
61 |
52 User::LeaveIfError( iServerProcess.Create( KMdSServerFilename, |
62 User::LeaveIfError( iServerProcess.Create( KMdSServerName, |
53 KNullDesC ) ); |
63 KNullDesC ) ); |
54 |
64 |
55 iIsSessionProcessOpen = ETrue; |
65 TRequestStatus stat( 0 ); |
56 |
66 iServerProcess.Rendezvous( stat ); |
57 iServerProcess.Rendezvous( aStatus ); |
67 |
58 |
68 if( stat != KRequestPending ) |
59 if( aStatus != KRequestPending ) |
|
60 { |
69 { |
61 iServerProcess.Kill( 0 ); // abort startup |
70 iServerProcess.Kill( 0 ); // abort startup |
62 } |
71 } |
63 else |
72 else |
64 { |
73 { |
65 iServerProcess.Resume(); // logon OK - start the server |
74 iServerProcess.Resume(); // logon OK - start the server |
66 } |
75 } |
67 } |
76 |
68 |
77 User::WaitForRequest( stat ); |
69 void RMdEEngineSession::OpenCancel(TRequestStatus& aStatus) |
78 |
|
79 iIsSessionProcessOpen = ETrue; |
|
80 } |
|
81 |
|
82 void RMdEEngineSession::OpenCancel() |
70 { |
83 { |
71 if( iIsSessionProcessOpen ) |
84 if( iIsSessionProcessOpen ) |
72 { |
85 { |
73 iServerProcess.RendezvousCancel( aStatus ); |
|
74 |
|
75 iServerProcess.Close(); |
86 iServerProcess.Close(); |
76 |
87 |
77 iIsSessionProcessOpen = EFalse; |
88 iIsSessionProcessOpen = EFalse; |
78 } |
89 } |
79 } |
90 } |
80 |
91 |
81 void RMdEEngineSession::ConnectL() |
92 void RMdEEngineSession::ConnectL() |
82 { |
93 { |
83 if( iIsSessionProcessOpen ) |
94 if( iIsSessionProcessOpen ) |
84 { |
95 { |
85 TBool error = (iServerProcess.ExitType() != EExitPending); |
96 const TBool error = (iServerProcess.ExitType() != EExitPending); |
86 |
97 |
87 iServerProcess.Close(); |
98 iServerProcess.Close(); |
88 |
99 |
89 iIsSessionProcessOpen = EFalse; |
100 iIsSessionProcessOpen = EFalse; |
90 |
101 |
107 { |
118 { |
108 User::LeaveIfError( KErrBadHandle ); |
119 User::LeaveIfError( KErrBadHandle ); |
109 } |
120 } |
110 } |
121 } |
111 |
122 |
112 TInt RMdEEngineSession::Shutdown() |
123 void RMdEEngineSession::Shutdown() |
113 { |
124 { |
114 TInt err = KErrNone; |
|
115 |
|
116 if( iIsSessionOpen ) |
125 if( iIsSessionOpen ) |
117 { |
126 { |
118 err = SendReceive( EShutdown ); |
127 SendReceive( EShutdown ); |
119 } |
128 } |
120 |
129 |
121 if( iIsSessionProcessOpen ) |
130 if( iIsSessionProcessOpen ) |
122 { |
131 { |
123 iServerProcess.Close(); |
132 iServerProcess.Close(); |
124 |
|
125 iIsSessionProcessOpen = EFalse; |
|
126 } |
133 } |
127 |
|
128 return err; |
|
129 } |
134 } |
130 |
135 |
131 TVersion RMdEEngineSession::Version() const |
136 TVersion RMdEEngineSession::Version() const |
132 { |
137 { |
133 return( TVersion( KMdSServMajorVersionNumber, |
138 return( TVersion( KMdSServMajorVersionNumber, |