int ASOS_Core::Process_for_ObjectField(ASOS_ObjectField *in_field, ASOS_message *in_msg, ASOS_message *in_res_msg, ASOS_Node *in_node){ int ret=0; if(in_field == NULL){printf("ASOS_Core::Process_for_ObjectField: [Error] field is NULL \n");return -1;} switch(in_msg->message_type){ case 0x07: // 0x07: "create object command" onCreateObject(in_field, in_msg, in_res_msg, in_node); break; case 0x0a: // 0x0a: "delete object command" onDeleteObject(in_field, in_msg, in_res_msg, in_node); break; default: printf("Error: ASOS_Core::Process_for_ObjectField: Invalid message type\n"); ret=-1; } return ret; }
char* InvokeFunction( const char* szCommand, void* pContext ) { StringToJExt_T * pID2Obj = NULL; VoidToMap_T::iterator iter = g_context2Map.find( pContext ); if ( iter != g_context2Map.end() ) { pID2Obj = iter->second; } else { pID2Obj = new StringToJExt_T; g_context2Map[ pContext ] = pID2Obj; } StringToJExt_T& mapID2Obj = *pID2Obj; string strFullCommand = szCommand; vector<string> arParams; g_tokenize( strFullCommand, " ", arParams ); string strCommand = arParams[ 0 ]; string strRetVal = szERROR; if ( strCommand == szCREATE ) { string strClassName = arParams[ 1 ]; string strObjId = arParams[ 2 ]; StringToJExt_T::iterator r = mapID2Obj.find( strObjId ); if ( r != mapID2Obj.end() ) { strRetVal += strObjId; strRetVal += " :Object already exists."; return g_str2global( strRetVal ); } JSExt* pJSExt = onCreateObject( strClassName, strObjId ); if ( pJSExt == NULL ) { strRetVal += strObjId; strRetVal += " :Unknown object type "; strRetVal += strClassName; return g_str2global( strRetVal ); } pJSExt->m_pContext = pContext; mapID2Obj[ strObjId ] = pJSExt; strRetVal = szOK; strRetVal += strObjId; return g_str2global( strRetVal ); } else if ( strCommand == szINVOKE ) { string strObjId = arParams[ 1 ]; string strMethod = arParams[ 2 ]; StringToJExt_T::iterator r = mapID2Obj.find( strObjId ); if ( r == mapID2Obj.end() ) { strRetVal += strObjId; strRetVal += " :No object found for id."; return g_str2global( strRetVal ); } JSExt* pJSExt = r->second; size_t nLoc = strFullCommand.find( strObjId ); if ( nLoc == string::npos ) { strRetVal += strObjId; strRetVal += " :Internal InvokeMethod error."; return g_str2global( strRetVal ); } if ( strMethod == szDISPOSE ) { StringToJExt_T::iterator r = mapID2Obj.find( strObjId ); if ( r == mapID2Obj.end() ) { strRetVal = szERROR; strRetVal += strObjId; return g_str2global( strRetVal ); } JSExt * pJSExt = mapID2Obj[ strObjId ]; if ( pJSExt->CanDelete() ) { delete pJSExt; } mapID2Obj.erase( strObjId ); strRetVal = szOK; strRetVal += strObjId; return g_str2global( strRetVal ); } size_t nSuffixLoc = nLoc + strObjId.size(); string strInvoke = strFullCommand.substr( nSuffixLoc ); strInvoke = g_trim( strInvoke ); strRetVal = pJSExt->InvokeMethod( strInvoke ); return g_str2global( strRetVal ); } strRetVal += " :Unknown command "; strRetVal += strCommand; return g_str2global( strRetVal ); }