source: abuse/trunk/src/net/include/gserver.hpp @ 17

Last change on this file since 17 was 4, checked in by Sam Hocevar, 18 years ago
  • debian patches
File size: 2.1 KB
Line 
1#ifndef __GSERVER_HPP_
2#define __GSERVER_HPP_
3
4#define MAX_JOINERS 32  // maximum clients that can join at the same time
5
6#include "sock.hpp"
7#include "ghandler.hpp"
8
9class game_server : public game_handler
10{
11  class player_client
12  {
13    unsigned char flags;
14    enum { Has_joined=1,
15           Wait_reload=2,
16           Wait_input=4,
17           Need_reload_start_ok=8,
18           Delete_me=16 };
19    int get_flag(int flag)         { return flags&flag; }
20    void set_flag(int flag, int x) { if (x) flags|=flag; else flags&=~flag; }
21
22    public :
23    int has_joined() { return get_flag(Has_joined); }
24    void set_has_joined(int x) { set_flag(Has_joined,x); }
25
26    int wait_input() { return get_flag(Wait_input); }
27    void set_wait_input(int x) { set_flag(Wait_input,x); }
28
29    int wait_reload() { return get_flag(Wait_reload); }
30    void set_wait_reload(int x) { set_flag(Wait_reload,x); }
31
32    int delete_me() { return get_flag(Delete_me); }
33    void set_delete_me(int x) { set_flag(Delete_me,x); }
34
35    int need_reload_start_ok() { return get_flag(Need_reload_start_ok); }
36    void set_need_reload_start_ok(int x) { set_flag(Need_reload_start_ok,x); }
37
38    int client_id;
39    net_socket *comm;
40    net_address *data_address;
41    player_client *next;
42    player_client(int client_id, net_socket *comm, net_address *data_address, player_client *next) :
43      client_id(client_id), comm(comm), data_address(data_address), next(next)
44      {
45        flags=0;
46        set_wait_input(1);
47        comm->read_selectable();
48      };
49    ~player_client();
50  } ;
51
52  player_client *player_list;
53  int waiting_server_input, reload_state;
54
55  void add_client_input(char *buf, int size, player_client *c);
56  void check_collection_complete();
57  void check_reload_wait();
58  int process_client_command(player_client *c);
59  int isa_client(int client_id);
60  public :
61  virtual void game_start_wait();
62  int total_players();
63  int process_net();
64  void add_engine_input();
65  int input_missing();
66  virtual int start_reload();
67  virtual int end_reload(int disconnect=0);
68  virtual int add_client(int type, net_socket *sock, net_address *from);
69  virtual int kill_slackers();
70  virtual int quit();
71  game_server();
72  ~game_server();
73} ;
74
75#endif
Note: See TracBrowser for help on using the repository browser.