int MediaSrvDestroy(HANDLE hmedia) #endif { PMEDIA_OBJECT obj; int playback; kMutexWait(hMediaMutex); // 获取音频对象 obj = (PMEDIA_OBJECT)HandleGet(hmedia, MEDIA_MAGIC); if(obj == NULL) { kdebug(mod_media, PRINT_ERROR, "CLOSE NULL: 0x%x\n", hmedia); kMutexRelease(hMediaMutex); return -1; } kdebug(mod_media, PRINT_INFO, "CLOSE: 0x%x\n", hmedia); // 结束当前正在录放的音频任务 playback = obj->Cb.MediaClose(obj->Media, 1); obj = (PMEDIA_OBJECT)HandleGet(hmedia, MEDIA_MAGIC); if(obj == NULL) { kdebug(mod_media, PRINT_ERROR, "CLOSE NULL NULL: 0x%x\n", hmedia); kMutexRelease(hMediaMutex); return -1; } obj->Cb.MediaDestroy(obj->Media); // 释放当前节点 ListRemove(&obj->Link); HandleDestroy(hmedia, MEDIA_MAGIC); if(obj->MediaInfo) kfree(obj->MediaInfo); kfree(obj); // 启动下一个等待任务 if(!ListEmpty(&MediaObjList)) { obj = ListEntry(ListFirst(&MediaObjList), MEDIA_OBJECT, Link); if(playback && (obj->Mode == MEDIA_MODE_WAIT)) { if(obj->Cb.MediaOpen(obj->Media) < 0) { HandleDestroy(obj->Header.Handle, MEDIA_MAGIC); if(obj->MediaInfo) kfree(obj->MediaInfo); kfree(obj); } } } kMutexRelease(hMediaMutex); return 0; }
uint32 Prop::ObjectMessageFn( HOBJECT hSender, ILTMessage_Read *pMsg ) { pMsg->SeekTo(0); uint32 messageID = pMsg->Readuint32(); switch(messageID) { case MID_DAMAGE: { // Let our damage aggregate process the message first... uint32 dwRet = GameBase::ObjectMessageFn(hSender, pMsg); // Check to see if we have been destroyed if ( m_damage.IsDead() ) { HandleDestroy(m_damage.GetLastDamager()); } else { HandleHit( m_damage.GetLastDamager() ); } return dwRet; } default : break; } return GameBase::ObjectMessageFn(hSender, pMsg); }
//////////////////////////////////////////////////// // 功能: 结束某一任务的媒体播放,并锁定媒体播放任务 // 输入: // 输出: // 返回: // 说明: //////////////////////////////////////////////////// void MediaTerminateLock(HANDLE htask) { PMEDIA_OBJECT obj; PLIST list; kMutexWait(hMediaMutex); list = &MediaObjList; if(!ListEmpty(list)) { // 获取正在音频任务节点 obj = ListEntry(ListFirst(list), MEDIA_OBJECT, Link); if(obj->hTask == htask) { // 结束当前正在录放的音频任务 obj->Cb.MediaClose(obj->Media, 1); obj->Cb.MediaDestroy(obj->Media); ListRemove(&obj->Link); HandleDestroy(obj->Header.Handle, MEDIA_MAGIC); if(obj->MediaInfo) kfree(obj->MediaInfo); kfree(obj); } } }
//////////////////////////////////////////////////// // 功能: // 输入: // 输出: // 返回: // 说明: //////////////////////////////////////////////////// int MediaSrvDestroyNotify(void *media) { PLIST head; PLIST n; PMEDIA_OBJECT obj; // kMutexWait(hMediaMutex); head = &MediaObjList; // 搜索指定音频任务 for(n = ListFirst(head); n != head; n = ListNext(n)) { obj = ListEntry(n, MEDIA_OBJECT, Link); if(obj->Media == media) { // 释放当前节点 kdebug(mod_media, PRINT_INFO, "CLOSE Notify: 0x%x\n", obj->Header.Handle); ListRemove(&obj->Link); HandleDestroy(obj->Header.Handle, MEDIA_MAGIC); if(obj->MediaInfo) kfree(obj->MediaInfo); kfree(obj); // 启动下一个等待任务 n = ListFirst(head); if(n != head) { obj = ListEntry(n, MEDIA_OBJECT, Link); if(obj->Mode == MEDIA_MODE_WAIT) { if(obj->Cb.MediaOpen(obj->Media) < 0) { ListRemove(&obj->Link); HandleDestroy(obj->Header.Handle, MEDIA_MAGIC); if(obj->MediaInfo) kfree(obj->MediaInfo); kfree(obj); } } } // kMutexRelease(hMediaMutex); return 0; } } // kMutexRelease(hMediaMutex); return -1; }
void ResourceHandleDestroy(HandleId id) { Resource* resource = (Resource*) ResourceHandleFind(id); if( gs_RemoveResource ) gs_ResourcesManager->removeResource(resource); LogDebug("ResourceHandleDestroy: %lu", id); HandleDestroy(gs_ResourceHandleManager, id); }
bool Prop::OnTrigger(HOBJECT hSender, const CParsedMsg &cMsg) { static CParsedMsg::CToken s_cTok_Anim("ANIM"); static CParsedMsg::CToken s_cTok_AnimLoop("ANIMLOOP"); static CParsedMsg::CToken s_cTok_Activate("ACTIVATE"); static CParsedMsg::CToken s_cTok_Remove("REMOVE"); static CParsedMsg::CToken s_cTok_Destroy("DESTROY"); uint32 dwFlags; g_pCommonLT->GetObjectFlags(m_hObject, OFT_User, dwFlags); if ( cMsg.GetArg(0) == s_cTok_Anim ) { g_pLTServer->SetModelLooping(m_hObject, LTFALSE); g_pLTServer->SetModelAnimation(m_hObject, g_pLTServer->GetAnimIndex(m_hObject, ( char* )( char const* )cMsg.GetArg( 1 ))); g_pLTServer->ResetModelAnimation(m_hObject); SetNextUpdate(UPDATE_NEXT_FRAME); // Needed to get string keys } else if ( cMsg.GetArg(0) == s_cTok_AnimLoop ) { g_pLTServer->SetModelLooping(m_hObject, LTTRUE); g_pLTServer->SetModelAnimation(m_hObject, g_pLTServer->GetAnimIndex(m_hObject, ( char* )( char const* )cMsg.GetArg( 1 ))); g_pLTServer->ResetModelAnimation(m_hObject); SetNextUpdate(UPDATE_NEXT_FRAME); // Needed to get string keys } else if ( cMsg.GetArg(0) == s_cTok_Activate ) { if(dwFlags & USRFLG_CAN_ACTIVATE) { SendActivateMessage( ); HandleTouch(hSender); } } else if( cMsg.GetArg(0) == s_cTok_Remove ) { // Remove us... g_pLTServer->RemoveObject( m_hObject ); } else if( cMsg.GetArg(0) == s_cTok_Destroy ) { m_damage.HandleDestruction( LTNULL ); HandleDestroy( LTNULL ); } else { return GameBase::OnTrigger(hSender, cMsg); } return true; }
// WindowProc -- Dispatches and routes window messages LRESULT cef_main_window::WindowProc(UINT message, WPARAM wParam, LPARAM lParam) { switch (message) { case WM_CREATE: if (HandleCreate()) return 0L; break; case WM_ERASEBKGND: if (HandleEraseBackground()) return 1L; break; case WM_SETFOCUS: if (HandleSetFocus((HWND)wParam)) return 0L; break; case WM_PAINT: if (HandlePaint()) return 0L; break; case WM_GETMINMAXINFO: if (HandleGetMinMaxInfo((LPMINMAXINFO) lParam)) return 0L; break; case WM_DESTROY: if (HandleDestroy()) return 0L; break; case WM_CLOSE: if (HandleClose()) return 0L; break; case WM_SIZE: if (HandleSize(wParam == SIZE_MINIMIZED)) return 0L; break; case WM_COMMAND: if (HandleCommand(LOWORD(wParam))) return 0L; break; case WM_COPYDATA: if (HandleCopyData((HWND)wParam, (PCOPYDATASTRUCT)lParam)) return 0L; break; } LRESULT lr = cef_host_window::WindowProc(message, wParam, lParam); return lr; }
void MP3Player::Destroy() { if(IsInit == 1) HandleDestroy(); HandleDestroyPLL(); }
HANDLE MediaSrvCreate(void *media, char *name, int type, int preempt) #endif { PLIST head; PLIST n; PMEDIA_OBJECT obj; // 参数检查 if(media == NULL) return NULL; // 检查当前是否存在录放任务 kMutexWait(hMediaMutex); head = &MediaObjList; if(!ListEmpty(head) && (preempt != MEDIA_MODE_NORMAL)) { // 检查是否强行结束正在录放的音频 if(preempt == MEDIA_MODE_PREEMPTIVE) { // 获取正在音频任务节点 n = ListFirst(head); obj = ListEntry(n, MEDIA_OBJECT, Link); // 结束当前正在录放的音频任务 obj->Cb.MediaClose(obj->Media, 1); obj->Cb.MediaDestroy(obj->Media); // 释放当前节点 ListRemove(&obj->Link); HandleDestroy(obj->Header.Handle, MEDIA_MAGIC); if(obj->MediaInfo) kfree(obj->MediaInfo); kfree(obj); // 申请并初始化节点 obj = MediaSrvObjCreate(media, name, type); if(obj == NULL) { kMutexRelease(hMediaMutex); return NULL; } // 启动新的播放任务 if(obj->Cb.MediaOpen(obj->Media) < 0) { if(obj->MediaInfo) kfree(obj->MediaInfo); kfree(obj); kMutexRelease(hMediaMutex); return NULL; } // 把节点插入任务队列 ListInsert(head, &obj->Link); } else { // 申请并初始化节点 obj = MediaSrvObjCreate(media, name, type); if(obj == NULL) { kMutexRelease(hMediaMutex); return NULL; } // 把当前音频插入等待队列尾部 ListInsert(ListPrev(head), &obj->Link); } } else { // 申请并初始化节点 obj = MediaSrvObjCreate(media, name, type); if(obj == NULL) { kMutexRelease(hMediaMutex); return NULL; } // 启动新的录放任务 if(obj->Cb.MediaOpen(obj->Media) < 0) { if(obj->MediaInfo) kfree(obj->MediaInfo); kfree(obj); kMutexRelease(hMediaMutex); return NULL; } // 把当前音频插入等待队列尾部 ListInsert(head, &obj->Link); } kMutexRelease(hMediaMutex); { HANDLE hret = HandleSet(obj, MEDIA_MAGIC, sMediaSrvDestroy); kdebug(mod_media, PRINT_INFO, "OPEN: 0x%x\n", hret); return hret; } }