ibridge_server.h File Reference
Description
Bridge server.
Code Example
ibridge_server.h
/***************************************************************************************************
* Copyright 2024 NVIDIA Corporation. All rights reserved.
**************************************************************************************************/
#ifndef MI_NEURAYLIB_IBRIDGE_SERVER_H
#define MI_NEURAYLIB_IBRIDGE_SERVER_H
#include <mi/base/enums.h>
#include <mi/base/handle.h>
#include <mi/base/interface_implement.h>
#include <mi/base/uuid.h>
#include <mi/neuraylib/iserializer.h>
#include <mi/neuraylib/itransaction.h>
#include <mi/neuraylib/iuser_class_factory.h>
namespace mi {
class IString;
class IMap;
namespace http { class IServer; }
namespace neuraylib { class IImport_result; class IExport_result; }
namespace bridge {
class IApplication;
class IApplication_session_handler;
class IElement_set;
class IServer_session;
class IServer_transaction;
class IServer_video_context;
class IServer_job_info;
class IServer_job : public
mi::base::Interface_declare<0x555dea0f,0x4eeb,0x44b9,0xba,0x81,0x5a,0x42,0x3d,0xe5,0xf8,0x30,
neuraylib::ISerializable>
{
public:
virtual void execute(IServer_transaction* transaction, neuraylib::ISerializer* serializer,
IServer_job_info* job_info) = 0;
virtual void cancel() = 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 = IServer_job>
class Server_job : public base::Interface_implement<I>
{
public:
typedef Server_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 serialize( neuraylib::ISerializer* serializer) const
{
// avoid warnings
(void) serializer;
}
virtual void cancel() { }
};
class IServer_job_info : public
mi::base::Interface_declare<0xa28b5525,0x728b,0x447a,0x89,0x9f,0x15,0x64,0xdf,0x14,0xc7,0xdc>
{
public:
virtual IServer_job* get_job() const = 0;
template<class T>
T* get_job() const
{
IServer_job* ptr_job = get_job();
if ( !ptr_job)
return 0;
T* ptr_T = static_cast<T*>( ptr_job->get_interface( typename T::IID()));
ptr_job->release();
return ptr_T;
}
virtual const char* get_id() const = 0;
virtual base::Uuid
get_job_uuid() = 0;
};
class IServer_job_list : public
mi::base::Interface_declare<0xde301678,0x11e9,0x4bed,0x9b,0xc3,0x60,0x1e,0xcf,0xa3,0x88,0xa9>
{
public:
virtual Size
get_size() = 0;
virtual IServer_job_info* get_job(Size index) = 0;
};
class IServer_transaction_callback : public
mi::base::Interface_declare<0x7796c406,0xff8f,0x423d,0x8f,0x53,0x1a,0x66,0x50,0xcf,0x83,0x86>
{
public:
virtual void transaction_committed_callback() = 0;
virtual void transaction_aborted_callback( Sint32 error_code, const char* message) = 0;
};
class IIncremental_snapshot_context : public
mi::base::Interface_declare<0x5ec24e12,0x9ce9,0x4f39,0x9f,0xd5,0x35,0xf1,0xe5,0x41,0x34,0x2e>
{
public:
virtual Sint32
create_snapshot( IServer_transaction* transaction, IString* snapshot_id) = 0;
};
class IServer_transaction : public
mi::base::Interface_declare<0x67fd848e,0xce43,0x4675,0x8b,0x14,0xb2,0x54,0xd,0xd2,0x29,0x63>
{
public:
virtual IServer_session* get_session() const = 0;
virtual neuraylib::ITransaction* get_database_transaction() const = 0;
template<class T>
T* get_database_transaction() const
{
neuraylib::ITransaction* ptr_itransaction = get_database_transaction();
if ( !ptr_itransaction)
return 0;
T* ptr_T = static_cast<T*>( ptr_itransaction->get_interface( typename T::IID()));
ptr_itransaction->release();
return ptr_T;
}
virtual Sint32
add_transaction_callback( IServer_transaction_callback* callback) = 0;
virtual Sint32
remove_transaction_callback( IServer_transaction_callback* callback) = 0;
virtual Sint32
create_snapshot( const char* element, IString* snapshot_id) = 0;
virtual Sint32
create_incremental_snapshot_context(
const char* element, IString* snapshot_id, IIncremental_snapshot_context** context) = 0;
virtual Size
get_updated_element_count() const = 0;
virtual IServer_job_list* get_pending_jobs() const = 0;
virtual const char* get_id() const = 0;
};
enum Server_session_state
{
SERVER_SESSION_CONNECTING = 0,
SERVER_SESSION_CONNECTED = 1,
SERVER_SESSION_PENDING = 2,
SERVER_SESSION_CLOSED = 3,
SERVER_SESSION_FORCE_32_BIT = 0xffffffffU
};
mi_static_assert( sizeof( Server_session_state) == sizeof( Uint32));
class IServer_session_state_callback : public
mi::base::Interface_declare<0x12a50ba1,0x9cfc,0x4a12,0x9a,0x4b,0x52,0x13,0xf6,0x98,0x81,0x11>
{
public:
virtual void session_state_callback( IServer_session* session) = 0;
};
class IServer_transaction_list : public
mi::base::Interface_declare<0xe97c6925,0x780,0x40b7,0x8c,0xc0,0xa9,0x2f,0x73,0xfe,0xb7,0x8
>
{
public:
virtual Size
get_size() = 0;
virtual IServer_transaction* get_transaction(Size index) = 0;
};
class IServer_session : public
mi::base::Interface_declare<0x42574f4a,0xfab1,0x4fdc,0xa0,0xc7,0x52,0x48,0xba,0xfa,0x8e,0x7d>
{
public:
virtual Server_session_state
get_state() const = 0;
virtual IApplication* get_application() const = 0;
virtual IServer_video_context* get_video_context( Sint32 context_id) = 0;
virtual void add_session_state_callback( IServer_session_state_callback* callback) = 0;
virtual void remove_session_state_callback( IServer_session_state_callback* callback) = 0;
virtual const char* get_security_token() const = 0;
virtual const char* get_session_id() const = 0;
virtual const char* get_client_build_number() = 0;
virtual const char* get_client_bridge_protocol_version() = 0;
virtual IServer_transaction_list* get_pending_transactions() = 0;
};
class IApplication_session_handler : public
mi::base::Interface_declare<0x8913c078,0xeba2,0x4e0b,0x83,0x44,0x1,0xcb,0x2b,0x57,0x67,0x3c>
{
public:
virtual bool on_session_connect( IServer_session* session) = 0;
};
class IApplication : public
mi::base::Interface_declare<0x84c2d806,0x6e1f,0x402d,0xb2,0xa,0x2f,0xcf,0x47,0xd1,0xf,0x2e>
{
public:
virtual Sint32
register_job(
const base::Uuid& job_class_id, neuraylib::IUser_class_factory* factory) = 0;
template <class T>
Sint32
register_job()
{
mi::base::Handle< mi::neuraylib::IUser_class_factory> factory(
new neuraylib::User_class_factory< T>());
return register_job( typename T::IID(), factory.get());
}
virtual Sint32
unregister_job( const base::Uuid& job_class_id) = 0;
template <class T>
Sint32
unregister_job()
{
return unregister_job( typename T::IID());
}
virtual Sint32
set_disk_cache( const char* location) = 0;
virtual const char* get_disk_cache() const = 0;
virtual Sint32
open() = 0;
virtual Sint32
close() = 0;
virtual bool is_open() = 0;
virtual Sint32
set_session_handler( IApplication_session_handler* handler) = 0;
virtual IApplication_session_handler* get_session_handler() const = 0;
virtual Sint32
set_log_forwarding_limit( base::Message_severity limit) = 0;
virtual base::Message_severity
get_log_forwarding_limit() const = 0;
};
class IBridge_snapshot_context : public
mi::base::Interface_declare<0x9a9ceafe,0x876b,0x4647,0xbc,0xae,0xb6,0x4,0x9c,0x7b,0x9,0xfc>
{
public:
virtual neuraylib::IImport_result* import_snapshot(
neuraylib::ITransaction* transaction,
const char* snapshot_id,
const IMap* importer_options = 0) = 0;
virtual Sint32
remove_snapshot( const char* snapshot_id) = 0;
virtual neuraylib::IExport_result* export_snapshot(
neuraylib::ITransaction* transaction,
const IArray* elements,
const IMap* exporter_options,
IString* snapshot_id) = 0;
};
class IBridge_server : public
mi::base::Interface_declare<0x1fd8a3ac,0xa70c,0x4273,0xa9,0x1a,0x67,0x57,0xdf,0xc7,0xa5,0xb>
{
public:
virtual IApplication* create_application(
const char* application_path, http::IServer* http_server) = 0;
virtual IBridge_snapshot_context* create_snapshot_context( const char* disk_cache) = 0;
virtual const char* get_bridge_protocol_version() const = 0;
virtual Sint32
calculate_hash(
neuraylib::ITransaction* transaction,
const char* element,
IString* o_hash,
Size* o_size) = 0;
};
// end group mi_neuray_bridge_server
} // namespace bridge
} // namespace mi
#endif // MI_NEURAYLIB_IBRIDGE_SERVER_H
Namespaces
- namespace
- Common namespace for APIs of NVIDIA Advanced Rendering Center GmbH. More...
- namespace
- Namespace for the Bridge functionality of the neuray API. More...
- namespace
- Namespace for the HTTP server of the neuray API. More...
- namespace
- Namespace for the neuray API. More...
Classes
- class
- This class represents a Bridge application. More...
- class
- Abstract interface that can be used to control which sessions to a Bridge application are established, based on credentials supplied by the client. More...
- class
- API component that serves as entry point for the server-side Bridge API. More...
- class
- Context to import, export, or remove snapshots. More...
- class
- Context for incremental snapshots. More...
- class
- Represents the server-side part of a job that can be executed by the Bridge server. More...
- class
- Provides additional information about a bridge job. More...
- class
- A list of IServer_job instances. More...
- class
- Represents the server side of a Bridge session. More...
- class
- Abstract interface for callbacks for session state changes. More...
- class
- Database transactions started on the client will be automatically mirrored to the server and exposed as instances of this class to executing Bridge jobs. More...
- class
- Abstract interface for callbacks for transaction commit or abort events. More...
- class
- A list of IServer_transaction instances. More...
- class
- This mixin class provides a default implementation for some of the methods needed by mi::bridge::IServer_job. More...
Enumerations
- enum {SERVER_SESSION_CONNECTING = 0, SERVER_SESSION_CONNECTED = 1, SERVER_SESSION_PENDING = 2, SERVER_SESSION_CLOSED = 3, SERVER_SESSION_FORCE_32_BIT = 0xffffffffU }
- The different states a server session can be in. More...