Files
Work/smtp/SMTPTHRD.HPP
2024-08-07 09:16:27 -04:00

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