您的位置:首页 > 其它

FreeBSD 6.0架设管理与应用-第十八章 DHCP服务器

2010-08-16 16:03 459 查看
发送状态机比接收状态机相对要简单

send_machine.h

#ifndef MOOON_AGENT_SEND_MACHINE_H

#define MOOON_AGENT_SEND_MACHINE_H

#include <agent/config.h>

AGENT_NAMESPACE_BEGIN

class CAgentConnector;

class CSendMachine

{

public:

CSendMachine(CAgentConnector* connector);

bool is_finish() const;

util::handle_result_t continue_send();

util::handle_result_t send(const char* msg, size_t msg_size);

void reset();

private:

CAgentConnector* _connector;

private:

const char* _cursor;

size_t _remain_size;

};

AGENT_NAMESPACE_END

#endif // MOOON_AGENT_SEND_MACHINE_H


send_machine.cpp

#include "send_machine.h"

#include "agent_connector.h"

AGENT_NAMESPACE_BEGIN

CSendMachine::CSendMachine(CAgentConnector* connector)

:_connector(connector)

{

reset();

}

// 当前消息是否已经发送完

bool CSendMachine::is_finish() const

{

return 0 == _remain_size;

}

// 发送消息,可能是一个消息的第一次发送,也可能是一个消息的非第一次发送

util::handle_result_t CSendMachine::continue_send()

{

ssize_t bytes_sent = _connector->send(_cursor, _remain_size);

if (bytes_sent > -1)

{

_cursor += bytes_sent;

_remain_size -= bytes_sent;

}

return is_finish()

? util::handle_finish

: util::handle_continue;

}

// 发送消息,总是一个消息的第一次发送

// 参数说明:

// msg - 需要发送的消息

// msg_size - 需要发送的消息字节数

util::handle_result_t CSendMachine::send(const char* msg, size_t msg_size)

{

_cursor = msg;

_remain_size = msg_size;

return continue_send();

}

void CSendMachine::reset()

{

_cursor = NULL;

_remain_size = 0;

}

AGENT_NAMESPACE_END
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: