//------------------------------------------------------------------------------ //! created : 2010/04/22 //! author : by i4u4me //! remark : ÆÐŶÀ» º¸³»°í ÀÀ´äÀÌ ¿ÀÁö ¾Ê¾ÒÀ»°æ¿ì ´Ù½Ã ¿äûÇÔ. //------------------------------------------------------------------------------ #ifndef GAMECLIENT_PACKETREQUESTMANAGER_H_ #define GAMECLIENT_PACKETREQUESTMANAGER_H_ #if _MSC_VER > 1000 #pragma once #endif #include #include #define PACKET_WAITING_MILLISECOND (1000 * 30) //------------------------------------------------------------------------------ //!PacketRequestManager //------------------------------------------------------------------------------ class PacketRequestManager : public util::Singleton { public: class PacketRequestInfo { public: PacketRequestInfo() : syn_packet_(NULL), ack_packet_(NULL), nak_packet_(NULL), syn_packet_size_(0), send_millisecond_(0), wait_millisecond_(0), is_request_(false){} PacketRequestInfo(MSG_BASE* syn_packet, //!< new »ý¼º¼ºÇؼ­ ³ÖÀ½ MSG_BASE* ack_packet, //!< new·Î »ý¼ºÇؼ­ ³ÖÀ½ MSG_BASE* nak_packet, //!< new·Î »ý¼ºÇؼ­ ³ÖÀ½ int syn_packet_size, DWORD send_millisecond, DWORD wait_millisecond, bool is_request) { syn_packet_ = syn_packet; ack_packet_ = ack_packet; nak_packet_ = nak_packet; syn_packet_size_ = syn_packet_size; send_millisecond_ = send_millisecond; wait_millisecond_ = wait_millisecond; is_request_ = is_request; } ~PacketRequestInfo() { SAFE_DELETE(syn_packet_); SAFE_DELETE(ack_packet_); SAFE_DELETE(nak_packet_); } DWORD send_millisecond() const { return send_millisecond_; } void set_send_millisecond(DWORD millisecond) { send_millisecond_ = millisecond; } DWORD wait_millisecond() const { return wait_millisecond_; } bool is_request() const { return is_request_; } MSG_BASE* syn_packet() const { return syn_packet_; } MSG_BASE* ack_packet() const { return ack_packet_; } MSG_BASE* nak_packet() const { return nak_packet_; } int syn_packet_size() const { return syn_packet_size_; } private: DWORD send_millisecond_; DWORD wait_millisecond_; int syn_packet_size_; bool is_request_; MSG_BASE* syn_packet_; //!< new ·Î »ý¼ºÇÏ°í ¼Ò¸êÀÚ¿¡¼­ delete ÇÑ´Ù. MSG_BASE* ack_packet_; //!< new ·Î »ý¼ºÇÏ°í ¼Ò¸êÀÚ¿¡¼­ delete ÇÑ´Ù. MSG_BASE* nak_packet_; //!< new ·Î »ý¼ºÇÏ°í ¼Ò¸êÀÚ¿¡¼­ delete ÇÑ´Ù. }; typedef boost::shared_ptr PacketRequestInfo_Shared_Ptr; public: PacketRequestManager(); ~PacketRequestManager(); void Release(); void CheckRequestPacket(); void NetworkProc(MSG_BASE * packet); void PushPacket(MSG_BASE* syn_packet, MSG_BASE* ack_packet, MSG_BASE* nak_packet, int syn_packet_size, DWORD wait_millisecond, bool is_request); bool is_sent(BYTE category, BYTE protocol); int count() { return static_cast(request_info_vector_.size()); } std::vector& request_info_vector() { return request_info_vector_; } private: bool ComparePacket_CG_QUEST_COMPLETE_ACK(PacketRequestInfo* info, MSG_CG_QUEST_COMPLETE_ACK* packet); bool ComparePacket_CG_SYNC_WINGS_CONTROL_CMD(MSG_CG_SYNC_WINGS_CONTROL_CMD* packet); bool ComparePacket_CG_STATUS_STAT_APPLY_ACK(MSG_CG_STATUS_STAT_APPLY_ACK* packet); std::vector request_info_vector_; }; #endif // GAMECLIENT_PACKETREQUESTMANAGER_H_