63 lines
1.6 KiB
C++
63 lines
1.6 KiB
C++
#ifndef _SMTP_SMTPTHREAD_HPP_
|
|
#define _SMTP_SMTPTHREAD_HPP_
|
|
#ifndef _THREAD_MESSAGETHREAD_HPP_
|
|
#include <thread/mthread.hpp>
|
|
#endif
|
|
#ifndef _SMTP_SMTPCLIENT_HPP_
|
|
#include <smtp/smtp.hpp>
|
|
#endif
|
|
#ifndef _SOCKET_BLOCKHOOKER_HPP_
|
|
#include <socket/hooker.hpp>
|
|
#endif
|
|
|
|
class SMTPThread : private MessageThread, public SMTPClient
|
|
{
|
|
public:
|
|
enum HandlerType{MsgPreOpen,MsgOpen,MsgPostOpen};
|
|
SMTPThread(void);
|
|
SMTPThread(const SMTPThread &someSMTPThread);
|
|
virtual ~SMTPThread();
|
|
BOOL open(const String &serverName);
|
|
void insertHandler(ThreadCallbackPointer pThreadCallback,HandlerType typeHandler);
|
|
void removeHandler(HandlerType typeHandler);
|
|
void stop(void);
|
|
private:
|
|
enum {TimeOut=10000};
|
|
void handleOpen(String *pServerName);
|
|
DWORD callHandler(ThreadMessage &someThreadMessage,HandlerType typeHandler);
|
|
DWORD threadHandler(ThreadMessage &someThreadMessage);
|
|
CallbackData::ReturnType hookHandler(CallbackData &someCallbackData);
|
|
|
|
ThreadCallback<SMTPThread> mThreadHandler;
|
|
Array<ThreadCallbackPointer> mEventHandlers;
|
|
Callback<SMTPThread> mHookHandler;
|
|
BlockHooker mBlockHooker;
|
|
DWORD mStartTime;
|
|
DWORD mDeltaTime;
|
|
};
|
|
|
|
inline
|
|
void SMTPThread::insertHandler(ThreadCallbackPointer pThreadCallback,HandlerType typeHandler)
|
|
{
|
|
mEventHandlers[typeHandler]=ThreadCallbackPointer(pThreadCallback);
|
|
}
|
|
|
|
inline
|
|
void SMTPThread::removeHandler(HandlerType typeHandler)
|
|
{
|
|
mEventHandlers[typeHandler]=ThreadCallbackPointer();
|
|
}
|
|
|
|
inline
|
|
DWORD SMTPThread::callHandler(ThreadMessage &someThreadMessage,HandlerType typeHandler)
|
|
{
|
|
return mEventHandlers[typeHandler].callback(someThreadMessage);
|
|
}
|
|
|
|
inline
|
|
void SMTPThread::stop(void)
|
|
{
|
|
MessageThread::stop();
|
|
}
|
|
#endif
|