Changeset 47eacc32f1c58d8b7506672c4bf60f06a6b509bf
- Timestamp:
- 01/06/07 23:47:34 (6 years ago)
- Author:
- Philipp Kern <phil@…>
- Parents:
- ab042e610ec8465af4744f07b6ec79925be3bd2c
- Children:
- 4a2cffcccc9521265333d37f29697b890e28dcb5
- git-committer:
- Philipp Kern <phil@0x539.de> / 2007-01-06T22:47:34Z+0000
- Message:
-
[project @ Adjusted buffer wrapper because peer has been renamed to user in net6]
Original author: Armin Burgmeier <armin@…>
Date: 2005-09-06 12:31:28+00:00
- Files:
-
Legend:
- Unmodified
- Added
- Removed
-
|
r27bfdd1
|
r47eacc3
|
|
| 84 | 84 | }; |
| 85 | 85 | |
| 86 | | typedef std::map<const net6::server::peer*, main_connection*> |
| 87 | | peer_map_type; |
| | 86 | typedef std::map<const net6::user*, main_connection*> |
| | 87 | user_map_type; |
| 88 | 88 | |
| 89 | 89 | /** Constructs a new server object. Note that you have to perform a call |
| … |
… |
|
| 117 | 117 | virtual void reopen(unsigned int port); |
| 118 | 118 | |
| 119 | | /** Sends a packet to the given peer. |
| 120 | | */ |
| 121 | | virtual void send(const net6::packet& pack, net6::host::peer& to); |
| 122 | | |
| 123 | | protected: |
| 124 | | /** Called when a new peer has connected to the server. This callback |
| 125 | | * is used to create a new main_connection for this peer and storing it |
| 126 | | * in the peer map. |
| 127 | | */ |
| 128 | | virtual void on_connect(net6::host::peer& new_peer); |
| | 119 | /** Sends a packet to all currently connected users. |
| | 120 | */ |
| | 121 | virtual void send(const net6::packet& pack); |
| | 122 | |
| | 123 | /** Sends a packet to the given user. |
| | 124 | */ |
| | 125 | virtual void send(const net6::packet& pack, const net6::user& to); |
| | 126 | |
| | 127 | protected: |
| | 128 | /** Called when a new user has connected to the server. This callback |
| | 129 | * is used to create a new main_connection for this user and storing it |
| | 130 | * in the user map. |
| | 131 | */ |
| | 132 | virtual void on_connect(const net6::user& new_user); |
| 129 | 133 | |
| 130 | 134 | /** Called when a all data in the send queue of a client connection has |
| 131 | 135 | * been sent. This is used to remove the IO_OUT flag. |
| 132 | 136 | */ |
| 133 | | virtual void on_send_event(net6::host::peer& to); |
| | 137 | virtual void on_send_event(net6::user& to); |
| 134 | 138 | |
| 135 | 139 | /** Deletes the main_connection on connection loss. |
| 136 | 140 | */ |
| 137 | | virtual void remove_client(net6::host::peer* client); |
| 138 | | |
| 139 | | /** Returns the iterator for the given peer. If this peer is not present |
| 140 | | * in the map (which should never occur), host::Error is thrown. |
| 141 | | */ |
| 142 | | peer_map_type::iterator get_peer_iter(const net6::server::peer& peer); |
| | 141 | virtual void remove_client(const net6::user* client); |
| | 142 | |
| | 143 | /** Returns the iterator for the given user. If this user is not present |
| | 144 | * in the map (which should never occur), server::Error is thrown. |
| | 145 | */ |
| | 146 | user_map_type::iterator get_user_iter(const net6::user& user); |
| 143 | 147 | |
| 144 | 148 | #ifdef WIN32 |
| … |
… |
|
| 146 | 150 | #endif |
| 147 | 151 | std::auto_ptr<main_connection> m_serv_connection; |
| 148 | | peer_map_type m_peer_map; |
| | 152 | user_map_type m_user_map; |
| 149 | 153 | private: |
| 150 | 154 | void shutdown_impl(); |
| … |
… |
|
| 154 | 158 | /** The host is bit tricky: |
| 155 | 159 | * We derive from io::server to get all the IO handling and from net6::host to |
| 156 | | * get the underlaying host with its local peer. |
| | 160 | * get the underlaying host with its local user. |
| 157 | 161 | */ |
| 158 | 162 | |
| … |
… |
|
| 185 | 189 | virtual ~host(); |
| 186 | 190 | |
| 187 | | /** Sends a packet to the given peer. No packet will be send if to |
| | 191 | /** Sends a packet to all connected users. |
| | 192 | */ |
| | 193 | virtual void send(const net6::packet& pack); |
| | 194 | |
| | 195 | /** Sends a packet to the given user. No packet will be sent if to |
| 188 | 196 | * is the local user. |
| 189 | 197 | */ |
| 190 | | virtual void send(const net6::packet& pack, net6::host::peer& to); |
| | 198 | virtual void send(const net6::packet& pack, const net6::user& to); |
| 191 | 199 | protected: |
| 192 | 200 | /** Called when a all data in the send queue of a client connection has |
| 193 | 201 | * been sent. This is used to remove the IO_OUT flag. |
| 194 | 202 | */ |
| 195 | | virtual void on_send_event(net6::host::peer& to); |
| | 203 | virtual void on_send_event(net6::user& to); |
| 196 | 204 | }; |
| 197 | 205 | |
-
|
r76caa79
|
r47eacc3
|
|
| 660 | 660 | // queue_draw() after the apply_tag call, but it did not help |
| 661 | 661 | // - Armin |
| 662 | | for(int i = 0; i < 2; ++ i) |
| | 662 | // for(int i = 0; i < 2; ++ i) |
| | 663 | // // Applying once seems to work now? |
| | 664 | // // - Armin (29.07.2005) |
| 663 | 665 | buffer->apply_tag(tag, begin, end); |
| 664 | 666 | } |
-
|
rf122ca6
|
r47eacc3
|
|
| 96 | 96 | |
| 97 | 97 | // Remove client main_connections |
| 98 | | peer_map_type::iterator iter; |
| 99 | | for(iter = m_peer_map.begin(); iter != m_peer_map.end(); ++ iter) |
| | 98 | user_map_type::iterator iter; |
| | 99 | for(iter = m_user_map.begin(); iter != m_user_map.end(); ++ iter) |
| 100 | 100 | delete iter->second; |
| 101 | 101 | } |
| … |
… |
|
| 117 | 117 | } |
| 118 | 118 | |
| 119 | | void obby::io::server::send(const net6::packet& pack, net6::server::peer& to) |
| | 119 | void obby::io::server::send(const net6::packet& pack) |
| | 120 | { |
| | 121 | // Call base function |
| | 122 | net6::server::send(pack); |
| | 123 | } |
| | 124 | |
| | 125 | void obby::io::server::send(const net6::packet& pack, const net6::user& to) |
| 120 | 126 | { |
| 121 | 127 | // Add Glib::IO_OUT event |
| 122 | | peer_map_type::iterator iter = get_peer_iter(to); |
| | 128 | user_map_type::iterator iter = get_user_iter(to); |
| 123 | 129 | iter->second->add_events(main_connection::IO_OUT); |
| 124 | 130 | |
| … |
… |
|
| 127 | 133 | } |
| 128 | 134 | |
| 129 | | void obby::io::server::on_connect(net6::server::peer& new_peer) |
| | 135 | void obby::io::server::on_connect(const net6::user& new_user) |
| 130 | 136 | { |
| 131 | 137 | // Build main_connection |
| … |
… |
|
| 134 | 140 | m_window, |
| 135 | 141 | #endif |
| 136 | | new_peer.get_socket(), |
| | 142 | new_user.get_connection().get_socket(), |
| 137 | 143 | main_connection::IO_IN | main_connection::IO_ERROR |
| 138 | 144 | ); |
| 139 | 145 | |
| 140 | | // Insert into peer map |
| 141 | | m_peer_map[&new_peer] = conn; |
| 142 | | |
| 143 | | // Call base function |
| 144 | | net6::server::on_connect(new_peer); |
| 145 | | } |
| 146 | | |
| 147 | | void obby::io::server::on_send_event(net6::server::peer& to) |
| 148 | | { |
| 149 | | // Find peer in peer map |
| 150 | | peer_map_type::iterator iter = get_peer_iter(to); |
| | 146 | // Insert into user map |
| | 147 | m_user_map[&new_user] = conn; |
| | 148 | |
| | 149 | // Call base function |
| | 150 | net6::server::on_connect(new_user); |
| | 151 | } |
| | 152 | |
| | 153 | void obby::io::server::on_send_event(net6::user& to) |
| | 154 | { |
| | 155 | // Find user in user map |
| | 156 | user_map_type::iterator iter = get_user_iter(to); |
| 151 | 157 | main_connection* conn = iter->second; |
| 152 | 158 | |
| … |
… |
|
| 158 | 164 | } |
| 159 | 165 | |
| 160 | | void obby::io::server::remove_client(net6::server::peer* peer) |
| 161 | | { |
| 162 | | // Find peer in peer map |
| 163 | | peer_map_type::iterator iter = get_peer_iter(*peer); |
| | 166 | void obby::io::server::remove_client(const net6::user* user) |
| | 167 | { |
| | 168 | // Find user in user map |
| | 169 | user_map_type::iterator iter = get_user_iter(*user); |
| 164 | 170 | |
| 165 | 171 | // Remove main_connection |
| 166 | 172 | delete iter->second; |
| 167 | | m_peer_map.erase(iter); |
| 168 | | |
| 169 | | // Call base function |
| 170 | | net6::server::remove_client(peer); |
| 171 | | } |
| 172 | | |
| 173 | | obby::io::server::peer_map_type::iterator |
| 174 | | obby::io::server::get_peer_iter(const net6::server::peer& peer) |
| 175 | | { |
| 176 | | // Find peer |
| 177 | | peer_map_type::iterator iter = m_peer_map.find(&peer); |
| | 173 | m_user_map.erase(iter); |
| | 174 | |
| | 175 | // Call base function |
| | 176 | net6::server::remove_client(user); |
| | 177 | } |
| | 178 | |
| | 179 | obby::io::server::user_map_type::iterator |
| | 180 | obby::io::server::get_user_iter(const net6::user& user) |
| | 181 | { |
| | 182 | // Find user |
| | 183 | user_map_type::iterator iter = m_user_map.find(&user); |
| 178 | 184 | |
| 179 | 185 | // Not found? |
| 180 | | if(iter == m_peer_map.end() ) |
| | 186 | if(iter == m_user_map.end() ) |
| 181 | 187 | { |
| 182 | 188 | // Should not happen... |
| 183 | | obby::format_string str( |
| 184 | | _("Peer %0% (%1%) not found in peer list") ); |
| 185 | | str << peer.get_name() << peer.get_address().get_name(); |
| 186 | | throw Error(Error::PEER_NOT_FOUND, str.str() ); |
| | 189 | throw Error( |
| | 190 | Error::PEER_NOT_FOUND, |
| | 191 | "obby::io::server::get_user_iter" |
| | 192 | ); |
| 187 | 193 | } |
| 188 | 194 | |
| … |
… |
|
| 238 | 244 | } |
| 239 | 245 | |
| 240 | | void obby::io::host::send(const net6::packet& pack, net6::host::peer& to) |
| | 246 | void obby::io::host::send(const net6::packet& pack) |
| | 247 | { |
| | 248 | // Call base function from server |
| | 249 | server::send(pack); |
| | 250 | } |
| | 251 | |
| | 252 | void obby::io::host::send(const net6::packet& pack, const net6::user& to) |
| 241 | 253 | { |
| 242 | 254 | // Prevent from sendint packets to ourselves |
| … |
… |
|
| 246 | 258 | } |
| 247 | 259 | |
| 248 | | void obby::io::host::on_send_event(net6::host::peer& to) |
| | 260 | void obby::io::host::on_send_event(net6::user& to) |
| 249 | 261 | { |
| 250 | 262 | // Prevent from sending packets to ourselves |
| … |
… |
|
| 327 | 339 | m_server = host; |
| 328 | 340 | |
| 329 | | assert(host->get_self() != NULL); |
| 330 | | m_self = m_usertable.add_user(*host->get_self(), red, green, blue); |
| | 341 | m_self = m_usertable.add_user(host->get_self(), red, green, blue); |
| 331 | 342 | register_signal_handlers(); |
| 332 | 343 | } |