mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-04-28 01:00:02 +02:00
receiver socket
This commit is contained in:
parent
40c2d9f760
commit
e252b8e0e9
@ -113,7 +113,7 @@ class slsReceiverTCPIPInterface : private virtual slsDetectorDefs {
|
||||
int function_table();
|
||||
|
||||
/** Decodes Function */
|
||||
int decode_function(sls::DataSocket &socket);
|
||||
int decode_function(sls::ServerInterface2 &socket);
|
||||
|
||||
/** function not implemented for specific detector */
|
||||
void functionNotImplemented();
|
||||
@ -126,177 +126,177 @@ class slsReceiverTCPIPInterface : private virtual slsDetectorDefs {
|
||||
void validate(T arg, T retval, std::string modename, numberMode hex);
|
||||
|
||||
/** Unrecognized Function */
|
||||
int M_nofunc(sls::DataSocket & socket);
|
||||
int M_nofunc(sls::ServerInterface2 & socket);
|
||||
|
||||
|
||||
|
||||
/** Execute command */
|
||||
int exec_command();
|
||||
int exec_command(sls::ServerInterface2 &socket);
|
||||
|
||||
/** Exit Receiver Server */
|
||||
int exit_server();
|
||||
int exit_server(sls::ServerInterface2 &socket);
|
||||
|
||||
/** Locks Receiver */
|
||||
int lock_receiver();
|
||||
int lock_receiver(sls::ServerInterface2 &socket);
|
||||
|
||||
/** Get Last Client IP*/
|
||||
int get_last_client_ip();
|
||||
int get_last_client_ip(sls::ServerInterface2 &socket);
|
||||
|
||||
/** Set port */
|
||||
int set_port();
|
||||
int set_port(sls::ServerInterface2 &socket);
|
||||
|
||||
/** Updates Client if different clients connect */
|
||||
int update_client();
|
||||
int update_client(sls::ServerInterface2 &socket);
|
||||
|
||||
/** Sends the updated parameters to client */
|
||||
int send_update();
|
||||
int send_update(sls::ServerInterface2 &socket);
|
||||
|
||||
/** get version, calls get_version */
|
||||
int get_id();
|
||||
int get_id(sls::ServerInterface2 &socket);
|
||||
|
||||
/** Set detector type */
|
||||
int set_detector_type();
|
||||
int set_detector_type(sls::ServerInterface2 &socket);
|
||||
|
||||
/** set detector hostname */
|
||||
int set_detector_hostname();
|
||||
int set_detector_hostname(sls::ServerInterface2 &socket);
|
||||
|
||||
/** set roi */
|
||||
int set_roi();
|
||||
int set_roi(sls::ServerInterface2 &socket);
|
||||
|
||||
/** Set up UDP Details */
|
||||
int setup_udp();
|
||||
int setup_udp(sls::ServerInterface2 &socket);
|
||||
|
||||
/** set acquisition period, frame number etc */
|
||||
int set_timer();
|
||||
int set_timer(sls::ServerInterface2 &socket);
|
||||
|
||||
/** set dynamic range */
|
||||
int set_dynamic_range();
|
||||
int set_dynamic_range(sls::ServerInterface2 &socket);
|
||||
|
||||
/** Sets the receiver streaming frequency */
|
||||
int set_streaming_frequency();
|
||||
int set_streaming_frequency(sls::ServerInterface2 &socket);
|
||||
|
||||
/** Gets receiver status */
|
||||
int get_status();
|
||||
int get_status(sls::ServerInterface2 &socket);
|
||||
|
||||
/** Start Receiver - starts listening to udp packets from detector */
|
||||
int start_receiver();
|
||||
int start_receiver(sls::ServerInterface2 &socket);
|
||||
|
||||
/** Stop Receiver - stops listening to udp packets from detector*/
|
||||
int stop_receiver();
|
||||
int stop_receiver(sls::ServerInterface2 &socket);
|
||||
|
||||
/** Set File path */
|
||||
int set_file_dir();
|
||||
int set_file_dir(sls::ServerInterface2 &socket);
|
||||
|
||||
/** Set File name without frame index, file index and extension */
|
||||
int set_file_name();
|
||||
int set_file_name(sls::ServerInterface2 &socket);
|
||||
|
||||
/** Set File index */
|
||||
int set_file_index();
|
||||
int set_file_index(sls::ServerInterface2 &socket);
|
||||
|
||||
/** Gets frame index for each acquisition */
|
||||
int get_frame_index();
|
||||
int get_frame_index(sls::ServerInterface2 &socket);
|
||||
|
||||
/** Gets Total Frames Caught */
|
||||
int get_frames_caught();
|
||||
int get_frames_caught(sls::ServerInterface2 &socket);
|
||||
|
||||
/** Resets Total Frames Caught */
|
||||
int reset_frames_caught();
|
||||
int reset_frames_caught(sls::ServerInterface2 &socket);
|
||||
|
||||
/** Enable File Write*/
|
||||
int enable_file_write();
|
||||
int enable_file_write(sls::ServerInterface2 &socket);
|
||||
|
||||
/** Enable Master File Write */
|
||||
int enable_master_file_write();
|
||||
int enable_master_file_write(sls::ServerInterface2 &socket);
|
||||
|
||||
/** enable compression */
|
||||
int enable_compression();
|
||||
int enable_compression(sls::ServerInterface2 &socket);
|
||||
|
||||
/** enable overwrite */
|
||||
int enable_overwrite();
|
||||
int enable_overwrite(sls::ServerInterface2 &socket);
|
||||
|
||||
/** enable 10Gbe */
|
||||
int enable_tengiga();
|
||||
int enable_tengiga(sls::ServerInterface2 &socket);
|
||||
|
||||
/** set fifo depth */
|
||||
int set_fifo_depth();
|
||||
int set_fifo_depth(sls::ServerInterface2 &socket);
|
||||
|
||||
/** activate/ deactivate */
|
||||
int set_activate();
|
||||
int set_activate(sls::ServerInterface2 &socket);
|
||||
|
||||
/* Set the data stream enable */
|
||||
int set_data_stream_enable();
|
||||
int set_data_stream_enable(sls::ServerInterface2 &socket);
|
||||
|
||||
/** Sets the steadming timer when frequency is set to 0 */
|
||||
int set_streaming_timer();
|
||||
int set_streaming_timer(sls::ServerInterface2 &socket);
|
||||
|
||||
/** enable flipped data */
|
||||
int set_flipped_data();
|
||||
int set_flipped_data(sls::ServerInterface2 &socket);
|
||||
|
||||
/** set file format */
|
||||
int set_file_format();
|
||||
int set_file_format(sls::ServerInterface2 &socket);
|
||||
|
||||
/** set position id */
|
||||
int set_detector_posid();
|
||||
int set_detector_posid(sls::ServerInterface2 &socket);
|
||||
|
||||
/** set multi detector size */
|
||||
int set_multi_detector_size();
|
||||
int set_multi_detector_size(sls::ServerInterface2 &socket);
|
||||
|
||||
/** set streaming port */
|
||||
int set_streaming_port();
|
||||
int set_streaming_port(sls::ServerInterface2 &socket);
|
||||
|
||||
/** set streaming source ip */
|
||||
int set_streaming_source_ip();
|
||||
int set_streaming_source_ip(sls::ServerInterface2 &socket);
|
||||
|
||||
/** set silent mode */
|
||||
int set_silent_mode();
|
||||
int set_silent_mode(sls::ServerInterface2 &socket);
|
||||
|
||||
/** enable gap pixels */
|
||||
int enable_gap_pixels();
|
||||
int enable_gap_pixels(sls::ServerInterface2 &socket);
|
||||
|
||||
/** restream stop packet */
|
||||
int restream_stop();
|
||||
int restream_stop(sls::ServerInterface2 &socket);
|
||||
|
||||
/** set additional json header */
|
||||
int set_additional_json_header();
|
||||
int set_additional_json_header(sls::ServerInterface2 &socket);
|
||||
|
||||
/** get additional json header */
|
||||
int get_additional_json_header();
|
||||
int get_additional_json_header(sls::ServerInterface2 &socket);
|
||||
|
||||
/** set udp socket buffer size */
|
||||
int set_udp_socket_buffer_size();
|
||||
int set_udp_socket_buffer_size(sls::ServerInterface2 &socket);
|
||||
|
||||
/** get real udp socket buffer size */
|
||||
int get_real_udp_socket_buffer_size();
|
||||
int get_real_udp_socket_buffer_size(sls::ServerInterface2 &socket);
|
||||
|
||||
/** set frames per file */
|
||||
int set_frames_per_file();
|
||||
int set_frames_per_file(sls::ServerInterface2 &socket);
|
||||
|
||||
/** check version compatibility */
|
||||
int check_version_compatibility();
|
||||
int check_version_compatibility(sls::ServerInterface2 &socket);
|
||||
|
||||
/** set frame discard policy */
|
||||
int set_discard_policy();
|
||||
int set_discard_policy(sls::ServerInterface2 &socket);
|
||||
|
||||
/** set partial frame padding enable*/
|
||||
int set_padding_enable();
|
||||
int set_padding_enable(sls::ServerInterface2 &socket);
|
||||
|
||||
/** set deactivated receiver padding enable */
|
||||
int set_deactivated_padding_enable();
|
||||
int set_deactivated_padding_enable(sls::ServerInterface2 &socket);
|
||||
|
||||
/** set readout flags */
|
||||
int set_readout_flags();
|
||||
int set_readout_flags(sls::ServerInterface2 &socket);
|
||||
|
||||
/** set adc mask */
|
||||
int set_adc_mask();
|
||||
int set_adc_mask(sls::ServerInterface2 &socket);
|
||||
|
||||
/** set receiver dbit list */
|
||||
int set_dbit_list();
|
||||
int set_dbit_list(sls::ServerInterface2 &socket);
|
||||
|
||||
/** get receiver dbit list */
|
||||
int get_dbit_list();
|
||||
int get_dbit_list(sls::ServerInterface2 &socket);
|
||||
|
||||
/** set dbit offset */
|
||||
int set_dbit_offset();
|
||||
int set_dbit_offset(sls::ServerInterface2 &socket);
|
||||
|
||||
|
||||
/** detector type */
|
||||
@ -306,7 +306,7 @@ class slsReceiverTCPIPInterface : private virtual slsDetectorDefs {
|
||||
slsReceiverImplementation *receiver;
|
||||
|
||||
/** Function List */
|
||||
int (slsReceiverTCPIPInterface::*flist[NUM_REC_FUNCTIONS])();
|
||||
int (slsReceiverTCPIPInterface::*flist[NUM_REC_FUNCTIONS])(sls::ServerInterface2& socket);
|
||||
|
||||
/** Message */
|
||||
char mess[MAX_STR_LENGTH];
|
||||
@ -390,4 +390,8 @@ protected:
|
||||
|
||||
/** client interface */
|
||||
ServerInterface* interface;
|
||||
|
||||
private:
|
||||
int VerifyLock(int &ret, char *mess);
|
||||
int VerifyLockAndIdle(int &ret, char *mess, int fnum);
|
||||
};
|
||||
|
File diff suppressed because it is too large
Load Diff
@ -6,6 +6,7 @@ set(SOURCES
|
||||
src/DataSocket.cpp
|
||||
src/ServerSocket.cpp
|
||||
src/ServerInterface.cpp
|
||||
src/ServerInterface2.cpp
|
||||
src/network_utils.cpp
|
||||
)
|
||||
|
||||
|
28
slsSupportLib/include/ServerInterface2.h
Normal file
28
slsSupportLib/include/ServerInterface2.h
Normal file
@ -0,0 +1,28 @@
|
||||
#pragma once
|
||||
|
||||
#include "DataSocket.h"
|
||||
namespace sls {
|
||||
class ServerInterface2;
|
||||
}
|
||||
|
||||
#include "ServerSocket.h"
|
||||
#include "sls_detector_defs.h"
|
||||
namespace sls {
|
||||
|
||||
class ServerInterface2 : public DataSocket {
|
||||
using defs = slsDetectorDefs;
|
||||
|
||||
public:
|
||||
ServerInterface2(int socketId) : DataSocket(socketId){}
|
||||
|
||||
int sendResult(bool update, int ret, void *retval, int retvalSize,
|
||||
char *mess = nullptr);
|
||||
int receiveArg(int &ret, char *mess, void *arg, int sizeofArg);
|
||||
|
||||
|
||||
|
||||
private:
|
||||
|
||||
};
|
||||
|
||||
} // namespace sls
|
@ -1,7 +1,8 @@
|
||||
#pragma once
|
||||
|
||||
#include "DataSocket.h"
|
||||
|
||||
#include "ServerInterface2.h"
|
||||
#include "network_utils.h"
|
||||
#include <cstdint>
|
||||
#include <netdb.h>
|
||||
#include <string>
|
||||
@ -13,14 +14,18 @@ namespace sls {
|
||||
class ServerSocket : public DataSocket {
|
||||
public:
|
||||
ServerSocket(int port);
|
||||
DataSocket accept();
|
||||
const std::string &getLastClient();
|
||||
ServerInterface2 accept();
|
||||
constexpr IpAddr getLastClient() noexcept { return lastClient; }
|
||||
constexpr IpAddr getThisClient() noexcept { return thisClient; }
|
||||
constexpr IpAddr getLockedBy() noexcept { return lockedBy; }
|
||||
void setLockedBy(IpAddr addr){ lockedBy = addr; }
|
||||
int getPort() const;
|
||||
void SendResult(int &ret, void *retval, int retvalSize, char* mess);
|
||||
void SendResult(int &ret, void *retval, int retvalSize, char *mess);
|
||||
|
||||
private:
|
||||
std::string lastClient_ = std::string(INET_ADDRSTRLEN, '\0');
|
||||
std::string thisClient_ = std::string(INET_ADDRSTRLEN, '\0');
|
||||
IpAddr thisClient;
|
||||
IpAddr lastClient;
|
||||
IpAddr lockedBy;
|
||||
int serverPort;
|
||||
// char lastClient_[INET_ADDRSTRLEN]{};
|
||||
};
|
||||
|
@ -11,6 +11,7 @@ class IpAddr {
|
||||
uint32_t addr_{0};
|
||||
|
||||
public:
|
||||
constexpr IpAddr() noexcept{}
|
||||
constexpr IpAddr(uint32_t address) noexcept : addr_{address} {}
|
||||
IpAddr(const std::string &address);
|
||||
IpAddr(const char *address);
|
||||
|
32
slsSupportLib/src/ServerInterface2.cpp
Normal file
32
slsSupportLib/src/ServerInterface2.cpp
Normal file
@ -0,0 +1,32 @@
|
||||
#include "ServerInterface2.h"
|
||||
|
||||
namespace sls {
|
||||
|
||||
int ServerInterface2::sendResult(bool update, int ret, void *retval,
|
||||
int retvalSize, char *mess) {
|
||||
|
||||
// if (update && ret == defs::OK && server_->DifferentClients()) {
|
||||
// ret = defs::FORCE_UPDATE;
|
||||
// }
|
||||
sendData(&ret, sizeof(ret));
|
||||
if (ret == defs::FAIL) {
|
||||
// send error message
|
||||
if (mess)
|
||||
sendData(mess, MAX_STR_LENGTH);
|
||||
// debugging feature. should not happen.
|
||||
else
|
||||
FILE_LOG(logERROR) << "No error message provided for this "
|
||||
"failure. Will mess up TCP\n";
|
||||
}
|
||||
sendData(retval, retvalSize);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int ServerInterface2::receiveArg(int &ret, char *mess, void *arg,
|
||||
int sizeofArg) {
|
||||
if (sizeofArg && receiveData(arg, sizeofArg) < 0)
|
||||
return defs::FAIL;
|
||||
return defs::OK;
|
||||
}
|
||||
|
||||
} // namespace sls
|
@ -1,4 +1,6 @@
|
||||
#include "ServerInterface2.h"
|
||||
#include "ServerSocket.h"
|
||||
|
||||
#include "DataSocket.h"
|
||||
#include "logger.h"
|
||||
#include "sls_detector_defs.h"
|
||||
@ -35,7 +37,8 @@ ServerSocket::ServerSocket(int port)
|
||||
}
|
||||
}
|
||||
|
||||
DataSocket ServerSocket::accept() {
|
||||
ServerInterface2 ServerSocket::accept() {
|
||||
lastClient = thisClient; //update from previous connection
|
||||
struct sockaddr_in clientAddr;
|
||||
socklen_t addr_size = sizeof clientAddr;
|
||||
int newSocket =
|
||||
@ -43,17 +46,15 @@ DataSocket ServerSocket::accept() {
|
||||
if (newSocket == -1) {
|
||||
throw sls::SocketError("Server ERROR: socket accept failed\n");
|
||||
}
|
||||
inet_ntop(AF_INET, &(clientAddr.sin_addr), &thisClient_.front(),
|
||||
INET_ADDRSTRLEN);
|
||||
std::cout << "lastClient: " << lastClient_ << " thisClient: " << thisClient_
|
||||
char tc[INET_ADDRSTRLEN]{};
|
||||
inet_ntop(AF_INET, &(clientAddr.sin_addr), tc, INET_ADDRSTRLEN);
|
||||
thisClient = tc;
|
||||
std::cout << "lastClient: " << lastClient << " thisClient: " << thisClient
|
||||
<< '\n';
|
||||
// Here goes any check for locks etc
|
||||
lastClient_ = thisClient_;
|
||||
|
||||
return DataSocket(newSocket);
|
||||
return ServerInterface2(newSocket);
|
||||
}
|
||||
|
||||
const std::string &ServerSocket::getLastClient() { return lastClient_; }
|
||||
|
||||
int ServerSocket::getPort() const { return serverPort; }
|
||||
|
||||
|
@ -16,6 +16,7 @@
|
||||
|
||||
namespace sls {
|
||||
|
||||
|
||||
IpAddr::IpAddr(const std::string &address) {
|
||||
inet_pton(AF_INET, address.c_str(), &addr_);
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user