예제 #1
0
void BlabbleCall::OnCallState(pjsua_call_id call_id, pjsip_event *e)
{
	pjsua_call_info info;
	if (pjsua_call_get_info(call_id, &info) == PJ_SUCCESS)
	{
		if (info.state == PJSIP_INV_STATE_DISCONNECTED) 
		{
			RemoteEnd(info);
		}
		else if (info.state == PJSIP_INV_STATE_CALLING)
		{
			if (on_call_ringing_)
				on_call_ringing_->InvokeAsync("", FB::variant_list_of(BlabbleCallWeakPtr(get_shared())));

			BlabbleAccountPtr p = parent_.lock();
			if (p)
				p->OnCallRingChange(get_shared(), info);
		}
		else if (info.state == PJSIP_INV_STATE_CONFIRMED)
		{
			if (on_call_connected_)
				on_call_connected_->InvokeAsync("", FB::variant_list_of(BlabbleCallWeakPtr(get_shared())));

			BlabbleAccountPtr p = parent_.lock();
			if (p)
				p->OnCallRingChange(get_shared(), info);
		}
	}
}
void CRUAuditRefreshTaskExecutor::Work()
{
	switch (GetState())
	{
	case EX_START: // MAIN PROCESS
		{
			// This state only logs the opening message
			Start();
			break;
		}	
	case EX_PROLOGUE: // MAIN PROCESS
		{
			// This state just starts a transaction  
			Prologue();
			break;
		}
	case EX_PURGE_DATA: // MAIN PROCESS
		{
			RUASSERT(FALSE == IsTransactionOpen());
			// Execute purgedata from the MV (with indexes)
			PurgeData();			
			break;
		}
        case EX_REMOTE_START:
                {
                        // this state starts up the table lock protocol
                        // and starts a transaction                 
                        RemoteStart();
                        break;
                }
	case EX_RECOMPUTE: // REMOTE PROCESS
		{
			// This state execute an internal refresh recompute statement 
			Recompute();
			break;
		}
	case EX_REFRESH: // REMOTE PROCESS
		{
			// This state execute an internal refresh statement 
			// It may be a multi delta refresh or a single delta refresh
			Refresh();
			break;
		}
        case EX_POPINDEX:	// REMOTE PROCESS
		{
			RUASSERT(FALSE == IsTransactionOpen());
			PopulateIndexes();
			break;
		}        
	case EX_REMOTE_END: // REMOTE PROCESS
		{
			RemoteEnd();
			break;
		}
	case EX_EPILOGUE: // MAIN PROCESS
		{
			// Update all meta-data concerning the mv and used tables objects
			Epilogue();
			break;
		}
	default: RUASSERT(FALSE);
	}
}