Completed network communication and updated header format. TODO multiple clients

dev
MasterRoby3 2023-08-09 23:10:42 +02:00
parent 09a7b2528b
commit 23b42c58fa
7 changed files with 56 additions and 26 deletions

View File

@ -0,0 +1,8 @@
{
"folders": [
{
"path": ".."
}
],
"settings": {}
}

BIN
a.out

Binary file not shown.

BIN
evBuild.out 100755

Binary file not shown.

View File

@ -1,4 +1,5 @@
#include <arpa/inet.h> #include <arpa/inet.h>
#include <csignal>
#include <cstdint> #include <cstdint>
#include <cstdio> #include <cstdio>
#include <cstdlib> #include <cstdlib>
@ -49,7 +50,14 @@ int acceptConnection(int server_fd) {
return client_fd; return client_fd;
} }
void term_handler(int signal) {
printf("Terminated, received SIGNAL %d", signal);
exit(EXIT_SUCCESS);
}
int main(int argc, char const *argv[]) { int main(int argc, char const *argv[]) {
signal(SIGTERM, term_handler);
if (argc != 2) { if (argc != 2) {
printf("Usage: %s portNumber \n", argv[0]); printf("Usage: %s portNumber \n", argv[0]);
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
@ -69,7 +77,7 @@ int main(int argc, char const *argv[]) {
perror("Receive failed"); perror("Receive failed");
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
printf("[RICEVUTO]\t0x%x", word); printf("[RICEVUTO]\t0x%x\n", word);
} }

View File

@ -8,6 +8,7 @@ typedef struct Header {
uint32_t startOfHeaderMarker = START_OF_HEADER_MARKER; uint32_t startOfHeaderMarker = START_OF_HEADER_MARKER;
uint32_t headerSize; uint32_t headerSize;
uint32_t fragmentSize; uint32_t fragmentSize;
uint32_t sourceIdentifier;
uint32_t runNumber; uint32_t runNumber;
uint32_t detectorEventNumber; uint32_t detectorEventNumber;
uint32_t numberOfStatusElements; uint32_t numberOfStatusElements;
@ -39,11 +40,12 @@ void encode_header(uint32_t *buffer, const Header &header) {
buffer[0] = header.startOfHeaderMarker; buffer[0] = header.startOfHeaderMarker;
buffer[1] = header.headerSize; buffer[1] = header.headerSize;
buffer[2] = header.fragmentSize; buffer[2] = header.fragmentSize;
buffer[3] = header.runNumber; buffer[3] = header.sourceIdentifier;
buffer[4] = header.detectorEventNumber; buffer[4] = header.runNumber;
buffer[5] = header.numberOfStatusElements; buffer[5] = header.detectorEventNumber;
buffer[6] = header.numberOfStatusElements;
std::memcpy(&buffer[6], header.statusElementsArray, header.numberOfStatusElements * sizeof(uint32_t)); std::memcpy(&buffer[7], header.statusElementsArray, header.numberOfStatusElements * sizeof(uint32_t));
} }
void encode_fragment(uint32_t *buffer, const Fragment &fragment){ void encode_fragment(uint32_t *buffer, const Fragment &fragment){

BIN
prov.out 100755

Binary file not shown.

View File

@ -12,6 +12,7 @@
#include <sys/socket.h> #include <sys/socket.h>
#include <sys/types.h> #include <sys/types.h>
#include <unistd.h> #include <unistd.h>
#include <csignal>
#include "fragment_dataformat.h" #include "fragment_dataformat.h"
@ -51,7 +52,16 @@ void connectTo(int sock, const char* host, int port) {
} }
void term_handler(int signal) {
printf("Terminated, received SIGNAL %d", signal);
exit(EXIT_SUCCESS);
}
int main(int argc, char* argv[]) { int main(int argc, char* argv[]) {
signal(SIGTERM, term_handler);
signal(SIGINT, term_handler);
//will use it later to obtain random number from hardware //will use it later to obtain random number from hardware
std::random_device rd; std::random_device rd;
std::mt19937 generator(42); std::mt19937 generator(42);
@ -67,21 +77,24 @@ int main(int argc, char* argv[]) {
uint32_t event_number = 0; uint32_t event_number = 0;
uint32_t run_number = 0; uint32_t run_number = 0;
uint32_t source_id = 0;
if (argc != 4) { if (argc != 5) {
printf("Usage %s host portNumber runNumber\n", argv[0]); printf("Usage %s host portNumber sourceId runNumber\n", argv[0]);
exit(EXIT_FAILURE); exit(EXIT_FAILURE);
} }
const char* host = argv[1]; const char* host = argv[1];
int port = atoi(argv[2]); int port = atoi(argv[2]);
run_number = atoi(argv[3]); source_id = atoi(argv[3]);
run_number = atoi(argv[4]);
int socket = makeSocket(); int socket = makeSocket();
connectTo(socket, host, port); connectTo(socket, host, port);
while (true) { while (true) {
Header header; Header header;
header.sourceIdentifier = source_id;
header.runNumber = run_number; header.runNumber = run_number;
header.detectorEventNumber = event_number; header.detectorEventNumber = event_number;
event_number++; event_number++;
@ -106,7 +119,7 @@ int main(int argc, char* argv[]) {
} }
uint32_t payload_size = std::max(std::min(static_cast<int>(std::round(normal_distr(generator))), MAX_FRAGMENTS), MIN_FRAGMENTS); uint32_t payload_size = std::max(std::min(static_cast<int>(std::round(normal_distr(generator))), MAX_FRAGMENTS), MIN_FRAGMENTS);
header.headerSize = 6 + header.numberOfStatusElements; header.headerSize = 7 + header.numberOfStatusElements;
header.fragmentSize = header.headerSize + payload_size; header.fragmentSize = header.headerSize + payload_size;
Fragment fragment; Fragment fragment;
@ -116,25 +129,24 @@ int main(int argc, char* argv[]) {
fragment.payloadElements[i] = unif_int_distib(generator); fragment.payloadElements[i] = unif_int_distib(generator);
} }
uint32_t buffer[header.fragmentSize];
encode_fragment(buffer, fragment);
ssize_t bytes = send(socket, reinterpret_cast<char*>(buffer), sizeof(buffer), 0);
if (bytes != header.fragmentSize * sizeof(uint32_t)) {
perror("Send failed: nub bytes not matching");
exit(EXIT_FAILURE);
for (uint32_t i = 0; i < header.fragmentSize; i++) {
} }
std::cout << std::hex << std::setw(8) << std::setfill('0');
//std::cout << fragment.header; //std::cout << std::hex << std::setw(8) << std::setfill('0');
for (uint8_t i = 0; i < fragment.header.numberOfStatusElements; i++) { ////std::cout << fragment.header;
std::cout << "status element " << std::setw(8) << std::setfill('0') << fragment.header.statusElementsArray[i] << std::endl; //for (uint8_t i = 0; i < fragment.header.numberOfStatusElements; i++) {
} // std::cout << "status element " << std::setw(8) << std::setfill('0') << fragment.header.statusElementsArray[i] << std::endl;
for (uint32_t i = 0; i < payload_size; i++) { //}
std::cout << "payload element " << std::setw(8) << std::setfill('0') << fragment.payloadElements[i] << std::endl; //for (uint32_t i = 0; i < payload_size; i++) {
} // std::cout << "payload element " << std::setw(8) << std::setfill('0') << fragment.payloadElements[i] << std::endl;
std::cout << std::endl; //}
//std::cout << std::endl;
if (header.numberOfStatusElements > 0){ if (header.numberOfStatusElements > 0){
delete [] fragment.header.statusElementsArray; delete [] fragment.header.statusElementsArray;