source: abuse/tags/pd/macabuse/src/net/unix/netdrv.hpp @ 49

Last change on this file since 49 was 49, checked in by Sam Hocevar, 11 years ago
  • Imported original public domain release, for future reference.
File size: 2.2 KB
Line 
1#ifndef __NETDRV_HPP_
2#define __NETDRV_HPP_
3
4#error hi
5#include "netface.hpp"
6#include <unistd.h>
7#include "undrv.hpp"
8// these are the names of the fifos to create in tmp
9// that communitcate with the engine
10
11#define DIN_NAME "/tmp/.abuse_ndrv_in"
12#define DOUT_NAME "/tmp/.abuse_ndrv_out"
13
14// the lock files is used in case a previous net driver is already running
15
16#define DLOCK_NAME "/tmp/.abuse_ndrv_lock"
17#include "sock.hpp"
18
19
20class game_handler;
21
22class net_driver
23{
24  net_socket *in,*out;
25  int shm_seg_id; 
26  void *shm_addr;
27
28  int connect_to_engine(int argc, char **argv);
29  int setup_shm();
30  game_handler *game_face;
31  int join_server(char *server_name);
32  net_protocol *proto;
33  int comm_port, game_port;
34  join_struct *join_array;
35  int debug;
36  int reg;
37
38  class lsf_waiter
39  {
40    public :
41    net_socket *sock;
42    lsf_waiter *next;
43    lsf_waiter(net_socket *sock, lsf_waiter *next) : sock(sock), next(next)
44    {
45      sock->read_selectable();  // set in case socket dies   
46    } ;
47    ~lsf_waiter()
48    {
49      sock->read_unselectable();
50      delete sock;
51    }   
52  } *lsf_wait_list;
53
54
55  class crc_waiter
56  {
57    public :
58    net_socket *sock;
59    crc_waiter *next;
60    crc_waiter(net_socket *sock, crc_waiter *next) : sock(sock), next(next)
61    {
62      sock->read_selectable();  // set in case socket dies
63    } ;
64    ~crc_waiter()
65    {
66      sock->read_unselectable();
67      delete sock;
68    }   
69  } *crc_wait_list;
70
71  int fetch_crcs(char *server);
72  int get_lsf(char *name);  // contact remot host and ask for lisp startup file filename
73
74  public :
75  base_memory_struct *base;
76
77  void cleanup();
78  int registered() { return reg; }
79  net_driver(int argc, char **argv, int comm_port, int game_port, net_protocol *proto);
80  int check_commands();
81  int add_client(int type, net_socket *sock, net_address *from);
82  int add_joiner(int client_id, char *name);
83  net_socket *connect_to_server(char *&name,
84                                int port=DEFAULT_COMM_PORT,
85                                int force_port=0,
86                                net_socket::socket_type sock_type=net_socket::SOCKET_SECURE);
87  net_protocol *get_protocol() { return proto; }
88  int become_server();
89  int get_game_port() { return game_port; }
90  ~net_driver();
91} ;
92
93extern net_driver *driver;
94void mdie(char *reason);
95
96#endif
97
Note: See TracBrowser for help on using the repository browser.