void Client::connectionPhase() { packet.clear(); packetID = EMPTY; TCPsocket.receive(packet); packet>>packetID; switch(packetID) { case EMPTY: break; case CONTINUE: currentPhase = DOWNLOADS; std::cout<<"Client going to downloadsPhase"<<std::endl; break; case START: handleStartPacket(); break; } }
int main(int argc, char **argv) { host_t ftHost, rdaHost; int rdaSocket; ft_buffer_server_t *S; if (sizeof(rda_msg_hdr_t)!=24) { fprintf(stderr, "Compiled-in datatypes do not match RDA protocol\n"); exit(1); } if (argc!=5 && argc!=3) { fputs(usage, stderr); exit(1); } strncpy(rdaHost.name, argv[1], sizeof(rdaHost.name)); rdaHost.name[sizeof(rdaHost.name)-1]=0; rdaHost.port = atoi(argv[2]); if (argc==5) { strncpy(ftHost.name, argv[3], sizeof(ftHost.name)); ftHost.name[sizeof(ftHost.name)-1]=0; ftHost.port = atoi(argv[4]); } else { strcpy(ftHost.name, "-"); ftHost.port = 1972; } /* this isn't a FieldTrip connection, but we can use the same function */ rdaSocket = open_connection(rdaHost.name, rdaHost.port); if (rdaSocket < 0) { fprintf(stderr, "Could not connect to RDA server at %s:%i\n", rdaHost.name, rdaHost.port); return 1; } /* Spawn tcpserver or connect to remote buffer */ if (strcmp(ftHost.name, "-") == 0) { S = ft_start_buffer_server(ftHost.port, NULL, NULL, NULL); if (S==NULL) { fprintf(stderr, "Could not start up a FieldTrip buffer serving at port %i\n", ftHost.port); return 1; } ftSocket = 0; printf("Streaming from %s:%i to local buffer on port %i\n", rdaHost.name, rdaHost.port, ftHost.port); } else { ftSocket = open_connection(ftHost.name, ftHost.port); if (ftSocket < 0) { fprintf(stderr, "Could not connect to FieldTrip buffer at %s:%i\n", ftHost.name, ftHost.port); return 1; } printf("Streaming from %s:%i to remote buffer at %s:%i\n", rdaHost.name, rdaHost.port, ftHost.name, ftHost.port); } /* register CTRL-C handler */ signal(SIGINT, abortHandler); printf("Starting to listen - press CTRL-C to quit\n"); while (keepRunning) { rda_msg_hdr_t header; char *buf; int n,s; n = bufread(rdaSocket, &header, sizeof(header)); if (n!=sizeof(header)) { fprintf(stderr, "Error while reading packet header from the RDA server\n"); break; } if (memcmp(_rda_guid, header.guid, 16)!=0) { int i; fprintf(stderr, "Incorrect GUID in received packet:\n"); for (i=0;i<16;i++) { fprintf(stderr, "0x%02x should be 0x%02x\n", header.guid[i], _rda_guid[i]); } break; } buf = (char *) malloc(header.nSize); if (buf == NULL) { fprintf(stderr, "Out of memory\n"); break; } memcpy(buf, &header, sizeof(header)); s = header.nSize - sizeof(header); n = bufread(rdaSocket, buf + sizeof(header), s); if (s!=n) { fprintf(stderr, "Error while reading packet remainder from the RDA server\n"); free(buf); break; } switch(header.nType) { case RDA_START_MSG: handleStartPacket(ftSocket, header.nSize, buf); break; case RDA_INT_MSG: case RDA_FLOAT_MSG: handleDataPacket(ftSocket, header.nSize, buf); break; case RDA_STOP_MSG: printf("\nRemote Data Acquisition stopped\n\n"); break; default: fprintf(stderr, "Unrecognized packet type (%i), has size %i - exiting\n", header.nType, header.nSize); keepRunning = 0; break; } free(buf); } close_connection(rdaSocket); if (ftSocket > 0) { close_connection(ftSocket); } else { ft_stop_buffer_server(S); } return 0; }