OpenSRX 0.1.0
C++ library for interfacing with Keyence SR series barcode readers
Loading...
Searching...
No Matches
OpenSRX::ImageServer Class Reference

Embedded FTP server for receiving images from the scanner. More...

#include <ImageServer.hpp>

Public Member Functions

 ImageServer (uint16_t port=0, const std::string &username="opensrx", const std::string &password="opensrx")
 Construct (but do not start) the image server.
 
 ~ImageServer ()
 
 ImageServer (const ImageServer &)=delete
 
ImageServeroperator= (const ImageServer &)=delete
 
void start ()
 
void stop ()
 
bool isRunning () const
 
uint16_t getPort () const
 
std::string getUsername () const
 
std::string getPassword () const
 
std::string getRootPath () const
 
Image waitForImage ()
 Block until an image is available, then return it.
 
bool tryGetImage (Image &image)
 Return the next image if one is available, without blocking.
 
std::deque< ImagegetImages ()
 Return all images currently queued.
 
void setImageCallback (std::function< void(const Image &)> cb)
 Set a callback invoked each time a new image is decoded.
 

Private Member Functions

void watchDirectory ()
 

Private Attributes

uint16_t port
 
std::string username
 
std::string password
 
std::string rootPath
 
std::unique_ptr< fineftp::FtpServer > ftpServer
 
std::atomic< bool > running {false}
 
std::thread watcherThread
 
std::mutex queueMutex
 
std::condition_variable queueCV
 
std::deque< ImageimageQueue
 
std::function< void(const Image &)> imageCallback
 

Detailed Description

Embedded FTP server for receiving images from the scanner.

Creates a temporary directory (under /tmp) and starts a fineftp FTP server. A background thread polls the directory for new BMP files, decodes them, and stores them in a queue that can be consumed by the caller.

Constructor & Destructor Documentation

◆ ImageServer() [1/2]

OpenSRX::ImageServer::ImageServer ( uint16_t port = 0,
const std::string & username = "opensrx",
const std::string & password = "opensrx" )

Construct (but do not start) the image server.

Parameters
portFTP port to listen on (0 = OS picks a free port).
usernameFTP username the scanner will log in with.
passwordFTP password the scanner will log in with.

◆ ~ImageServer()

OpenSRX::ImageServer::~ImageServer ( )

◆ ImageServer() [2/2]

OpenSRX::ImageServer::ImageServer ( const ImageServer & )
delete

Member Function Documentation

◆ getImages()

std::deque< Image > OpenSRX::ImageServer::getImages ( )

Return all images currently queued.

◆ getPassword()

std::string OpenSRX::ImageServer::getPassword ( ) const
inline
Returns
The FTP password.

◆ getPort()

uint16_t OpenSRX::ImageServer::getPort ( ) const
Returns
The port the FTP server is listening on (valid after start()).

◆ getRootPath()

std::string OpenSRX::ImageServer::getRootPath ( ) const
inline
Returns
The local filesystem path where images are received.

◆ getUsername()

std::string OpenSRX::ImageServer::getUsername ( ) const
inline
Returns
The FTP username.

◆ isRunning()

bool OpenSRX::ImageServer::isRunning ( ) const
inline
Returns
true if the server is running.

◆ operator=()

ImageServer & OpenSRX::ImageServer::operator= ( const ImageServer & )
delete

◆ setImageCallback()

void OpenSRX::ImageServer::setImageCallback ( std::function< void(const Image &)> cb)

Set a callback invoked each time a new image is decoded.

The callback runs on the watcher thread; keep it fast.

◆ start()

void OpenSRX::ImageServer::start ( )

Start the FTP server and the background watcher thread.

◆ stop()

void OpenSRX::ImageServer::stop ( )

Stop the FTP server and watcher thread.

◆ tryGetImage()

bool OpenSRX::ImageServer::tryGetImage ( Image & image)

Return the next image if one is available, without blocking.

Parameters
[out]imageFilled with the image data on success.
Returns
true if an image was available.

◆ waitForImage()

Image OpenSRX::ImageServer::waitForImage ( )

Block until an image is available, then return it.

Returns
The next decoded Image, or a default Image if the server is stopped while waiting.

◆ watchDirectory()

void OpenSRX::ImageServer::watchDirectory ( )
private

Member Data Documentation

◆ ftpServer

std::unique_ptr<fineftp::FtpServer> OpenSRX::ImageServer::ftpServer
private

◆ imageCallback

std::function<void(const Image&)> OpenSRX::ImageServer::imageCallback
private

◆ imageQueue

std::deque<Image> OpenSRX::ImageServer::imageQueue
private

◆ password

std::string OpenSRX::ImageServer::password
private

◆ port

uint16_t OpenSRX::ImageServer::port
private

◆ queueCV

std::condition_variable OpenSRX::ImageServer::queueCV
private

◆ queueMutex

std::mutex OpenSRX::ImageServer::queueMutex
private

◆ rootPath

std::string OpenSRX::ImageServer::rootPath
private

◆ running

std::atomic<bool> OpenSRX::ImageServer::running {false}
private

◆ username

std::string OpenSRX::ImageServer::username
private

◆ watcherThread

std::thread OpenSRX::ImageServer::watcherThread
private

The documentation for this class was generated from the following file: