이런식으로 에러가 나는거라서요...
_WIN32_WINNT=0x0500 이렇게 세팅부분에 넣어주면 에러가
안나고요...
디버그 모드는 괜찮은데 릴리지 모드에서 에러가
나네요..
그리고 서버끼리의 통신은 서버 머신위치가 틀린
관계로 소켓 통신을 해야됩니다..
서버가 각각 매니지먼트 서버와 로그인서버 등등
여러개로 되어 있어서요...
ace의 편한점은 있는 반면에 좀 까다로운 점이 좀
있군요...
이 객체를 사용하여서요....
class Receiver;
class Acceptor : public ACE_Asynch_Acceptor<Receiver>
{
friend class Receiver;
public:
int get_number_sessions (void) { return this->sessions_; }
size_t get_total_snd (void) { return this->total_snd_; }
size_t get_total_rcv (void) { return this->total_rcv_; }
long get_total_w (void) { return this->total_w_; }
long get_total_r (void) { return this->total_r_; }
Acceptor (void);
virtual ~Acceptor (void);
void stop (void);
void cancel_all (void);
// Virtual from ACE_Asynch_Acceptor
Receiver *make_handler (void);
private:
void on_new_receiver (Receiver &rcvr);
void on_delete_receiver (Receiver &rcvr);
ACE_SYNCH_RECURSIVE_MUTEX lock_;
int sessions_;
Receiver *list_receivers_[MAX_RECEIVERS];
size_t total_snd_;
size_t total_rcv_;
long total_w_;
long total_r_;
};
class Receiver : public ACE_Service_Handler
{
friend class Acceptor;
public:
Receiver (Acceptor *acceptor = 0, int index = -1);
~Receiver (void);
size_t get_total_snd (void) { return this->total_snd_; }
size_t get_total_rcv (void) { return this->total_rcv_; }
long get_total_w (void) { return this->total_w_; }
long get_total_r (void) { return this->total_r_; }
// This is called to pass the new connection's addresses.
virtual void addresses (const ACE_INET_Addr& peer,
const ACE_INET_Addr& local);
/// This is called after the new connection has been accepted.
virtual void open (ACE_HANDLE handle,
ACE_Message_Block &message_block);
virtual int close();
virtual int send_packet(const void* buf, size_t size);
User * user_;
protected:
/**
* @name AIO callback handling
*
* These methods are called by the framework
*/
/// This is called when asynchronous <read> operation from the
/// socket completes.
virtual void handle_read_stream (const ACE_Asynch_Read_Stream::Result
&result);
/// This is called when an asynchronous <write> to the socket
/// completes.
virtual void handle_write_stream (const
ACE_Asynch_Write_Stream::Result &result);
virtual int recv_packet(ACE_Message_Block *&_message);
virtual int process_packet(ACE_Message_Block *packet);
virtual void on_close();
private:
int initiate_read_stream (void);
int initiate_write_stream (ACE_Message_Block &mb, size_t nbytes);
void cancel ();
Acceptor *acceptor_;
int index_;
ACE_Asynch_Read_Stream rs_;
ACE_Asynch_Write_Stream ws_;
ACE_HANDLE handle_;
ACE_Message_Block* msg_frag_;
char szMsgremain[4096*2];
int m_nRemaincount;
ACE_SYNCH_MUTEX lock_;
long io_count_; // Number of currently outstanding I/O
requests
int flg_cancel_;
size_t total_snd_; // Number of bytes successfully sent
size_t total_rcv_; // Number of bytes successfully received
long total_w_; // Number of write operations
long total_r_; // Number of read operations
};
void init (port)
{
ACE_INET_Addr addr(port);
if (myTask_.start (6, proactor_type, 512) == 0) {
acceptor_.open(addr,0);
//connector_.open(addr);
//myTask_.open ();
ACE_Time_Value inital(0);
ACE_Time_Value interval(10);
ACE_Proactor::instance()->schedule_timer(timer_,0,inital,interval);
}
}
뭐 이런식으로 구현을 했고요...
그런데 아직도 왜 디버그는
D:\WORK\ACE\ace/OS.i(2051) : error C2039: 'TryEnterCriticalSection' :
is not a member of '`global namespace''
D:\WORK\ACE\ace/OS.i(2051) : error C2065: 'TryEnterCriticalSection' :
undeclared identifier
에러가 안나고 릴리즈는 나는지 모르겟네요...