mirror of
https://github.com/slsdetectorgroup/slsDetectorPackage.git
synced 2025-06-13 05:17:13 +02:00
exceptions TCP (#31)
* WIP * first test * format * test frames * also 0: * WIP * WIP * first test * format * test frames * also 0: * test and less local * pass ret by value * level * WIP * WIP * cleaning up interface * removed ref * another * updated api version * cleanup * cleanup * WIP * fixes * fixed tests
This commit is contained in:

committed by
Dhanya Thattil

parent
a6144f658e
commit
1db7521cfa
@ -70,11 +70,11 @@ int ClientSocket::sendCommandThenRead(int fnum, const void *args,
|
||||
|
||||
void ClientSocket::readReply(int &ret, void *retval, size_t retval_size) {
|
||||
|
||||
receiveData(&ret, sizeof(ret));
|
||||
read(&ret, sizeof(ret));
|
||||
if (ret == slsDetectorDefs::FAIL) {
|
||||
char mess[MAX_STR_LENGTH]{};
|
||||
// get error message
|
||||
receiveData(mess, sizeof(mess));
|
||||
read(mess, sizeof(mess));
|
||||
FILE_LOG(logERROR) << socketType << " returned error: " << mess;
|
||||
std::cout << "\n"; // needed to reset the color.
|
||||
|
||||
@ -89,7 +89,7 @@ void ClientSocket::readReply(int &ret, void *retval, size_t retval_size) {
|
||||
}
|
||||
}
|
||||
// get retval
|
||||
receiveData(retval, retval_size);
|
||||
read(retval, retval_size);
|
||||
}
|
||||
|
||||
}; // namespace sls
|
||||
|
@ -51,7 +51,11 @@ int DataSocket::receiveData(void *buffer, size_t size) {
|
||||
}
|
||||
|
||||
int DataSocket::read(void *buffer, size_t size){
|
||||
return ::read(getSocketId(), reinterpret_cast<char *>(buffer), size);
|
||||
return ::read(getSocketId(), buffer, size);
|
||||
}
|
||||
|
||||
int DataSocket::write(void *buffer, size_t size){
|
||||
return ::write(getSocketId(), buffer, size);
|
||||
}
|
||||
|
||||
int DataSocket::setReceiveTimeout(int us) {
|
||||
@ -64,13 +68,11 @@ int DataSocket::setReceiveTimeout(int us) {
|
||||
|
||||
|
||||
int DataSocket::sendData(const void *buffer, size_t size) {
|
||||
int dataSent = 0;
|
||||
while (dataSent < (int)size) {
|
||||
dataSent +=
|
||||
write(getSocketId(), reinterpret_cast<const char *>(buffer) + dataSent,
|
||||
size - dataSent);
|
||||
}
|
||||
return dataSent;
|
||||
// int dataSent = 0;
|
||||
// while (dataSent < (int)size) {
|
||||
return ::write(getSocketId(), buffer, size);
|
||||
// }
|
||||
// return dataSent;
|
||||
}
|
||||
|
||||
int DataSocket::setTimeOut(int t_seconds) {
|
||||
|
@ -1,37 +1,37 @@
|
||||
#include "ServerInterface2.h"
|
||||
#include <cassert>
|
||||
#include <cstring>
|
||||
#include <sstream>
|
||||
namespace sls {
|
||||
|
||||
int ServerInterface2::sendResult(bool update, int ret, void *retval,
|
||||
int retvalSize, char *mess) {
|
||||
int ServerInterface2::sendResult(int ret, void *retval, int retvalSize,
|
||||
char *mess) {
|
||||
|
||||
// if (update && ret == defs::OK && server_->DifferentClients()) {
|
||||
// ret = defs::FORCE_UPDATE;
|
||||
// }
|
||||
sendData(&ret, sizeof(ret));
|
||||
write(&ret, sizeof(ret));
|
||||
if (ret == defs::FAIL) {
|
||||
// send error message
|
||||
if (mess)
|
||||
sendData(mess, MAX_STR_LENGTH);
|
||||
// debugging feature. should not happen.
|
||||
else
|
||||
if (mess != nullptr) {
|
||||
write(mess, MAX_STR_LENGTH);
|
||||
} else {
|
||||
FILE_LOG(logERROR) << "No error message provided for this "
|
||||
"failure. Will mess up TCP\n";
|
||||
}
|
||||
} else {
|
||||
write(retval, retvalSize);
|
||||
}
|
||||
sendData(retval, retvalSize);
|
||||
return ret;
|
||||
}
|
||||
|
||||
int ServerInterface2::receiveArg(int &ret, char *mess, void *arg,
|
||||
int sizeofArg) {
|
||||
int ServerInterface2::receiveArg(void *arg, int sizeofArg) {
|
||||
assert(sizeofArg > 0);
|
||||
int bytes_read = read(arg, sizeofArg);
|
||||
if (bytes_read == sizeofArg) {
|
||||
return defs::OK;
|
||||
} else {
|
||||
FILE_LOG(logERROR) << "Read: " << bytes_read << " instead of "
|
||||
<< sizeofArg;
|
||||
return defs::FAIL;
|
||||
std::ostringstream ss;
|
||||
ss << "TCP socket error read " << bytes_read << " bytes instead of "
|
||||
<< sizeofArg << " bytes";
|
||||
|
||||
throw sls::SocketError(ss.str());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -52,26 +52,4 @@ ServerInterface2 ServerSocket::accept() {
|
||||
return ServerInterface2(newSocket);
|
||||
}
|
||||
|
||||
|
||||
int ServerSocket::getPort() const { return serverPort; }
|
||||
|
||||
void ServerSocket::SendResult(int &ret, void* retval, int retvalSize, char* mess) {
|
||||
|
||||
// send success of operation
|
||||
sendData(&ret, sizeof(ret));
|
||||
|
||||
if (ret == slsDetectorDefs::FAIL) {
|
||||
// create error message if empty
|
||||
if (!strlen(mess)) {
|
||||
strcpy(mess, "No error message provided for this failure in server. Will mess up TCP.");
|
||||
}
|
||||
|
||||
sendData(mess, MAX_STR_LENGTH);
|
||||
throw sls::RuntimeError(mess);
|
||||
}
|
||||
// send return value
|
||||
sendData(retval, retvalSize);
|
||||
}
|
||||
|
||||
|
||||
}; // namespace sls
|
||||
|
Reference in New Issue
Block a user