103 lines
2.7 KiB
C++
103 lines
2.7 KiB
C++
/* -*- C++ -*- */
|
|
/*
|
|
GAV - Gpl Arcade Volleyball
|
|
|
|
Copyright (C) 2002
|
|
GAV team (http://sourceforge.net/projects/gav/)
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; either version 2 of the License, or
|
|
(at your option) any later version.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
|
*/
|
|
|
|
#ifndef __NET_H__
|
|
#define __NET_H__
|
|
|
|
#ifndef NONET
|
|
|
|
#include <SDL_net.h>
|
|
#include <vector>
|
|
#include "Configuration.h"
|
|
#include "Ball.h"
|
|
#include "Team.h"
|
|
#include "automa/StateWithInput.h"
|
|
|
|
#define PLAYER_FOR_TEAM_IN_NET_GAME 2
|
|
#define SERVER_PORT 7145
|
|
|
|
/* The ID of a client is a char with the higher order 2 bits indicating
|
|
the team, the left 6 bits say the player number. When a client wants to
|
|
register itself, it sends a register request with id equal to
|
|
NET_TEAM_LEFT or NET_TEAM_RIGHT. The server fills the others 6 bits
|
|
and sends the id back to the client.
|
|
*/
|
|
#define NET_TEAM_LEFT 0x80 // 10xxxxxx
|
|
#define NET_TEAM_RIGHT 0x40 // 01xxxxxx
|
|
|
|
typedef struct {
|
|
Uint16 x;
|
|
Uint16 y;
|
|
Uint16 frame;
|
|
} net_object_snapshot_t;
|
|
|
|
typedef struct {
|
|
//unsigned int timestamp;
|
|
net_object_snapshot_t teaml[PLAYER_FOR_TEAM_IN_NET_GAME];
|
|
net_object_snapshot_t teamr[PLAYER_FOR_TEAM_IN_NET_GAME];
|
|
net_object_snapshot_t ball;
|
|
unsigned char scorel;
|
|
unsigned char scorer;
|
|
} net_game_snapshot_t;
|
|
|
|
typedef struct {
|
|
//unsigned int timestamp;
|
|
unsigned char id; // the client ID
|
|
unsigned char command;
|
|
} net_command_t;
|
|
|
|
typedef struct {
|
|
unsigned char id;
|
|
unsigned char nplayers_l;
|
|
unsigned char nplayers_r;
|
|
unsigned char bgBig; // 0 or 1
|
|
unsigned char winning_score;
|
|
} net_register_t;
|
|
|
|
class Net : public StateWithInput{
|
|
protected:
|
|
UDPsocket mySock;
|
|
UDPpacket * packetCmd;
|
|
UDPpacket * packetSnap;
|
|
UDPpacket * packetRegister;
|
|
|
|
public:
|
|
Net() {
|
|
packetSnap = SDLNet_AllocPacket(sizeof(net_game_snapshot_t));
|
|
packetSnap->len = packetSnap->maxlen;
|
|
packetCmd = SDLNet_AllocPacket(sizeof(net_command_t));
|
|
packetCmd->len = packetCmd->maxlen;
|
|
packetRegister = SDLNet_AllocPacket(sizeof(net_register_t));
|
|
packetRegister->len = packetRegister->maxlen;
|
|
}
|
|
|
|
~Net() {
|
|
SDLNet_FreePacket(packetSnap);
|
|
SDLNet_FreePacket(packetCmd);
|
|
}
|
|
|
|
};
|
|
|
|
#endif // NONET
|
|
|
|
#endif
|