neuray API Programmer's Manual

ibridge_client.h File Reference

Description

Bridge client.

Code Example

ibridge_client.h

‎/***************************************************************************************************
 * Copyright 2023 NVIDIA Corporation. All rights reserved.
 **************************************************************************************************/

#ifndef MI_NEURAYLIB_IBRIDGE_CLIENT_H
#define MI_NEURAYLIB_IBRIDGE_CLIENT_H

#include <mi/base/enums.h>
#include <mi/base/interface_implement.h>
#include <mi/neuraylib/iserializer.h>

namespace mi {

class IMap;
class IString;

namespace base { class ILogger; }

namespace neuraylib {
class IDeserializer;
class ITransaction;
class ITag_set;
}

namespace bridge {

class IClient_video_context;













enum Client_job_state
{
    CLIENT_JOB_DETECTING_CHANGES = 0,

    CLIENT_JOB_PREPARING = 1,

    CLIENT_JOB_QUERYING_CACHE_STATUS = 2,

    CLIENT_JOB_UPLOADING = 3,

    CLIENT_JOB_PENDING = 4,

    CLIENT_JOB_DONE = 5,

    CLIENT_JOB_FORCE_32_BIT = 0xffffffffU
};

mi_static_assert( sizeof( Client_job_state) == sizeof( Uint32));

class IClient_job_progress : public
    mi::base::Interface_declare<0x7f51a745,0xfcf0,0x4b2d,0x92,0x93,0x2b,0x84,0xd7,0x8c,0xc0,0xe6>
{
public:
    virtual Client_job_state 
               get_state() const = 0;

    virtual Size 
               get_updated_element_count() const = 0;

    virtual Size 
               get_pending_hash_calculation_count() const = 0;

    virtual Size 
               get_pending_cache_status_count() const = 0;

    virtual Size 
               get_cache_miss_count() const = 0;

    virtual Size 
               get_cache_miss_bytes() const = 0;

    virtual Size 
               get_uploaded_cache_miss_count() const = 0;

    virtual Size 
               get_uploaded_cache_miss_bytes() const = 0;

    virtual Size 
               get_pending_data_serialization_count() const = 0;

    virtual const char* get_currently_uploaded_element_name() const = 0;

    virtual Size 
               get_currently_uploaded_element_size() const = 0;

    virtual Size 
               get_currently_uploaded_element_uploaded_bytes() const = 0;
};

class IElement_set : public
    mi::base::Interface_declare<0x2242471d,0x96f3,0x4962,0x84,0x7e,0xd1,0x20,0xa9,0x6b,0xb6,0x98>
{
public:
    virtual Size 
               get_length() const = 0;

    virtual const char* get_element( Size index) const = 0;

    virtual void add_element( const char* element_name) = 0;
};

class IClient_job : public
    mi::base::Interface_declare<0xe02e4aeb,0x6edd,0x4e40,0xbb,0xe0,0x6c,0xc5,0xe7,0x69,0xa6,0xe,
    neuraylib::ISerializable>
{
public:
    virtual void get_references( neuraylib::ITag_set* result) const = 0;

    virtual void get_references( IElement_set* result) const = 0;

    virtual bool upload_only() const = 0;

    virtual void receive_remote_result(
        neuraylib::IDeserializer* deserializer, bool last_result) = 0;

    virtual void progress_callback( IClient_job_progress* job_progress) = 0;

    virtual void error_callback( Sint32 error_code, const char* msg) = 0;
};

template <Uint32 i_id1, Uint16 i_id2, Uint16 i_id3
, Uint8 i_id4, Uint8 i_id5, Uint8 i_id6, Uint8 i_id7
, Uint8 i_id8, Uint8 i_id9, Uint8 i_id10, Uint8 i_id11
, class I = IClient_job>
class Client_job : public base::Interface_implement<I>
{
public:
    typedef Client_job< i_id1, i_id2, i_id3, i_id4, i_id5, i_id6, i_id7, i_id8, i_id9, i_id10, i_id11, I> 
               Self;

    typedef base::Uuid_t< i_id1, i_id2, i_id3, i_id4, i_id5, i_id6, i_id7, i_id8, i_id9, i_id10, i_id11> 
               IID;

    static bool compare_iid( const base::Uuid& iid)
    {
        if( iid == IID())
            return true;
        return I::compare_iid( iid);
    }

    virtual const base::IInterface* get_interface( const base::Uuid& interface_id) const
    {
        if( interface_id == IID()) {
            const Self* self = static_cast<const Self*>( this);
            self->retain();
            return self;
        }
        return I::get_interface_static( this, interface_id);
    }

    virtual base::IInterface* get_interface( const base::Uuid& interface_id)
    {
        if( interface_id == IID()) {
            Self* self = static_cast<Self*>( this);
            self->retain();
            return self;
        }
        return I::get_interface_static( this, interface_id);
    }

    using base::Interface_implement< I>::get_interface;

    virtual base::Uuid 
               get_class_id() const
    {
        return IID();
    }

    virtual void deserialize( neuraylib::IDeserializer* deserializer)
    {
        // avoid warnings
        (void) deserializer;
    }

    virtual void get_references( neuraylib::ITag_set* result) const
    {
        // avoid warnings
        (void) result;
    }

