Starshatter_Open
Open source Starshatter engine
 All Classes Files Functions Variables Typedefs Enumerations Enumerator Friends Macros
NetPeer.h
Go to the documentation of this file.
1 /* Project nGenEx
2  Destroyer Studios LLC
3  Copyright © 1997-2004. All Rights Reserved.
4 
5  SUBSYSTEM: NetEx.lib
6  FILE: NetPeer.h
7  AUTHOR: John DiCamillo
8 
9 
10  OVERVIEW
11  ========
12  One side of a UDP net link connection
13 */
14 
15 
16 #ifndef NetPeer_h
17 #define NetPeer_h
18 
19 #include <windows.h>
20 #include "NetAddr.h"
21 #include "List.h"
22 #include "ThreadSync.h"
23 
24 // +-------------------------------------------------------------------+
25 
26 class NetGram;
27 class NetMsg;
28 
29 // +-------------------------------------------------------------------+
30 
31 class NetPeer
32 {
33 public:
34  static const char* TYPENAME() { return "NetPeer"; }
35 
37 
38  NetPeer(const NetAddr& addr, DWORD id);
39  ~NetPeer();
40 
41  int operator == (const NetPeer& p) const { return netid == p.netid; }
42 
43  bool SendMessage(NetMsg* msg);
44  NetMsg* GetMessage();
45 
47  bool ReceiveGram(NetGram* g, List<NetMsg>* q=0);
48 
49  const NetAddr& Address() const { return addr; }
50  DWORD NetID() const { return netid; }
51  DWORD Sequence() const { return sequence; }
52 
53  int GetMaxPPS() const { return pps; }
54  void SetMaxPPS(int p) { pps = p; }
55  int GetMaxBPS() const { return bps; }
56  void SetMaxBPS(int b) { bps = b; }
57  int GetMaxQSize() const { return max_qsize; }
58  void SetMaxQSize(int q) { max_qsize = q; }
59 
60  DWORD GetChunkSize() const { return chunk_size; }
61  void SetChunkSize(DWORD s) { chunk_size = s; }
62 
63  DWORD LastReceiveTime() const { return last_recv_time; }
64  void SetLastReceiveTime(DWORD t) { last_recv_time = t; }
65 
66 private:
67  bool OKtoSend() const;
68  void CheckMultiRecv(List<NetMsg>* q);
69 
70  NetAddr addr; // remote network address
71  DWORD sequence; // highest packet id received
72  DWORD netid; // unique id for this peer
73  int pps; // max packets per second
74  int bps; // max bits per second
75  int max_qsize; // max bytes in either queue
76  int status; // ok or error code
77  DWORD chunk_size; // size of multipart message chunk
78 
79  enum HIST { HIST_SIZE=8 };
80 
81  DWORD last_recv_time; // time of last received packet
82  DWORD hist_time[HIST_SIZE]; // history for pps check
83  DWORD hist_size[HIST_SIZE]; // history for bps check
84  int hist_indx; // index into history
85 
86  int send_size; // total bytes in send list
87  int recv_size; // total bytes in recv list
88  List<NetMsg> send_list; // queue of messages waiting to be sent
89  List<NetMsg> recv_list; // queue of messages waiting to be read
90 
91  List<NetMsg> multi_send_list;
92  List<NetMsg> multi_recv_list;
93 
94  ThreadSync sync;
95 };
96 
97 
98 #endif NetPeer_h