diff --git a/src/main.cpp b/src/main.cpp index f75678e..443e17e 100755 --- a/src/main.cpp +++ b/src/main.cpp @@ -8,6 +8,13 @@ #include +#include + +#include +#include +#include +#include + const double ASPECT_RATIO = 16.0 / 9.0; const int WIDTH = 1920; const int HEIGHT = static_cast(WIDTH / ASPECT_RATIO); @@ -112,8 +119,62 @@ hittable_list random_scene() return world; } +void error(const char* message) +{ + perror(message); + exit(1); +} + +void wait_for_client() +{ + int sockfd, newsockfd; + struct sockaddr_in serv_addr, cli_addr; + socklen_t clilen; + + // open socket and await connection from client + sockfd = socket(AF_INET, SOCK_STREAM, 0); + if (sockfd < 0) + { + error("ERROR creating socket"); + } + + bzero((char*)&serv_addr, sizeof(serv_addr)); + + // we successfully created the socket, configure it for binding + serv_addr.sin_family = AF_INET; + serv_addr.sin_addr.s_addr = INADDR_ANY; + serv_addr.sin_port = htons(64999); // convert number from host to network byte order + + // bind the socket + if (bind(sockfd, (struct sockaddr*)&serv_addr, sizeof(serv_addr)) < 0) + { + error("ERROR binding socket"); + } + + // successfully bound socket, start listening for connections + listen(sockfd, 5); + clilen = sizeof(cli_addr); + + newsockfd = accept(sockfd, (struct sockaddr*)&cli_addr, &clilen); + if (newsockfd < 0) + { + error("ERROR accepting client"); + } + + printf("got a connection!\n"); + + // close sockets we opened + close(newsockfd); + close(sockfd); + + // once connection is acquired, exit + exit(0); +} + int main() { + wait_for_client(); + std::cout << "P3\n" << WIDTH << ' ' << HEIGHT << "\n255\n"; hittable_list world = random_scene(); diff --git a/telescope.md b/telescope.md index 62eb66e..4db1d0b 100644 --- a/telescope.md +++ b/telescope.md @@ -2,19 +2,20 @@ fantasy telescope idea use rti1w as a base -server waits for connection -client establishes connection -client sends receiving port to server -client application sends command to send image -server receives imaging command -server renders image -server sends image data stream to client -client application receives image -client requests resend of lost packets -client displays image -client saves image to file -server sends telemetry to client (what telemetry?) -server compresses image before sending to client -client specifies image parameters +* [ ] move rendering out of main.cpp +* [x] server waits for connection +* [x] client establishes connection +* [ ] client sends receiving port to server +* [ ] client application sends command to send image +* [ ] server receives imaging command +* [ ] server renders image +* [ ] server sends image data stream to client +* [ ] client application receives image +* [ ] client requests resend of lost packets +* [ ] client displays image +* [ ] client saves image to file +* [ ] server sends telemetry to client (what telemetry?) +* [ ] server compresses image before sending to client +* [ ] client specifies image parameters