Initial
This commit is contained in:
82
smtp/SMTPTHRD.CPP
Normal file
82
smtp/SMTPTHRD.CPP
Normal file
@@ -0,0 +1,82 @@
|
||||
#include <smtp/smtpthrd.hpp>
|
||||
|
||||
#if defined(_MSC_VER)
|
||||
#pragma warning(disable:4355)
|
||||
#endif
|
||||
SMTPThread::SMTPThread(void)
|
||||
: mStartTime(0), mDeltaTime(0)
|
||||
{
|
||||
mThreadHandler.setCallback(this,&SMTPThread::threadHandler);
|
||||
mHookHandler.setCallback(this,&SMTPThread::hookHandler);
|
||||
mEventHandlers.size((MsgPostOpen-MsgPreOpen)+1);
|
||||
MessageThread::insertHandler(&mThreadHandler);
|
||||
mBlockHooker.setHandler(&mHookHandler);
|
||||
}
|
||||
|
||||
SMTPThread::SMTPThread(const SMTPThread &someSMTPThread)
|
||||
{ // private implementation
|
||||
mThreadHandler.setCallback(this,&SMTPThread::threadHandler);
|
||||
MessageThread::insertHandler(&mThreadHandler);
|
||||
}
|
||||
|
||||
SMTPThread::~SMTPThread()
|
||||
{
|
||||
stop();
|
||||
MessageThread::removeHandler(&mThreadHandler);
|
||||
}
|
||||
|
||||
CallbackData::ReturnType SMTPThread::hookHandler(CallbackData &someCallbackData)
|
||||
{
|
||||
mDeltaTime=(::GetTickCount()-mStartTime);
|
||||
if(mDeltaTime>TimeOut){::OutputDebugString("SMTPThread::hookHandler TIMEOUT\n");return TRUE;}
|
||||
return (CallbackData::ReturnType)FALSE;
|
||||
}
|
||||
|
||||
DWORD SMTPThread::threadHandler(ThreadMessage &someThreadMessage)
|
||||
{
|
||||
switch(someThreadMessage.message())
|
||||
{
|
||||
case ThreadMessage::TM_CREATE :
|
||||
break;
|
||||
case ThreadMessage::TM_DESTROY :
|
||||
break;
|
||||
case ThreadMessage::TM_USER :
|
||||
if(MsgOpen==someThreadMessage.userDataOne())handleOpen((String*)someThreadMessage.userDataTwo());
|
||||
break;
|
||||
}
|
||||
return FALSE;
|
||||
}
|
||||
|
||||
void SMTPThread::handleOpen(String *pServerName)
|
||||
{
|
||||
ThreadMessage openMessage;
|
||||
String serverName(*pServerName);
|
||||
int currentPriority;
|
||||
BOOL openResult;
|
||||
|
||||
delete pServerName;
|
||||
currentPriority=::GetThreadPriority(::GetCurrentThread());
|
||||
::SetThreadPriority(::GetCurrentThread(),THREAD_PRIORITY_ABOVE_NORMAL);
|
||||
if(callHandler(openMessage,MsgPreOpen))
|
||||
{
|
||||
::SetThreadPriority(::GetCurrentThread(),currentPriority);
|
||||
return;
|
||||
}
|
||||
mStartTime=::GetTickCount();
|
||||
mBlockHooker.hookBlock();
|
||||
SMTPClient::open(serverName);
|
||||
mBlockHooker.unhookBlock();
|
||||
openMessage.userDataOne(isConnected());
|
||||
::SetThreadPriority(::GetCurrentThread(),currentPriority);
|
||||
callHandler(openMessage,MsgOpen);
|
||||
callHandler(openMessage,MsgPostOpen);
|
||||
SMTPClient::close();
|
||||
}
|
||||
|
||||
BOOL SMTPThread::open(const String &serverName)
|
||||
{
|
||||
String *pString=new String(serverName);
|
||||
ThreadMessage openMessage(ThreadMessage::TM_USER,MsgOpen,(LONG)pString);
|
||||
return postMessage(openMessage);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user