CVB++ 15.0
Loading...
Searching...
No Matches
detail_server_gev3.hpp
1#pragma once
2
3#include "../../_cexports/c_gev_server.h"
4#include "../_decl/decl_server_gev3.hpp"
5#include "../_decl/decl_stream_gev3.hpp"
6#include "../../driver/flow_set_pool.hpp"
7#include "../../driver/gendc_descriptor.hpp"
8
9namespace Cvb
10{
11 CVB_BEGIN_INLINE_NS
12 namespace GevServer
13 {
15 {
16 auto server = Internal::DoResCallShareOut<ServerGev3>([&](void *&handle) {
17 return CVB_CALL_CAPI(CVGSCreateGevServer3(static_cast<CExports::TDriver>(driverType), handle));
18 });
19 return server;
20 }
21
22 inline size_t ServerGev3::GetRegisteredFlowSetPoolSize() const noexcept
23 {
24 return registeredPoolSize_;
25 }
26
28 {
29 return registeredFlowSetInfo_;
30 }
31
33 std::function<void()> userCallback)
34 {
35 if (!pool)
36 throw std::invalid_argument("FlowSetPool must not be null");
37
38 if (!userCallback)
39 throw std::invalid_argument("User callback must not be null");
40
41 pool->SetUserCallback(userCallback);
42 CVB_CALL_CAPI_CHECKED(CVGSServerRegisterFlowSetPool(
43 Handle(), reinterpret_cast<CExports::CVDGNDCDESCRIPTORDATA *>(descriptor.Handle()),
44 reinterpret_cast<CExports::CVDFlowSet *>(pool->ToNativeStruct().data()), pool->PoolSize(),
45 pool->OnReleaseCallback, &*pool));
46 registeredPoolSize_ = pool->PoolSize();
47 registeredFlowSetInfo_ = pool->FlowSetInfo();
48 pool->SetReleaseThis(pool);
49 }
50
52 {
53 if (hasStream_)
54 return gsStream_.AtomicGet([&]() {
56 });
57 else
58 return nullptr;
59 }
60
61 } // namespace GevServer
62 CVB_END_INLINE_NS
63} // namespace Cvb
Class for a GenDC container descriptor.
Definition decl_gendc_descriptor.hpp:692
void * Handle() const noexcept
Return the Handle to the internal resource.
Definition detail_gendc_descriptor.hpp:665
size_t GetRegisteredFlowSetPoolSize() const noexcept
Gets the size of the registered flow set pool.
Definition detail_server_gev3.hpp:22
std::vector< FlowInfo > GetRegisteredFlowSetInfo() const noexcept
Gets the registered flow set information about the count and size of the flows.
Definition detail_server_gev3.hpp:27
void RegisterFlowSetPool(const GenDcDescriptor &descriptor, FlowSetPoolPtr flowSetPool, std::function< void()> onFlowSetRelease)
Registers a flow set pool with the server. Uses a callback that will be called when the flow set pool...
Definition detail_server_gev3.hpp:32
StreamGev3Ptr Stream() const
Gets the Cvb::GevServer::StreamGev3 for sending GenDC data.
Definition detail_server_gev3.hpp:51
void * Handle() const noexcept override
Returns the internal handle of this server object.
Definition decl_server_gev3.hpp:62
static ServerGev3Ptr Create(GevServer::DriverType driverType)
Creates a new ServerGev3 object with a client configurable payload in the format of GenDC.
Definition detail_server_gev3.hpp:14
T make_shared(T... args)
std::shared_ptr< FlowSetPool > FlowSetPoolPtr
Convenience shared pointer for FlowSetPool.
Definition driver.hpp:33
Namespace for GevServer based device configuration.
Definition decl_int_swiss_knife_node.hpp:11
DriverType
GigE Vision driver to use for communication and streaming.
Definition gevserver.hpp:167
std::shared_ptr< StreamGev3 > StreamGev3Ptr
Convenience shared pointer for StreamGev3.
Definition gevserver.hpp:68
std::shared_ptr< ServerGev3 > ServerGev3Ptr
Convenience shared pointer for a version 3 GevServer.
Definition gevserver.hpp:48
Root namespace for the Image Manager interface.
Definition version.hpp:11
T const_pointer_cast(T... args)