struct state* CCallerChannel::FindVip_cmplt(EVTBLK *evtblk) { int nChan = evtblk->nReference; if ( evtblk->wEventCode == E_PROC_PlayEnd ) { Reserved &= 0; return &FindUser; // 继续等待 } if ( evtblk->wEventCode == E_CHG_ChState ) { // 消息来自TalkWith if ( (evtblk->dwParam & 0xFFFF) == S_CALL_TALKING ) { SsmPickup( nChan ); Reserved &= 0; return &RcvTalk; } } if ( evtblk->wEventCode == E_SYS_TIMEOUT ) { KillNetwork(); FindUser.process = (PROCESS)FindUser_cmplt; PutUserRing( LocalId, RemoteId, nChan ); SetTimer( 5 * 1000 ); } return ChkDTSignal( evtblk, &FindUser ); }
int CCallerChannel::rcvMFsig_init(EVTBLK *evtblk) { // if ( CXMLElement* pXML = Profiles.FindAnalog( m_nChan, "0" ) ) { SsmPickup( m_nChan ); RcvTalk_init( evtblk ); } Reserved &= 0; fcnp = &FwdCaller; return (this->*fcnp->initiate)(evtblk); }
struct state* CCallerChannel::FindUser_cmplt(EVTBLK *evtblk) { int nChan = evtblk->nReference; if ( evtblk->wEventCode == E_PROC_PlayEnd ) { Reserved &= 0; return &FindUser; // 继续等待 } if ( evtblk->wEventCode == E_CHG_ChState ) { // 消息来自TalkWith if ( (evtblk->dwParam & 0xFFFF) == S_CALL_TALKING ) { SsmPickup( nChan ); // m_nTaskId = -1; // 跳过KillLinker // SetLinker( evtblk->dwParam >> 16 ); Reserved &= 0; return &RcvTalk; } } if ( evtblk->wEventCode == E_SYS_TIMEOUT ) { if ( PutNetworkRing(LocalId, RemoteId, nChan) ) { FindUser.process = (PROCESS)FindVip_cmplt; SetTimer( 30 * 1000 ); } else if ( PutForwardRing( LocalId, RemoteId, nChan ) ) { SetTimer( 45 * 1000 ); } else { SetTimer( 5 * 1000 ); } //else return FindVip_cmplt(evtblk); } return ChkDTSignal( evtblk, &FindUser ); }
int ShChannel::Answer() { return SsmPickup(ch); }