neuray Services API Programmer's Manual

icommand.h File Reference

Description

neuray services command system

Code Example

icommand.h

‎/******************************************************************************
 * Copyright 2010-2020 MIGENIUS PTY LTD, Australia. All rights reserved.
 *
 * Portions Copyright 1986, 2011 NVIDIA Corporation. All rights reserved.
 *****************************************************************************/
//*****************************************************************************
#ifndef MI_NSERVICES_ICOMMAND_H
#define MI_NSERVICES_ICOMMAND_H

#include <mi/nservices/ifactory.h>
#include <mi/neuraylib/iuser_class.h>
#include <mi/base/handle.h>

namespace mi {
class IData;
class IString;
class IMap;
namespace neuraylib {
class IPlugin_api;
class IScope;
class ITransaction;

}
namespace nservices {

class ICommand_context;
class ICommand_request;
class ICommand_response;
class IEvent_context;
class IScene;
class IConverter;









class ICommand_context : public
    mi::base::Interface_declare<0xEC0692F7,0x67B0,0x4EC8,0xA1,0x7E,0x54,0x93,0xFD,0x51,0x21,0x90>
{
public:
    // command information

    virtual const char * get_command_name() const = 0;

    virtual Uint32 
               get_num_arguments() const = 0;

    virtual const IData *get_argument(const char *name) const = 0;

    virtual Sint32 
               get_argument(
        Uint32 index,
        const char **name,
        const IData **value) const = 0;

    template <class T>
    const T* get_argument(const char *name) const {
        const base::IInterface *ptr_iinterface = get_argument(name);
        if (ptr_iinterface) {
            const T *ptr_T = ptr_iinterface->get_interface<T>();
            ptr_iinterface->release();
            return ptr_T;
        }
        return NULL;
    };

    virtual const ICommand_response* execute_command(ICommand_request *command_request) = 0;

    virtual ICommand_response* create_command_response()const = 0;

    // neuray library

    virtual neuraylib::IPlugin_api* get_plugin_api() const = 0;

    virtual neuraylib::ITransaction* get_transaction()  = 0;

    virtual Sint32 
               create_new_transaction(bool commit=true) = 0;

    virtual Sint32 
               change_scope(const char *scope_name) = 0;

    virtual Sint32 
               change_scope(neuraylib::IScope *scope) = 0;

    virtual neuraylib::ITransaction* get_user_state()  = 0;

    // data

    virtual IConverter *get_converter() const = 0;

    // events

    virtual IEvent_context* get_event_context() const = 0;

    virtual IFactory *get_factory() const = 0;

    // attachments

    virtual IMap* get_attachments()const  = 0;

    virtual IMap* get_command_attachments()const = 0;

    virtual Sint32 
               set_tainted(bool tainted) = 0;

    virtual bool get_tainted() = 0;
};

class IArgument_description : public
    mi::base::Interface_declare<0x610AE7D9,0x3399,0x4BE4,0xA4,0x0D,0x4B,0x88,0x5F,0x0E,0xB5,0x83>
{
public:
    virtual void set_name(const char *name) = 0;

    virtual const char *get_name() const = 0;

    virtual void set_type_name(const char *type_name) = 0;

    virtual const char *get_type_name() const = 0;

    virtual void set_description(const char *description) = 0;

    virtual const char *get_description() const = 0;

    virtual bool has_default_value() const = 0;

    virtual mi::Sint32 
               set_default_value(const IData *value) = 0;

    virtual const IData *get_default_value() const = 0;
};


class IService_command : public
    mi::base::Interface_declare<0x8C0D5810,0x4381,0x4C11,0xBB,0x7E,0xBD,0xCE,0xEA,0x3A,0x99,0x01>
{
public:
    virtual const char *get_name() const = 0;

    virtual const char *get_namespace() const = 0;

    virtual const char *get_description() const = 0;

    virtual Sint32 
               get_argument_description(
        IFactory *factory,
        const char *argument_name,
        IArgument_description *argument) const = 0;

    virtual Sint32 
               get_argument_description(
        IFactory *factory,
        Uint32 index,
        IArgument_description *argument) const = 0;

    virtual const char *get_return_type_name() const = 0;

    //  If the method
    virtual const ICommand_response *execute(ICommand_context *context) const = 0;

    virtual const char* get_return_description()const = 0;

    virtual const char* get_metadata(const char *key)const = 0;

    virtual const char* get_metadata_key(mi::Uint32 index)const = 0;

    virtual const char* get_metadata_value(mi::Uint32 index)const = 0;
};

class ICommand_request : public
    mi::base::Interface_declare<0x137B0549,0xF6F0,0xDBDA,0x7B,0x58,0x0D,0x36,0x74,0xDC,0xC4,0xC9>
{

public:
    virtual const char * get_command_name() const = 0;

    virtual Uint32 
               get_num_arguments() const = 0;

    virtual const IData *get_argument(const char *name) const = 0;

    template <class T>
    const T* get_argument(const char *name) const {
        const base::IInterface *ptr_iinterface = get_argument(name);
        if (ptr_iinterface) {
            const T *ptr_T = ptr_iinterface->get_interface<T>();
            ptr_iinterface->release();
            return ptr_T;
        }
        return NULL;
    };

    virtual Sint32 
               get_argument(
        Uint32 index,
        const char **name,
        const IData **value) const = 0;

    virtual void set_command_name(const char *command) = 0;

    virtual Sint32 
               set_argument(const char *name, const IData *value) = 0;

    virtual IMap *get_attachments()const = 0;
   
};

class ICommand_response : public
    mi::base::Interface_declare<0x46F33C7D,0xE1E4,0xE5FA,0x63,0xAA,0x71,0x69,0x7E,0x95,0x44,0x4B>
{
public:
    virtual const ICommand_request* get_request() const = 0;

    virtual bool is_error() const = 0;

    virtual Sint32 
               get_error_code() const = 0;

    virtual const char *get_error_message() const = 0;

    virtual const IData* get_extra_error_information() const = 0;

    template <class T>
    const T* get_extra_error_information() const {
        const base::IInterface *ptr_iinterface = get_extra_error_information();
        if (ptr_iinterface) {
            const T *ptr_T = ptr_iinterface->get_interface<T>();
            ptr_iinterface->release();
            return ptr_T;
        }
        return NULL;
    };

    virtual const IData* get_result() const = 0;

    template <class T>
    const T* get_result() const {
        const base::IInterface *ptr_iinterface = get_result();
        if (ptr_iinterface) {
            const T *ptr_T = ptr_iinterface->get_interface<T>();
            ptr_iinterface->release();
            return ptr_T;
        }
        return NULL;
    };

    virtual void set_error(Sint32 code,
                           const char *message,
                           const IData *extra_information = NULL) = 0;

    virtual void set_result(const IData *value) = 0;

    virtual mi::Sint32 
               copy_from(const ICommand_response *response) = 0;
};

class IPath_remapper : public
    mi::base::Interface_declare<0xF414D5E6,0xF037,0x42FD,0x93,0xEA,0x89,0x90,0xA7,0x2A,0xDD,0x7D>
{
public:
    virtual IString *get_absolute_path(const char *path) const = 0;
};
 // end group mi_nservices_commands

} // namespace nservices
} // namespace mi

#endif // MI_NSERVICES_ICOMMAND_H

Namespaces

namespace mi
namespace mi::neuraylib
namespace 
Namespace for the neuray Services API. More...

Classes

class 
Describes an argument to a service command. More...
class 
The context is which a command is executed. More...
class 
A request to execute a web service command. More...
class 
A response from a neuray service command. More...
class 
This class is used to map relative paths passed in as arguments to commands to absolute paths on the local filesystem. More...
class 
Interface for Neuray Service Commands. More...