--- a/mmserv/sts/stsserver/src/stsserversession.cpp Mon May 03 12:59:52 2010 +0300
+++ b/mmserv/sts/stsserver/src/stsserversession.cpp Fri May 14 16:22:35 2010 +0300
@@ -29,7 +29,11 @@
CStsServerSession::~CStsServerSession()
{
+ TStsCallBack callBack;
+ callBack.callBackType = EStsShutdown;
+ iMsgQueue.SendBlocking(callBack);
iServer.DropSession(this);
+ iMsgQueue.Close();
}
void CStsServerSession::CreateL()
@@ -41,11 +45,17 @@
{
switch (aMessage.Function())
{
+ case StsMsg_RegisterMsgQueue:
+ DoRegisterMsgQueueL(aMessage);
+ break;
case StsMsg_PlayTone:
DoPlayToneL(aMessage);
break;
- case StsMsg_StopTone:
- DoStopToneL(aMessage);
+ case StsMsg_PlayAlarm:
+ DoPlayAlarmL(aMessage);
+ break;
+ case StsMsg_StopAlarm:
+ DoStopAlarmL(aMessage);
break;
default:
break;
@@ -57,20 +67,54 @@
CSession2::ServiceError(aMessage, aError);
}
+void CStsServerSession::DoRegisterMsgQueueL(const RMessage2& aMessage)
+ {
+ TInt result = iMsgQueue.Open(aMessage, 0);
+
+ aMessage.Complete(result);
+ }
+
void CStsServerSession::DoPlayToneL(const RMessage2& aMessage)
{
- CSystemToneService::TToneType toneType =
+ CSystemToneService::TToneType tone =
(CSystemToneService::TToneType) aMessage.Int0();
+ aMessage.Complete(KErrNone);
+ iSts.PlayTone(tone);
+ }
+
+void CStsServerSession::DoPlayAlarmL(const RMessage2& aMessage)
+ {
+ CSystemToneService::TAlarmType alarm =
+ (CSystemToneService::TAlarmType) aMessage.Int0();
unsigned int context = 0;
- iSts.PlayTone(toneType, context);
+ iSts.PlayAlarm(alarm, context, *this);
+ iObserverMap[context] = (MStsPlayAlarmObserver*) aMessage.Ptr2();
TPckg<unsigned int> contextPckg(context);
TRAPD(err,aMessage.WriteL(1,contextPckg));
aMessage.Complete(err);
+ // if the context is 0 there was a problem with the PlayAlarm,
+ // so trigger the PlayAlarmComplete callback.
+ if (context == 0)
+ {
+ PlayAlarmComplete(0);
+ }
}
-void CStsServerSession::DoStopToneL(const RMessage2& aMessage)
+void CStsServerSession::DoStopAlarmL(const RMessage2& aMessage)
{
unsigned int context = aMessage.Int0();
aMessage.Complete(KErrNone);
- iSts.StopTone(context);
+ iObserverMap.erase(context);
+ iSts.StopAlarm(context);
}
+
+void CStsServerSession::PlayAlarmComplete(unsigned int aAlarmContext)
+ {
+ //TODO: Trigger play complete callback to RSession
+ TStsCallBack callBack =
+ {
+ EStsPlayAlarmComplete, iObserverMap[aAlarmContext], aAlarmContext
+ };
+ iMsgQueue.SendBlocking(callBack);
+ iObserverMap.erase(aAlarmContext);
+ }