public void NewMsg(Object i_sender, ISMessaging.Delivery.ISMDistributer.ISMDistributerEventArgs i_args) { ISMessaging.ISMsg mMsg = null; lock (this) { try { //Console.WriteLine("AudioMgr_srv.NewMsg received on TID {0}.", AppDomain.GetCurrentThreadId()); // Copy and release the original message (so that we don't have to call back to the remote client.) switch (i_args.m_Msg.GetType().ToString()) // FIX - There has to be a better way to do this... { ///////////////////////////////////// // Audio in messages case "ISMessaging.SpeechRec.ISMResults": { ISMessaging.SpeechRec.ISMResults mTmp, mClone; mTmp = (ISMessaging.SpeechRec.ISMResults)i_args.m_Msg; mClone = (ISMessaging.SpeechRec.ISMResults)mTmp.Clone(); mMsg = (ISMessaging.ISMsg)mClone; m_aqAudioIn[mMsg.m_Dest.m_VMC.m_iKey].Push(mMsg); } break; case "ISMessaging.SpeechRec.ISMLoadPhrases": { ISMessaging.SpeechRec.ISMLoadPhrases mTmp, mClone; mTmp = (ISMessaging.SpeechRec.ISMLoadPhrases)i_args.m_Msg; mClone = (ISMessaging.SpeechRec.ISMLoadPhrases)mTmp.Clone(); mMsg = (ISMessaging.ISMsg)mClone; m_aqAudioIn[mMsg.m_Dest.m_VMC.m_iKey].Push(mMsg); } break; case "ISMessaging.SpeechRec.ISMLoadGrammarFile": { ISMessaging.SpeechRec.ISMLoadGrammarFile mTmp, mClone; mTmp = (ISMessaging.SpeechRec.ISMLoadGrammarFile)i_args.m_Msg; mClone = (ISMessaging.SpeechRec.ISMLoadGrammarFile)mTmp.Clone(); mMsg = (ISMessaging.ISMsg)mClone; m_aqAudioIn[mMsg.m_Dest.m_VMC.m_iKey].Push(mMsg); } break; case "ISMessaging.Audio.ISMSetProperty": { ISMessaging.Audio.ISMSetProperty mTmp = (ISMessaging.Audio.ISMSetProperty)i_args.m_Msg; ISMessaging.Audio.ISMSetProperty mClone = (ISMessaging.Audio.ISMSetProperty)mTmp.Clone(); mMsg = mClone; m_aqAudioIn[mMsg.m_Dest.m_VMC.m_iKey].Push(mMsg); } break; ///////////////////////////////////// // Audio out messages case "ISMessaging.Audio.ISMPlayPrompts": { ISMessaging.Audio.ISMPlayPrompts mTmp, mClone; mTmp = (ISMessaging.Audio.ISMPlayPrompts)i_args.m_Msg; mClone = (ISMessaging.Audio.ISMPlayPrompts)mTmp.Clone(); mMsg = (ISMessaging.ISMsg)mClone; m_aqAudioOut[mMsg.m_Dest.m_VMC.m_iKey].Push(mMsg); } break; ///////////////////////////////////// // Audio out messages case "ISMessaging.Session.ISMTransferSession": { ISMessaging.Session.ISMTransferSession mTmp, mClone; mTmp = (ISMessaging.Session.ISMTransferSession)i_args.m_Msg; mClone = (ISMessaging.Session.ISMTransferSession)mTmp.Clone(); mMsg = (ISMessaging.ISMsg)mClone; m_aqAudioOut[mMsg.m_Dest.m_VMC.m_iKey].Push(mMsg); } break; // Other session messages (always Audio Out messages?) case "ISMessaging.Session.ISMTerminateSession": { ISMessaging.Session.ISMTerminateSession mTmp, mClone; mTmp = (ISMessaging.Session.ISMTerminateSession)i_args.m_Msg; mClone = (ISMessaging.Session.ISMTerminateSession)mTmp.Clone(); mMsg = (ISMessaging.ISMsg)mClone; m_aqAudioOut[mMsg.m_Dest.m_VMC.m_iKey].Push(mMsg); } break; case "ISMessaging.Session.ISMTerminateSessionAfterPrompts": { ISMessaging.Session.ISMTerminateSessionAfterPrompts mTmp, mClone; mTmp = (ISMessaging.Session.ISMTerminateSessionAfterPrompts)i_args.m_Msg; mClone = (ISMessaging.Session.ISMTerminateSessionAfterPrompts)mTmp.Clone(); mMsg = (ISMessaging.ISMsg)mClone; m_aqAudioOut[mMsg.m_Dest.m_VMC.m_iKey].Push(mMsg); } break; case "ISMessaging.Session.ISMDialogManagerIdle": { ISMessaging.Session.ISMDialogManagerIdle mTmp, mClone; mTmp = (ISMessaging.Session.ISMDialogManagerIdle)i_args.m_Msg; mClone = (ISMessaging.Session.ISMDialogManagerIdle)mTmp.Clone(); mMsg = (ISMessaging.ISMsg)mClone; m_aqAudioOut[mMsg.m_Dest.m_VMC.m_iKey].Push(mMsg); } break; ///////////////////////////////////// // Unknown destination messages case "ISMessaging.ISMsg": { //Console.Error.WriteLine("WARNING: AudioMgr_Srv.NewMsg() - Message type was ISMsg."); m_Logger.Log(Level.Warning, "AudioMgr_Srv.NewMsg() - Message type was ISMsg."); mMsg = (ISMessaging.ISMsg)i_args.m_Msg.Clone(); // Where would this message go? } break; default: { //Console.Error.WriteLine("ERROR: AudioMgr_Srv.NewMsg() - Message type was not recognized: '{0}'.", i_args.m_Msg.GetType().ToString()); m_Logger.Log(Level.Exception, "AudioMgr_Srv.NewMsg() - Message type was not recognized: " + i_args.m_Msg.GetType().ToString()); } break; } // switch // Release remote object i_args = null; } catch (Exception exc) { m_Logger.Log(Level.Exception, "AudioMgr_Srv.NewMsg() caught exception: " + exc.ToString()); } } // lock }
public void NewMsg(Object i_sender, ISMessaging.Delivery.ISMDistributer.ISMDistributerEventArgs i_args) { int iQIndex = -1; ISMessaging.ISMsg mMsg = null; bool bMsgBegin = false, bMsgDtmf = false; // Copy and release the original message (so that we don't have to call back to the remote client.) switch (i_args.m_Msg.GetType().ToString()) // FIX - There has to be a better way to do this... { case "ISMessaging.SpeechRec.ISMResults": { // ISMessaging.SpeechRec.ISMResults mTmp, mClone; // // mTmp = (ISMessaging.SpeechRec.ISMResults)i_args.m_Msg; // mClone = (ISMessaging.SpeechRec.ISMResults)mTmp.Clone(); // mMsg = (ISMessaging.ISMsg)mClone; mMsg = (ISMessaging.ISMsg)(((ISMessaging.SpeechRec.ISMResults)i_args.m_Msg).Clone()); } break; case "ISMessaging.ISMsg": { mMsg = (ISMessaging.ISMsg)i_args.m_Msg.Clone(); } break; case "ISMessaging.Session.ISMSessionBegin": { bMsgBegin = true; mMsg = (ISMessaging.ISMsg)(((ISMessaging.Session.ISMSessionBegin)i_args.m_Msg).Clone()); } break; case "ISMessaging.Session.ISMSessionEnd": { mMsg = (ISMessaging.ISMsg)(((ISMessaging.Session.ISMSessionEnd)i_args.m_Msg).Clone()); } break; case "ISMessaging.Session.ISMTimerExpired": { mMsg = (ISMessaging.ISMsg)(((ISMessaging.Session.ISMTimerExpired)i_args.m_Msg).Clone()); } break; case "ISMessaging.Audio.ISMDtmfComplete": { bMsgDtmf = true; mMsg = (ISMessaging.ISMsg)(((ISMessaging.Audio.ISMDtmfComplete)i_args.m_Msg).Clone()); } break; default: { mMsg = (ISMessaging.ISMsg)i_args.m_Msg.Clone(); //Console.Error.WriteLine("ERROR: DialogMgr_Srv.NewMsg() - Message type was not recognized: '{0}'.", i_args.m_Msg.GetType().ToString()); m_Logger.Log(Level.Warning, "DialogMgr_Srv.NewMsg() - Message type was not recognized: " + i_args.m_Msg.GetType()); } break; } // Release remote object i_args = null; // Push message onto appropriate queue if (mMsg != null) { iQIndex = mMsg.m_Dest.m_VMC.m_iKey; m_aqDMMsgs[iQIndex].Push(mMsg); //Console.WriteLine("DialogMgr_srv.NewMsg '{0}' received on TID {1}.", i_args.m_Msg.GetType().ToString(), AppDomain.GetCurrentThreadId()); if (bMsgBegin) { // Name the main thread if it hasn't been already (this is an even handler, so it may not have been) if ((Thread.CurrentThread.Name == null) || (Thread.CurrentThread.Name == "")) { Thread.CurrentThread.Name = "DialogMgr_srvT"; } // Set IpAddress, SessionId in Logger so all subsequent calls to Log() will be identified. (Need-to/should do this in every thread once the ISMSessionBegin comes in.) m_Logger.UpdateValue(Thread.CurrentThread.Name, LoggerCore.eRequiredParams.IpAddress.ToString(), Dns.GetHostEntry(Dns.GetHostName()).AddressList.FirstOrDefault(oAddr => oAddr.AddressFamily == AddressFamily.InterNetwork).ToString() ?? ""); m_Logger.UpdateValue(Thread.CurrentThread.Name, LoggerCore.eRequiredParams.SessionId.ToString(), mMsg.m_sSessionId); m_Logger.Log(Level.Info, string.Format("[{0}]<<<DMNM ISMSessionBegin(F:'{1}', T:'{2}')>>>", iQIndex, ((ISMessaging.Session.ISMSessionBegin)mMsg).m_sFromAddr, ((ISMessaging.Session.ISMSessionBegin)mMsg).m_sToAddr)); } else if (bMsgDtmf) { m_Logger.Log(Level.Info, string.Format("[{0}]DialogMgr_srv.NewMsg DTMF: '{1}'.", iQIndex.ToString(), ((ISMessaging.Audio.ISMDtmfComplete)mMsg).m_sDtmf)); } else { m_Logger.Log(Level.Debug, string.Format("[{0}]DialogMgr_srv.NewMsg: {1}", iQIndex.ToString(), mMsg.GetType())); } } else { m_Logger.Log(Level.Exception, "DialogMgr_srv.NewMsg error: No message."); } }