Changeset 538
- Timestamp:
- 02/22/10 22:37:05 (5 months ago)
- Location:
- branches/cpp-ode/src
- Files:
-
- 1 added
- 7 modified
-
libmmpong/netcon.h (modified) (10 diffs)
-
libmmpong/netgame.h (modified) (1 diff)
-
libmmpong/netgame_ode_pong.cc (modified) (1 diff)
-
libmmpong/netgame_ode_pong.h (modified) (4 diffs)
-
mmpong-gl/client_gl.cc (modified) (2 diffs)
-
mmpong-gl/hid.h (added)
-
mmpong-gl/netgame_ode_pong_gl.h (modified) (2 diffs)
-
mmpongd/server.cc (modified) (1 diff)
Legend:
- Unmodified
- Added
- Removed
-
branches/cpp-ode/src/libmmpong/netcon.h
r508 r538 23 23 void write(NetMsg::pointer msg) { 24 24 LOGDBG("enter"); 25 skt_.get_io_service().post(boost::bind(&NetCon::do_write, this, msg));25 skt_.get_io_service().post(boost::bind(&NetCon::do_write, shared_from_this(), msg)); 26 26 }; 27 27 … … 33 33 34 34 void stop() { 35 LOGDBG("enter"); 36 closed=true; 35 37 skt_.close(); 36 38 }; … … 39 41 return skt_; 40 42 }; 43 44 ~NetCon() { 45 LOGDBG("destroy NetCon"); 46 } 41 47 private: 42 48 explicit NetCon(boost::asio::io_service &svc, boost::function<void(pointer)> onError, boost::function<void(pointer, NetMsg::pointer)> onRead) : skt_(svc), onRead_(onRead), onError_(onError) { 43 49 rbuf = NetMsg::create(); 50 closed=false; 44 51 }; 45 52 … … 48 55 skt_, 49 56 rbuf->recv_hdr(), 50 boost::bind(&NetCon::handle_read_hdr, this, boost::asio::placeholders::error)57 boost::bind(&NetCon::handle_read_hdr, shared_from_this(), boost::asio::placeholders::error) 51 58 ); 52 59 }; … … 57 64 read_body(); 58 65 } else { 59 do_close();60 66 LOGDBG("read operation failed."); 61 onError_(shared_from_this()); 67 if (!closed) { 68 stop(); 69 onError_(shared_from_this()); 70 } 62 71 } 63 72 }; … … 67 76 skt_, 68 77 rbuf->recv_body(), 69 boost::bind(&NetCon::handle_read_body, this, boost::asio::placeholders::error)78 boost::bind(&NetCon::handle_read_body, shared_from_this(), boost::asio::placeholders::error) 70 79 ); 71 80 }; … … 75 84 if (!err) { 76 85 rbuf->recv_finish(); 77 onRead_(shared_from_this(), rbuf); 86 //onRead_(shared_from_this(), rbuf); 87 skt_.get_io_service().post(boost::bind(onRead_, shared_from_this(), rbuf)); 88 //onRead_(shared_from_this(), rbuf); 78 89 90 LOGDBG("read next one"); 79 91 //read next one 80 92 rbuf = NetMsg::create(); 81 93 read_hdr(); 82 94 } else { 83 do_close(); 84 LOGDBG("read operation failed."); 85 onError_(shared_from_this()); 95 LOGDBG("read operation failed." << err); 96 if (!closed) { 97 stop(); 98 onError_(shared_from_this()); 99 } 86 100 } 87 101 }; … … 95 109 skt_, 96 110 msg->send(), 97 boost::bind(&NetCon::handle_write, this, boost::asio::placeholders::error)111 boost::bind(&NetCon::handle_write, shared_from_this(), boost::asio::placeholders::error) 98 112 ); 99 113 } … … 108 122 skt_, 109 123 wq.front()->send(), 110 boost::bind(&NetCon::handle_write, this, boost::asio::placeholders::error)124 boost::bind(&NetCon::handle_write, shared_from_this(), boost::asio::placeholders::error) 111 125 ); 112 126 } 113 127 } else { 114 do_close(); 115 LOGDBG("write operation failed."); 116 onError_(shared_from_this()); 128 LOGDBG("write operation failed." << err); 129 if (!closed) { 130 stop(); 131 onError_(shared_from_this()); 132 } 117 133 } 118 };119 120 void do_close() {121 skt_.close();122 134 }; 123 135 … … 127 139 std::deque<NetMsg::pointer> wq; //write queue 128 140 NetMsg::pointer rbuf; //read buffer 141 bool closed; 129 142 }; 130 143 -
branches/cpp-ode/src/libmmpong/netgame.h
r528 r538 113 113 const std::map<uint16_t, NetEnt::pointer>& get_ents() { return ents; }; 114 114 NetEnt::pointer get_ent(uint16_t entid) { return ents[entid]; }; 115 template <class CLASS> boost::shared_ptr<CLASS> get_ent(uint16_t entid) { 116 return boost::dynamic_pointer_cast<CLASS>(get_ent(entid)); 117 }; 115 118 116 119 //only server creates NetEnts -
branches/cpp-ode/src/libmmpong/netgame_ode_pong.cc
r532 r538 263 263 }; 264 264 265 void NetGameODEPong::cln_set_paddlepos(float pos) { 266 if (pos>1.0) 267 pos=1.0; 268 if (pos<0.0) 269 pos=0.0; 270 if (pos!=mypadpos) { 271 mypadpos=pos; 272 boost::shared_ptr<ODEBox> pad=get_ent<ODEBox>(mypadid); 273 double ang=M_PI*(1.0+2.0*myteamid/srv_teamid_cur); 274 pad->setPosition(cos(ang)*1.05, -1.0 + 2.0 * mypadpos, 0.0); 275 NetMsg::pointer msg=NetMsg::create(NetMsg::CmdGameCustom); 276 msg->pack_begin(); 277 uint16_t customcmd=PlayerPadPos; 278 msg->pack(customcmd); 279 msg->pack(mypadpos); 280 msg->pack_finish(); 281 cln_con->write(msg); 282 } 283 }; 284 265 285 void NetGameODEPong::print_playerlist() { 266 286 for (std::map<uint16_t, std::set<uint16_t> >::iterator itteam=team2players.begin(); itteam!=team2players.end(); itteam++) { -
branches/cpp-ode/src/libmmpong/netgame_ode_pong.h
r536 r538 29 29 team2players[srv_teamid_cur++]=std::set<uint16_t>(); 30 30 31 mypadpos=0.5; 32 31 33 //ATTENTION: do not perform server-specific actions here 32 34 // => use srv_init() instead … … 37 39 PlayerId, 38 40 PlayerLeave, 41 PlayerPadPos 39 42 } CmdCustom; 40 43 … … 42 45 virtual NetEnt::pointer cln_ent_update(NetMsg::pointer msg); 43 46 virtual void cln_msg_custom(NetMsg::pointer msg); 47 void cln_set_paddlepos(float pos); //0.0 <= pos <= 1.0 44 48 45 49 //server … … 75 79 //client stuff 76 80 uint16_t myplayerid, myteamid, mypadid; 81 float mypadpos; 77 82 }; 78 83 -
branches/cpp-ode/src/mmpong-gl/client_gl.cc
r537 r538 1 1 #include "client_gl.h" 2 #include "hid.h" 2 3 3 4 using namespace mmp; … … 101 102 renderer.change_view(mouse_x*CAM_SPEED, mouse_y*CAM_SPEED); 102 103 } 103 else if (mouse_x != 0 || mouse_y != 0) { 104 //paddle control here! 104 else { 105 boost::shared_ptr<HID> hid=boost::dynamic_pointer_cast<HID>(game); 106 if (hid) 107 hid->process(renderer, key_state, mouse_state, mouse_x, mouse_y); 105 108 } 106 109 -
branches/cpp-ode/src/mmpong-gl/netgame_ode_pong_gl.h
r535 r538 6 6 #include "ode_box_gl.h" 7 7 #include "ode_sphere_gl.h" 8 #include "hid.h" 8 9 9 10 namespace mmp { 10 11 11 class NetGameODEPongGL : public NetGameODEPong {12 class NetGameODEPongGL : public NetGameODEPong, public HID { 12 13 public: 13 14 static pointer create(NetCon::pointer cln_con_, const std::string& _playername, const std::string& _resdir) { … … 35 36 36 37 }; 38 39 virtual void process(Renderer& renderer, uint8_t *key_state, uint32_t mouse_state, int mouse_x, int mouse_y) { 40 if (mouse_x != 0 || mouse_y != 0) { 41 cln_set_paddlepos(mypadpos + (1.0/100)*mouse_y); 42 43 } 44 }; 37 45 private: 38 46 std::string playername; -
branches/cpp-ode/src/mmpongd/server.cc
r528 r538 87 87 bool result=game->srv_msg_process(con, msg); 88 88 if (!result) { 89 LOG ("Kicking client")89 LOGDBG("Kicking client") 90 90 game->srv_con_end(con); 91 91 game->srv_con_remove(con); 92 man_.stop(con); 92 93 } 93 94 }
