CVB++ 15.0
Loading...
Searching...
No Matches
decl_server_gev3.hpp
1#pragma once
2
3#include "../../exception.hpp"
4#include "../../global.hpp"
5#include "../../size_2d.hpp"
6#include "../../utilities/system_info.hpp"
7#include "../logical_network_interface.hpp"
8
9#include "../../driver/driver.hpp"
10#include "../../driver/flow_set_pool.hpp"
11#include "../../driver/gendc_descriptor.hpp"
12#include "../_decl/decl_server_base.hpp"
13#include "../gevserver.hpp"
14#include "../../pfnc_format.hpp"
15
16namespace Cvb
17{
18 CVB_BEGIN_INLINE_NS
19
20 template <>
21 inline HandleGuard<GevServer::ServerGev3>::HandleGuard(void *handle) noexcept
22 : HandleGuard<GevServer::ServerGev3>(handle, [](void *handle) { CVB_CALL_CAPI(ReleaseObject(handle)); })
23 {
24 }
25
26 namespace GevServer
27 {
31 class ServerGev3 : public ServerBase
32 {
33 public:
34 using GuardType = HandleGuard<ServerGev3>;
47
54 template <class T>
55 static ServerGev3Ptr FromHandle(HandleGuard<ServerGev3> &&guard)
56 {
57 if (!guard.Handle())
58 throw std::runtime_error("handle must not be null");
59 return std::make_shared<ServerGev3>(std::move(guard), ProtectedTag{});
60 }
61
62 void *Handle() const noexcept override
63 {
64 return handle_.Handle();
65 }
66
67 ServerGev3(HandleGuard<ServerGev3> &&guard, ProtectedTag)
68 : ServerBase(true)
69 , handle_(std::move(guard))
70 , registeredPoolSize_{0}
71 , registeredFlowSetInfo_{}
72
73 {
74 RegisterEvents();
75 }
76
86 void RegisterFlowSetPool(const GenDcDescriptor &descriptor, FlowSetPoolPtr flowSetPool,
87 std::function<void()> onFlowSetRelease);
88
93 size_t GetRegisteredFlowSetPoolSize() const noexcept;
94
99 std::vector<FlowInfo> GetRegisteredFlowSetInfo() const noexcept;
100
105 StreamGev3Ptr Stream() const;
106
107 private:
108 mutable Internal::AsyncRef<GevServer::StreamGev3> gsStream_;
109 std::vector<FlowInfo> registeredFlowSetInfo_;
110 size_t registeredPoolSize_;
111 HandleGuard<ServerGev3> handle_;
112 };
113 } // namespace GevServer
114 CVB_END_INLINE_NS
115} // namespace Cvb
Class for a GenDC container descriptor.
Definition decl_gendc_descriptor.hpp:692
Represents one acquisition stream of a device.
Definition decl_stream.hpp:33
Base class for a GigE Vision server object.
Definition decl_server_base.hpp:39
Specialized server class for GigE Vision 3.0 servers.
Definition decl_server_gev3.hpp:32
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
static ServerGev3Ptr FromHandle(HandleGuard< ServerGev3 > &&guard)
Creates a shared pointer to a ServerGev3 instance from a given handle guard.
Definition decl_server_gev3.hpp:55
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
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
cvbbool_t ReleaseObject(OBJ &Object)
T make_shared(T... args)
T move(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
Struct handling the size, alignment and number of flows per set.
Definition flow_set_pool.hpp:19