예제 #1
0
파일: ASOS_Core.cpp 프로젝트: tkai8/asos
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;
}
예제 #2
0
파일: plugin.cpp 프로젝트: egolf/qClientes
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 );
}