Example #1
0
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 );
}
Example #2
0
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);
}
Example #3
0
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 );
}
Example #4
0
int ShChannel::Answer()
{
	return SsmPickup(ch);
}