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; } }
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(); }
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(); }