Dragonfly 4.24
A text-based game engine
NetworkManager.h
1//
2// NetworkManager.h
3//
4// Manage network connections to/from engine.
5//
6
7#ifndef NO_NETWORK
8
9#ifndef __NETWORK_MANAGER_H__
10#define __NETWORK_MANAGER_H__
11
12// System includes.
13#include <queue>
14#include <string>
15#include <vector>
16
17// Engine includes.
18#include "Manager.h"
19
20// Two-letter acronym for easier access to manager.
21#define NM df::NetworkManager::getInstance()
22
23namespace df {
24
25const std::string DRAGONFLY_PORT = "9876";
26
27// For delayed message sending.
28using delayedMessage = std::tuple<int, char*, size_t>;
29using delayQueue = std::queue<delayedMessage>;
30
31// Generate data events, when appropriate. If complete network
32// message, (first int is message size, in bytes) generate
33// EventNetwork (DATA). Return 1 if generated event, 0 if no complete
34// message, -1 if error.
35int genDataEvents(int sock=0);
36
37class NetworkManager : public Manager {
38
39 private:
40 NetworkManager(); // Private since a singleton.
41 NetworkManager(NetworkManager const&); // Don't allow copy.
42 void operator=(NetworkManager const&); // Don't allow assignment.
43 int m_accept_sock; // int for accept connections.
44 int m_max_sock; // Limit of connected sockets.
45 std::vector<int> m_sock; // Connected network sockets.
46 std::vector<int> m_delay; // Delay (in ticks) for each socket.
47 std::vector<delayQueue> m_delay_q; // Queue of delayed messages.
48
49public:
50
51 /// Get the one and only instance of the NetworkManager.
53
54 /// Start up NetworkManager.
55 int startUp() override;
56
57 /// Shut down NetworkManager.
58 void shutDown() override;
59
60 /// Return true only for network events.
61 /// Return false for other engine events.
62 bool isValid(std::string event_type) const override;
63
64 /// Setup NetworkManager as server (if false, reset to client).
65 /// Return 0 if ok, else -1.
66 int setServer(bool server=true, std::string port = DRAGONFLY_PORT);
67
68 /// Return true if successufully setup as server, else false.
69 bool isServer() const;
70
71 /// Accept network connection.
72 /// If successful, generate EventNetwork (accept).
73 /// Return socket if new connection.
74 /// Return -1 if no new connection, but no error.
75 /// Return -2 if error.
76 int accept();
77
78 /// Make network connection to host at port.
79 /// If successful, generate EventNetwork (connect).
80 /// Return return socket if success, -1 if error.
81 int connect(std::string host, std::string port = DRAGONFLY_PORT);
82
83 /// Set maximum number of connections.
84 void setMaxConnections(int new_max_sock);
85
86 /// Get maximum number of connections.
87 int getMaxConnections() const;
88
89 /// Get number of connected sockets.
90 int getNumConnections() const;
91
92 /// Send bytes from buffer to connected network socket (-1 for all).
93 /// Return 0 if success, -1 if error.
94 int send(const void *buffer, int bytes, int sock = -1);
95
96 /// Receive from connected network socket (no more than bytes).
97 /// If leave is true, don't remove data from socket (peek).
98 /// Return number of bytes received, -1 if error.
99 int receive(void *buffer, int bytes, bool leave, int sock = 0);
100
101 /// Close network connection on indicated socket (-1 for all).
102 /// If successful, generate EventNetwork (close).
103 /// Return 0 if success, else -1.
104 int close(int sock = -1);
105
106 /// Return OS socket at indicated index. -1 if out of range.
107 int getSocket(int index = 0) const;
108
109 /// Check if socket is connected.
110 /// Default (-1) checks if any socket is connected.
111 /// Return true if (any) socket is connected, else false.
112 bool isConnected(int sock = -1) const;
113
114 /// Check if network data on indicated socket.
115 /// Return amount of data (0 if no data), -1 if not connected or error.
116 int isData(int sock = 0) const;
117
118 /// Set delay amount added to outgoing messages (in ticks).
119 /// Return 0 if ok, else -1.
120 int setDelay(int new_delay, int sock = 0);
121
122 ////////////////////////////////////////////////////
123 // Helper methods for adding delay to outgoing messages.
124
125 // Send any delayed messages that have expired.
126 // Return 0 if success, -1 if error.
127 int sendDelayed();
128
129 // Send bytes from buffer to connected network socket
130 // immediately, without delay added via setDelay().
131 // Return 0 if success, -1 if error.
132 int sendNow(const void *buffer, int bytes, int sock = 0);
133 ////////////////////////////////////////////////////
134
135};
136
137} // end of namespace df
138
139#endif // __NETWORK_MANAGER_H__
140
141#endif // NO_NETWORK
Definition: Manager.h:24
Definition: NetworkManager.h:37
int getMaxConnections() const
Get maximum number of connections.
int send(const void *buffer, int bytes, int sock=-1)
Send bytes from buffer to connected network socket (-1 for all).
int getNumConnections() const
Get number of connected sockets.
int accept()
Accept network connection.
int close(int sock=-1)
Close network connection on indicated socket (-1 for all).
void shutDown() override
Shut down NetworkManager.
int connect(std::string host, std::string port=DRAGONFLY_PORT)
Make network connection to host at port.
bool isValid(std::string event_type) const override
Return true only for network events.
int setDelay(int new_delay, int sock=0)
Set delay amount added to outgoing messages (in ticks).
bool isServer() const
Return true if successufully setup as server, else false.
void setMaxConnections(int new_max_sock)
Set maximum number of connections.
bool isConnected(int sock=-1) const
Check if socket is connected.
int isData(int sock=0) const
Check if network data on indicated socket.
int startUp() override
Start up NetworkManager.
int setServer(bool server=true, std::string port=DRAGONFLY_PORT)
Setup NetworkManager as server (if false, reset to client).
static NetworkManager & getInstance()
Get the one and only instance of the NetworkManager.
int receive(void *buffer, int bytes, bool leave, int sock=0)
Receive from connected network socket (no more than bytes).
int getSocket(int index=0) const
Return OS socket at indicated index. -1 if out of range.
An animation for a sprite.
Definition: Animation.h:15