printf("announcing server... ");
fflush(stdout);
- if(SDLNet_ResolveHost(&ip,"royale.zerezo.com",80)==-1)
+ if (SDLNet_ResolveHost(&ip,"royale.zerezo.com",80)==-1)
{
fprintf(stderr,"SDLNet_ResolveHost: %s\n",SDLNet_GetError());
return;
}
tcpsock=SDLNet_TCP_Open(&ip);
- if(!tcpsock)
+ if (!tcpsock)
{
fprintf(stderr,"SDLNet_TCP_Open: %s\n",SDLNet_GetError());
return;
len=strlen(temp);
result=SDLNet_TCP_Send(tcpsock,temp,len);
- if(result<len)
+ if (result<len)
fprintf(stderr,"SDLNet_TCP_Send: %s\n", SDLNet_GetError());
else
printf("done\n");
-
+
+ free(temp);
SDLNet_TCP_Close(tcpsock);
}
*tmp++=1; /* startup countdown */
strcpy(tmp,tracklist->name);
tmp+=strlen(tmp)+1;
- memcpy(tmp,&time,sizeof(int));
- tmp+=sizeof(int);
- memcpy(tmp,&network_speed,sizeof(int));
- tmp+=sizeof(int);
+ SDLNet_Write32(time,tmp);
+ tmp+=4;
+ SDLNet_Write32(network_speed,tmp);
+ tmp+=4;
packet->len=(void *)tmp-(void *)packet->data;
for (i=0;i<MAX_CLIENTS;i++) if (clients[i].connected)
{
/* wait for everybody startup */
for (i=0;i<MAX_CLIENTS;i++) if (clients[i].connected) break;
- if (i!=MAX_CLIENTS) SDL_Delay(5000);
+ /* 5000ms for countdown, and 500ms for loading time... */
+ if (i!=MAX_CLIENTS) SDL_Delay(5500);
printf("go\n");
tmp+=strlen(tmp)+1;
strcpy(clients[i].pseudo,tmp);
tmp+=strlen(tmp)+1;
- memcpy(&clients[i].car.color,tmp,sizeof(int));
+ clients[i].car.color=SDLNet_Read16(tmp);
clients[i].car.x=tracklist->x;
clients[i].car.y=tracklist->y;
clients[i].car.w=30;
*tmp++=0; /* no startup countdown */
strcpy(tmp,tracklist->name);
tmp+=strlen(tmp)+1;
- memcpy(tmp,&time,sizeof(int));
- tmp+=sizeof(int);
- memcpy(tmp,&network_speed,sizeof(int));
- tmp+=sizeof(int);
+ SDLNet_Write32(time,tmp);
+ tmp+=4;
+ SDLNet_Write32(network_speed,tmp);
+ tmp+=4;
packet->len=(void *)tmp-(void *)packet->data;
SDLNet_UDP_Send(udpsock,-1,packet);
break;
{
int temp;
tmp+=strlen(tmp)+1;
- memcpy(&temp,tmp,sizeof(int));
- tmp+=sizeof(int);
- if (clients[id].lasttime==temp)
+ temp=SDLNet_Read32(tmp);
+ tmp+=4;
+ if (clients[id].lasttime<=temp)
{
+ tmp+=temp-clients[id].lasttime;
/* printf("servertime = %d lasttime = %d temp = %d strlen(tmp) = %d\n",time,clients[id].lasttime,temp,strlen(tmp)); */
/*printf("keys = %s\n",tmp);*/
while (*tmp)
tmp=packet->data;
strcpy(tmp,"positions");
tmp+=strlen(tmp)+1;
- memcpy(tmp,&time,sizeof(int));
- tmp+=sizeof(int); /* for server time */
- tmp+=sizeof(int); /* for client time */
- tmp+=sizeof(int); /* for number of cars */
+ SDLNet_Write32(time,tmp);
+ tmp+=4; /* for server time */
+ tmp+=4; /* for client time */
+ tmp+=2; /* for number of cars */
nb=0;
for (j=0;j<MAX_CLIENTS;j++) if (j!=i && clients[j].connected)
{
- memcpy(tmp,&clients[j].car,sizeof(struct _car));
- tmp+=sizeof(struct _car);
+ SDLNet_Write16(clients[j].car.x,tmp);
+ tmp+=2;
+ SDLNet_Write16(clients[j].car.y,tmp);
+ tmp+=2;
+ SDLNet_Write16(clients[j].car.angle*1000,tmp);
+ tmp+=2;
+ SDLNet_Write16(clients[j].car.color,tmp);
+ tmp+=2;
nb++;
}
- memcpy(packet->data+strlen("positions")+1+sizeof(int)+sizeof(int),&nb,sizeof(int));
+ SDLNet_Write16(nb,packet->data+strlen("positions")+1+4+4);
+ SDLNet_Write32(clients[i].lasttime,packet->data+strlen("positions")+1+4);
packet->len=(void *)tmp-(void *)packet->data;
- memcpy(packet->data+strlen("positions")+1+sizeof(int),&clients[i].lasttime,sizeof(int));
packet->address=clients[i].address;
SDLNet_UDP_Send(udpsock,-1,packet);
}
tmp=packet->data;
strcpy(tmp,"finish");
tmp+=strlen(tmp)+1;
- tmp+=sizeof(int); /* space for number */
+ tmp+=2; /* space for number */
nb=0;
for (i=0;i<10;i++)
{
{
sprintf(tmp,"%s : %d",clients[best_id].pseudo,best_sc);
tmp+=strlen(tmp)+1;
- memcpy(tmp,&clients[best_id].car.color,sizeof(int));
- tmp+=sizeof(int);
+ SDLNet_Write16(clients[best_id].car.color,tmp);
+ tmp+=2;
clients[best_id].car.lap=-1;
nb++;
printf("top %d : %s - %d\n",nb,clients[best_id].pseudo,best_sc);
}
}
- memcpy(packet->data+strlen("finish")+1,&nb,sizeof(int));
+ SDLNet_Write16(nb,packet->data+strlen("finish")+1);
packet->len=(void *)tmp-(void *)packet->data;
for (i=0;i<MAX_CLIENTS;i++) if (clients[i].connected)
{
SDLNet_UDP_Send(udpsock,-1,packet);
}
SDL_Delay(5000);
-
+
+ SDL_FreeSurface(fun);
tracklist=tracklist->next;
}