    virtual void get_references( IElement_set* result) const
    {
        // avoid warnings
        (void) result;
    }

    virtual bool upload_only() const { return false; }
};

class Update_job : public mi::bridge::Client_job<
    0xf9b3c8e2,0x7688,0x4bf8,0x91,0x36,0xcd,0x3a,0x3f,0x51,0x30,0x7a>
{
    void serialize( neuraylib::ISerializer* serializer) const
    {
        // avoid warnings
        (void) serializer;
    }

    void receive_remote_result( neuraylib::IDeserializer* deserializer, bool last_result)
    {
        // avoid warnings
        (void) deserializer;
        (void) last_result;
    }
};


enum Client_session_state
{
    CLIENT_SESSION_CONNECTING,

    CLIENT_SESSION_CONNECTED,

    CLIENT_SESSION_PENDING,

    CLIENT_SESSION_CLOSED
};

mi_static_assert( sizeof( Client_session_state) == sizeof( Uint32));

class IClient_session_state_callback : public
    mi::base::Interface_declare<0x9ea6d3b3,0x3d0b,0x4d10,0x89,0xc8,0x89,0xf1,0x20,0x49,0xc6,0xe1>
{
public:
    virtual void session_state_callback( Client_session_state state) = 0;
};

class IClient_measure_bandwidth_callback : public
    mi::base::Interface_declare<0x80cf9612,0x3fd4,0x4ed0,0xb1,0x63,0xc0,0xd9,0x84,0xe2,0x6,0xaa>
{
public:
    virtual void progress_callback( Size bytes_done, Size total_bytes) = 0;

    virtual void done_callback( Size total_bytes, Float64 total_time) = 0;

    virtual void error_callback( Sint32 error_code) = 0;
};

class IClient_session : public
    mi::base::Interface_declare<0x70bb8712,0x1305,0x4c76,0xb9,0x38,0xad,0x27,0x91,0xea,0xbd,0x78>
{
public:
    virtual Client_session_state 
               get_state() = 0;

    virtual void add_session_state_callback( IClient_session_state_callback* callback) = 0;

    virtual void remove_session_state_callback( IClient_session_state_callback* callback) = 0;

    virtual Sint32 
               execute(IClient_job* job, neuraylib::ITransaction* transaction) = 0;

    virtual Sint32 
               cancel(IClient_job* job) = 0;

    virtual IClient_video_context* create_video_context() = 0;

    virtual Sint32 
               measure_bandwidth(
        IClient_measure_bandwidth_callback* progress_callback,
        bool upload,
        Uint32 package_size,
        Uint32 package_count = 1) = 0;

    virtual void set_receiving_logger( base::ILogger* logger) = 0;

    virtual base::ILogger* get_receiving_logger() const = 0;

    virtual Sint32 
               set_forwarding_log_level( base::Message_severity level) = 0;

    virtual base::Message_severity 
               get_forwarding_log_level() const = 0;

    virtual Size 
               get_bytes_written() const = 0;

    virtual Size 
               get_bytes_read() const = 0;

    virtual Sint32 
               set_hash_overrides(
        const IMap* overrides, 
        const char* top_level_element,
        neuraylib::ITransaction* transaction) = 0;
    
};

class IBridge_client : public
    mi::base::Interface_declare<0xbe270827,0xad68,0x4044,0x94,0x6e,0x9d,0x41,0x4d,0xf,0x75,0x65>
{
public:
    virtual IClient_session* get_session(
        const char* application_url, const char* security_token = 0) = 0;

    virtual const char* get_bridge_protocol_version() const = 0;
};
 // end group mi_neuray_bridge_client

} // namespace bridge

} // namespace mi

#endif // MI_NEURAYLIB_IBRIDGE_CLIENT_H

Namespaces

namespace 
Common namespace for APIs of NVIDIA Advanced Rendering Center GmbH. More...
namespace 
Namespace for the Base API. More...
namespace 
Namespace for the Bridge functionality of the neuray API. More...
namespace 
Namespace for the neuray API. More...

Classes

class 
This mixin class provides a default implementation for some of the methods needed by mi::bridge::IClient_job. More...
class 
API component that serves as entry point for the client-side Bridge API. More...
class 
Represents the client-side part of a job that can be executed by the Bridge server. More...
class 
Provides detailed information about the progress of a Bridge job. More...
class 
Abstract interface for bandwidth measurement events. More...
class 
Represents the client side of a Bridge session. More...
class 
Abstract interface for callbacks for session state changes. More...
class 
Used to specify a set of elements by name. More...
class 
Base class for Bridge jobs that only update elements without executing anything. More...

Enumerations

enum  {CLIENT_JOB_DETECTING_CHANGES = 0, CLIENT_JOB_PREPARING = 1, CLIENT_JOB_QUERYING_CACHE_STATUS = 2, CLIENT_JOB_UPLOADING = 3, CLIENT_JOB_PENDING = 4, CLIENT_JOB_DONE = 5, CLIENT_JOB_FORCE_32_BIT = 0xffffffffU }
Job states of Bridge jobs. More...
enum  {CLIENT_SESSION_CONNECTING, CLIENT_SESSION_CONNECTED, CLIENT_SESSION_PENDING, CLIENT_SESSION_CLOSED }
The different states a client session can be in. More...