| 138 | } |
| 139 | } |
| 140 | int NetServer::ServerThread() { |
| 141 | event_base_dispatch(net_evbase); |
| 142 | for(auto bit = users.begin(); bit != users.end(); ++bit) { |
| 143 | bufferevent_disable(bit->first, EV_READ); |
| 144 | bufferevent_free(bit->first); |
| 145 | } |
| 146 | users.clear(); |
| 147 | evconnlistener_free(listener); |
| 148 | listener = 0; |
| 149 | if(broadcast_ev) { |
| 150 | evutil_socket_t fd; |
| 151 | event_get_assignment(broadcast_ev, 0, &fd, 0, 0, 0); |
| 152 | evutil_closesocket(fd); |
| 153 | event_free(broadcast_ev); |
| 154 | broadcast_ev = 0; |
| 155 | } |
| 156 | if(duel_mode) { |
| 157 | event_free(duel_mode->etimer); |
| 158 | delete duel_mode; |
| 159 | } |
| 160 | duel_mode = 0; |
| 161 | event_base_free(net_evbase); |
| 162 | net_evbase = 0; |
| 163 | return 0; |
| 164 | } |
| 165 | void NetServer::DisconnectPlayer(DuelPlayer* dp) { |
| 166 | auto bit = users.find(dp->bev); |
| 167 | if(bit != users.end()) { |