Update of /cvsroot/agd/client
In directory sc8-pr-cvs1.sourceforge.net:/tmp/cvs-serv1475
Added Files:
net.c
Log Message:
Network functions.
--- NEW FILE: net.c ---
#include <stdlib.h>
#include <allegro.h>
#include "sys.h"
#include "net.h"
#include "gui.h"
extern int cursor_y;
extern gui_font_t *fonts;
int fd;
fd_set readfd;
void net_connect() {
struct sockaddr_in sin;
int ret;
#ifdef WIN32
WSADATA wsaData;
if(WSAStartup(MAKEWORD(1, 1), &wsaData)) {
fprintf(stderr, "Can't initialize Winsock!\n");
exit(1);
}
#endif
sin.sin_family = AF_INET;
sin.sin_port = htons(conf.port);
printf("port: %d\n", conf.port);
if(conf.host[0] > '0' && conf.host[0] < '9') {
/* This is an IP address. */
if(!inet_aton(conf.host, &sin.sin_addr)) {
printf("Invalid IP address '%s'.\n", conf.host);
return;
}
} else {
/* This is a hostname. */
struct hostent *he;
he = gethostbyname(conf.host);
if(!he) {
printf("Cannot look up %s.\n", conf.host);
return;
}
sin.sin_addr = *(struct in_addr *)he->h_addr;
}
fd = socket(PF_INET, SOCK_STREAM, 0);
if(fd < 0) {
perror("Can't open socket");
exit(1);
}
ret = connect(fd, (struct sockaddr *) &sin, sizeof sin);
if(ret < 0) {
perror("Can't connect");
exit(1);
}
}
void net_events() {
struct timeval timeout = { 0, 0 };
char buf[4096];
int ret;
FD_ZERO(&readfd);
FD_SET(fd, &readfd);
ret = select(fd + 1, &readfd, 0, 0, &timeout);
if(ret <= 0) {
if(ret < 0 )
perror("select");
return;
}
if(FD_ISSET(fd, &readfd)) {
ret = recv(fd, buf, 4096, 0);
switch(ret) {
case -1:
printf("Error reading from server\n");
/* fallthrough */
case 0:
printf("Disconnected from server.\n");
break;
default:
/* p = buf;
while(strlen(p)) {*/
gui_label(screen, 0, buf, 0, cursor_y, SCREEN_W, SCREEN_H);
cursor_y += fonts[0].b->h;
break;
}
}
}
|