#include #include #include #include #include #include #include #include #include #include "screenbuffer.h" #define UDP_PORT 5005 // the port users will be connecting to #define DISCOVER_PORT 5006 // the port on which the server will broadcast its details static void die(char *msg) { fprintf(stderr, "%s\n", msg); exit(EXIT_FAILURE); } static int get_udp_socket(int port) { int sock_fd; struct sockaddr_in6 addr; memset(&addr, 0, sizeof(addr)); if ( ( sock_fd = socket(PF_INET6, SOCK_DGRAM,0) ) < 0 ) die("could not create socket"); addr.sin6_port = htons(port); addr.sin6_family = AF_INET6; addr.sin6_addr = in6addr_any; if ( bind(sock_fd, (struct sockaddr *)&addr, sizeof(addr)) < 0 ) die("could not bind to UDP"); return sock_fd; } static ssize_t get_udp_packet(int sock_fd, char *packet, size_t size) { ssize_t n_read; while ((n_read = recv(sock_fd, packet, size, 0)) < 0 ); return n_read; } // PixelVloed C version // application entry point int main(int argc, char* argv[]) { char packet[1120]; ssize_t packet_size; int sock_fd = get_udp_socket(UDP_PORT); // Init screen buffer if (!init_frame_buffer()) { die("Failed to init screen buffer.\n"); } // draw... int x, y; uint8_t r, g, b, a; int pixeloffset = 2; int pixellength = 0; while( (packet_size = get_udp_packet(sock_fd, packet, sizeof(packet))) >= 0 ) { if((uint8_t)packet[0] == 1){ pixellength = 8; } else { pixellength = 7; } // how many pixels //pixelcount = (packet_size-1)/pixellength; //printf("%d pixels in packet of size: %d using a pixel size of: %d \n", pixelcount, packet_size, pixellength); // fetch a pixel from the udp socket int i = 0; for(i=pixeloffset; // skip pixeloffset i