void CMultiXProcess::CancelMsg(CMultiXAppMsgID &ID,bool bTimedout) { CMultiXAppMsg *Msg = ID.GetObject(); if(Msg) { if(Msg->MultiXMsg()->m_SendSem.Initialized()) Msg->MultiXMsg()->m_SendSem.Lock(); ID.RemoveObject(); Msg->m_bKeep = false; CMultiXSession *Session = Owner()->FindSession(Msg->SessionID()); if(bTimedout) { if(Session) { if(Msg->IsCtrlMsgToTpm()) OnSendMsgToTpmTimedout(*Msg); else Session->OnSendMsgTimedoutNV(*Msg); } else { if(Msg->IsCtrlMsgToTpm()) OnSendMsgToTpmTimedout(*Msg); else OnSendMsgTimedout(*Msg); } } else { if(Session) { if(Msg->IsCtrlMsgToTpm()) OnSendMsgToTpmFailed(*Msg); else Session->OnSendMsgFailedNV(*Msg); } else { if(Msg->IsCtrlMsgToTpm()) OnSendMsgToTpmFailed(*Msg); else OnSendMsgFailed(*Msg); } } if(!Msg->m_bKeep) delete Msg; } }
bool CMultiXProcess::Send(CMultiXAppMsg &Msg) { if(Msg.IsResponse()) { Msg.MultiXMsg()->SetAsResponse(true); } else { Msg.MultiXMsg()->SetAsResponse(false); } if(Msg.m_Timeout > 0) { CMultiXProcessTimer *Timer = new CMultiXProcessTimer(CMultiXProcessTimer::SendMsgTimerCode,Msg.m_Timeout,m_pAlertableObject->ID()); Timer->MsgID() = Msg.ID(); Owner()->SetMultiXTimer(Timer); if(Msg.m_Timeout < 5000) { Msg.MultiXMsg()->m_SendSem.Initialize(); } } SendMsg(*Msg.MultiXMsg()); return true; }