📄 commandtask.cpp
字号:
// CommandTask.cpp,v 1.2 2004/01/08 20:20:43 shuston Exp
#include "CommandTask.h"
// Listing 01 code/ch18
CommandTask::CommandTask (int command)
: inherited (), command_(command)
{ }
// Listing 01
// Listing 02 code/ch18
int CommandTask::open (void *)
{
return this->activate ();
}
// Listing 02
// Listing 03 code/ch18
int CommandTask::put (ACE_Message_Block *message,
ACE_Time_Value *timeout)
{
return this->putq (message, timeout);
}
// Listing 03
// Listing 04 code/ch18
int CommandTask::process (Command *)
{
ACE_TRACE (ACE_TEXT ("CommandTask::process()"));
return Command::RESULT_FAILURE;
}
// Listing 04
// Listing 05 code/ch18
int CommandTask::close (u_long flags)
{
int rval = 0;
if (flags == 1)
{
ACE_Message_Block *hangup = new ACE_Message_Block;
hangup->msg_type (ACE_Message_Block::MB_HANGUP);
if (this->putq (hangup->duplicate ()) == -1)
{
ACE_ERROR_RETURN ((LM_ERROR,
ACE_TEXT ("%p\n"),
ACE_TEXT ("Task::close() putq")),
-1);
}
hangup->release ();
rval = this->wait ();
}
return rval;
}
// Listing 05
// Listing 06 code/ch18
// Listing 061 code/ch18
int CommandTask::svc (void)
{
ACE_Message_Block *message;
for (;;)
{
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("CommandTask::svc() - ")
ACE_TEXT ("%s waiting for work\n"),
this->module ()->name ()));
if (this->getq (message) == -1)
ACE_ERROR_RETURN ((LM_ERROR,
ACE_TEXT ("%p\n"),
ACE_TEXT ("getq")),
-1);
if (message->msg_type () == ACE_Message_Block::MB_HANGUP)
{
if (this->putq (message->duplicate ()) == -1)
{
ACE_ERROR_RETURN ((LM_ERROR,
ACE_TEXT ("%p\n"),
ACE_TEXT ("Task::svc() putq")),
-1);
}
message->release ();
break;
}
// Listing 061
// Listing 062 code/ch18
Command *command = (Command *)message->data_block ();
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("CommandTask::svc() - ")
ACE_TEXT ("%s got work request %d\n"),
ACE_TEXT (this->module ()->name ()),
command->command_));
if (command->command_ != this->command_)
{
this->put_next (message->duplicate ());
}
// Listing 062
// Listing 063 code/ch18
else
{
int result = this->process (command);
ACE_DEBUG ((LM_DEBUG,
ACE_TEXT ("CommandTask::svc() - ")
ACE_TEXT ("%s work request %d result is %d\n"),
ACE_TEXT (this->module ()->name ()),
command->command_,
result));
if (result == Command::RESULT_FAILURE)
{
command->numeric_result_ = -1;
}
// Listing 063
// Listing 064 code/ch18
else if (result == Command::RESULT_PASS)
{
this->put_next (message->duplicate ());
}
// Listing 064
// Listing 065 code/ch18
else // result == Command::RESULT_SUCCESS
{
if (this->is_writer ())
{
this->sibling ()->putq
(message->duplicate ());
}
// Listing 065
// Listing 066 code/ch18
else // this->is_reader ()
{
this->put_next (message->duplicate ());
}
// Listing 066
} // result == ...
} // command->command_ ? = this->command_
// Listing 067 code/ch18
message->release ();
} // for (;;)
return 0;
}
// Listing 067
// Listing 06
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -