示例#1
0
void UserWork( TRUNK_STRUCT *pOneUser, Acs_Evt_t *pAcsEvt )
{
	VOICE_STRUCT *			pOneVoice;
	RetCode_t				r;
	Acs_GeneralProc_Data	*pGeneral = NULL;
	Acs_CallControl_Data	*pCallControl = NULL;
	PlayProperty_t  playProperty;


	if( pAcsEvt->m_s32EventType == XMS_EVT_CLEARCALL ){	
		if(pOneUser->State != TRK_FREE)
		{
			ResetUser(pOneUser,pAcsEvt);
			return;
		}
	}

	switch(pOneUser->State)
	{
	case TRK_FREE:
		if ( pAcsEvt->m_s32EventType == XMS_EVT_CALLIN ) /*当前状态USER_FREE,坐席摘机事件User Offhook Event*/
		{
			pOneVoice = &AllDeviceRes[pOneUser->deviceID.m_s8ModuleID].pVoice[pOneUser->iSeqID];
			if ( pOneVoice->State == VOC_FREE ){
				pOneVoice->State = VOC_USED;
				AllDeviceRes[pOneUser->deviceID.m_s8ModuleID].lVocFreeNum--;
				
				pOneUser->VocDevID = pOneVoice->deviceID;
				pOneVoice->UsedDevID = pOneUser->deviceID;

				XMS_ctsLinkDevice ( g_acsHandle, &pOneUser->deviceID, &pOneVoice->deviceID, NULL ); 
				XMS_ctsLinkDevice ( g_acsHandle, &pOneVoice->deviceID, &pOneUser->deviceID, NULL ); 
				
				memset(&playProperty,0,sizeof(playProperty));
				playProperty.m_u16PlayType = XMS_PLAY_TYPE_FILE;	
				strcpy ( playProperty.m_s8PlayContent, "C:\\DJKeygoe\\Samples\\Voc\\Bank.001");
				r = XMS_ctsPlay ( g_acsHandle, &pOneVoice->deviceID, &playProperty, NULL );
				if (r < 0)
				{
					MessageBox(NULL, "XMS_ctsPlay fail!", "XMS_ctsPlay", MB_OK ) ;
				}else{
					pOneUser->State = USER_OFFHOOK;
					pdlg->m_ListTrunk.SetItemText ( pOneUser->iSeqID, 4, GetString_TrunkState(pOneUser)); 					

				}

			}

		}
		break;
		
	case USER_OFFHOOK:
		if ( pAcsEvt->m_s32EventType == XMS_EVT_PLAY ){
			ResetUser(pOneUser,pAcsEvt);
		}	
		break;

	}
}
示例#2
0
文件: main.c 项目: Shaijan/Meridian59
void MainExitServer()
{
	lprintf("ExitServer terminating server\n");
	
	ExitAsyncConnections();
	
	CloseAllSessions(); /* gotta do this before anything, cause it uses kod, accounts */
	
	CloseDefaultChannels();
	
	ResetLoadMotd();
	ResetLoadBof();
	
	ResetTable();
	ResetBufferPool();
	ResetSysTimer();
	ResetDLlist();
	ResetNameID();
	ResetAccount();
	ResetUser();
	ResetString();
	ResetRoomData();
	ResetResource();
	ResetTimer();
	ResetList();
	ResetObject();
	ResetMessage();
	ResetClass();
	
	ResetConfig();
	
	DeleteAllBlocks();
}
示例#3
0
void InterfaceReloadSystem()
{
	EnterServerLock();
	
	lprintf("InterfaceReloadSystem reloading system\n");
	
	PauseTimers();
	
	SendBlakodBeginSystemEvent(SYSEVENT_RELOAD_SYSTEM);
	
	GarbageCollect();
	SaveAll();
	
	ResetAdminConstants();
	ResetUser();
	ResetString();
	ResetRoomData();
	ResetLoadMotd();
	ResetLoadBof();
	ResetDLlist();
	ResetNameID();
	ResetResource();
	ResetTimer();
	ResetList();
	ResetObject();
	ResetMessage();
	ResetClass();
	
	LoadMotd();
	LoadBof();
	LoadRsc();
	
	LoadKodbase();
	
	UpdateSecurityRedbook();
	
	LoadAdminConstants();
	/* can't reload accounts because sessions have pointers to accounts */
	if (!LoadAllButAccount()) 
		eprintf("InterfaceReloadSystem couldn't load game.  You are dead.\n");
	
	AllocateParseClientListNodes(); /* it needs a list to send to users */
	AddBuiltInDLlist();
	
	SendBlakodEndSystemEvent(SYSEVENT_RELOAD_SYSTEM);
	
	UnpauseTimers();
	
	LeaveServerLock();
}