/* ShipWars Network Parsing and Sending */ #ifndef NET_H #define NET_H #include #include "../include/urlparse.h" #include "../include/cs.h" #include "../include/objects.h" #ifdef __cplusplus extern "C" { #endif typedef struct _xsw_net_parms_struct xsw_net_parms_struct; typedef struct _xsw_net_stat_struct xsw_net_stat_struct; /* * Connection States: */ #define XSW_CON_STATE_NOT_CONNECTED 0 /* Not connected */ #define XSW_CON_STATE_NEGOTIATING 1 /* Logging in */ #define XSW_CON_STATE_CONNECTED 2 /* Logged in */ #define XSW_CON_STATE_CLOSE_WAIT 3 /* Disconnecting */ /* * Check Connection State: */ #define XSW_CON_STATE_IS_NOT_CONNECTED(_net_) \ (((_net_) != NULL) ? \ ((_net_)->connection_state == XSW_CON_STATE_NOT_CONNECTED) : 0 \ ) #define XSW_CON_STATE_IS_NEGOTIATING(_net_) \ (((_net_) != NULL) ? \ ((_net_)->connection_state == XSW_CON_STATE_NEGOTIATING) : 0 \ ) #define XSW_CON_STATE_IS_CONNECTED(_net_) \ (((_net_) != NULL) ? \ ((_net_)->connection_state == XSW_CON_STATE_CONNECTED) : 0 \ ) #define XSW_CON_STATE_IS_CLOSE_WAIT(_net_) \ (((_net_) != NULL) ? \ ((_net_)->connection_state == XSW_CON_STATE_CLOSE_WAIT) : 0 \ ) /* * Flags: */ #define XSW_CON_FLAG_ADDRESS_SET (1 << 0) /* Address & port are * set at startup * (command line) */ #define XSW_CON_FLAG_DISCON_INITIATOR (1 << 2) /* We initiated * disconnected */ #define XSW_CON_FLAG_SET_PLAYER_NUM (1 << 10) /* Got the player object * number */ #define XSW_CON_FLAG_SET_PLAYER_SECT (1 << 11) /* Got the player's * sector */ #define XSW_CON_FLAG_SET_PLAYER_POS (1 << 12) /* Got the player's * position */ /* * Connection Socket Check: * * Does not check the connection state, only if the socket is not * -1. */ #define XSW_CON_IS_CONNECTED(_net_) \ (((_net_) != NULL) ? ((_net_)->socket > -1) : 0) /* * Shutdown Connection Socket: */ #define XSW_CON_SHUTDOWN_RD 0 #define XSW_CON_SHUTDOWN_WR 1 #define XSW_CON_SHUTDOWN_RDWR 2 /* * Network Parameters: */ struct _xsw_net_parms_struct { int connection_state; /* One of XSW_CON_STATE_* */ int socket; /* Can be -1 for not conneted */ unsigned int flags; /* Any of XSW_CON_FLAG_* */ /* Player reference (can be -1 and NULL) */ int player_obj_num; xsw_object_struct *player_obj_ptr; /* Login name and password */ char *login_name, *login_password; /* When connection was first established (in seconds) */ time_t con_start; /* Login delay warning (in seconds), when connected and not * logged in this records the last time a warning was * printed */ time_t login_delay_warning_last; /* Address and port number of connection to server */ char *title; char *address; int port; /* Network stream sync refresh interval (in milliseconds) * Interval in which the client sends data (such as the player * object's position) to the server */ time_t net_int; /* Number of times a disconnect was sent (used to check if the * server is not responding) */ int disconnect_send_count; /* Bad send() counter */ int bad_send_count; /* Receive buffer * * Stores a segment of data that was recv()'ed without a * segment deliminator, it holds/accumulates the data from * subsequent recv()'s until the segment deliminator is * received */ char recvbuf[CS_DATA_MAX_LEN]; int recvbuf_len; }; #define XSW_NET_PARMS(p) ((xsw_net_parms_struct *)(p)) extern xsw_net_parms_struct net_parms; /* * Network Statistics: */ struct _xsw_net_stat_struct { unsigned long rx_interval, /* Bytes received per sec */ sx_interval, /* Bytes sent per sec */ rx_ilast, /* Last bytes received per sec */ sx_ilast; /* Last bytes sent per sec */ }; #define XSW_NET_STAT(p) ((xsw_net_stat_struct *)(p)) extern xsw_net_stat_struct net_stat; /* In net.cpp */ extern int NetConnect(const char *host, int port, time_t timeout); extern void NetShutdownConnection(int how, char is_initiator); extern void NetCloseConnection(time_t timeout); extern void NetWaitClose(time_t timeout); extern void NetDisconnect(time_t timeout); /* In netrecv.cpp */ extern int NetHandleRecv(void); /* In netsend.cpp */ extern int NetSendData(const char *data); extern void NetSendGlobalMessage(const char *msg); extern void NetSendVersion(void); extern void NetSendLogout(void); extern void NetSendRefresh(void); extern void NetSendSetInterval(void); extern void NetSendExec(const char *arg); extern void NetSendSetImageSet(const char *arg); extern void NetSendSetSoundSet(const char *arg); extern void NetSendSetOCSN(const char *arg); extern void NetSendObjPose(int obj_num); extern void NetSendObjSect(int obj_num); extern void NetSendObjThrottle(int obj_num); extern void NetSendSetLighting(int obj_num, sw_flags_t lighting); extern void NetSendSetChannel(int obj_num, int channel); extern void NetSendWeaponsState(int obj_num, int state); extern void NetSendSelectWeapon(int obj_num, int selected_weapon); extern void NetSendSetShields( int obj_num, int shield_state, float shield_frequency ); extern void NetSendSetDmgCtl(int obj_num, char damage_control); extern void NetSendSetCloak(int obj_num, char cloak_state); extern void NetSendWeaponsLock(int obj_num, int tar_obj_num); extern void NetSendWeaponsUnlock(int obj_num); extern void NetSendIntercept(int obj_num, const char *arg); extern void NetSendSetEngine(const int obj_num, const int engine_state); extern void NetSendReqName(int obj_num); extern void NetSendFireWeapon(int obj_num, float freq); extern void NetSendTractorBeamLock(int obj_num, int tar_obj_num); extern void NetSendHail(int obj_num, int tar_obj_num, int channel); extern void NetSendComMessage( int obj_num, int tar_obj_num, int channel, const char *message ); extern void NetSendWormHoleEnter(int obj_num, int tar_obj_num); extern void NetSendELinkEnter(int obj_num, int tar_obj_num); extern void NetSendWeaponDisarm(int obj_num, int tar_obj_num); extern void NetSendAutoDestruct(int obj_num, time_t sec); extern void NetSendReqDescription(int obj_num); extern void NetSendEcoReqValues(int obj_num); extern void NetSendEcoBuy( const int customer_obj_num, const int proprietor_obj_num, xsw_ecoproduct_struct *product ); extern void NetSendEcoSell( const int customer_obj_num, const int proprietor_obj_num, xsw_ecoproduct_struct *product ); #ifdef __cplusplus } #endif #endif /* NET_H */